How to Let an Animation Finish Before Playing Another?

Right now I have a gun script, but I have 2 errors: 1. I have a counter on the amount of ammo, and you’re supposed to be able to shoot two shots, and then the gun automatically reloads, but it doesn’t let the second shooting anim finish, it just goes right into the reload anim. 2: Right now, the gun can shoot as many rays, and as fast as you want, but I want it to be more realistic and wait like half a second or 1 second before you’re able to shoot again (also you shouldn’t be able to shoot while you’re reloading)

Sorry about this being such a long question, but any help would be fantastic.

Thanks

#pragma strict

var sound1: AudioClip;

private var AmmoInGun : int = 2;

var Effect : Transform;
var TheDammage = 100;
var Distance = 50;
var Gun : Transform;

function Update () 
{	
	var hit : RaycastHit;
	var ray : Ray = Camera.main.ScreenPointToRay(Vector3(Screen.width * 0.5, Screen.height * 0.5, 0));
	
	if(Input.GetMouseButtonDown(0))
	{
		
		if (Physics.Raycast(ray, hit, Distance))
		{
			Shoot();
			
			var particleClone = Instantiate(Effect, hit.point, Quaternion.LookRotation(hit.normal));
			Destroy(particleClone.gameObject, 2);
			hit.transform.SendMessage("ApplyDammage", TheDammage, SendMessageOptions.DontRequireReceiver);
		}
	
	}
	
		if(AmmoInGun == 0)
		{
			Shoot();
			Reload();
		}	
		
		if (Input.GetKeyDown(KeyCode.R))
		{
			Reload();			
		}

		if (Gun.animation.isPlaying == false)
		{
			Gun.animation.CrossFade("Idle");
		}

}


function Shoot()
{
		audio.Play();
		Gun.animation.CrossFade("Shoot");
		AmmoInGun -=1;

}

function Reload()
{
	Gun.animation.CrossFade("RELOAD");
	AmmoInGun = 2;
}

if(AmmoInGun == 0)
{
Shoot();
Reload();
}

You call Reload(), which tells the animation to crossfade to the RELOAD animation, immediately after you call Shoot(). You could use Animation Events and have some call back that checks if you need to reload after the shoot animation. Or you could use a coroutine that waits the length of the shoot animation clip and then calls reload.

As for the second part of your question, again animation callbacks or coroutines could achieve the desired behaviour.