Reload After Magazine Is Empty

I'm making a top down shooter and I'm using a modified version of the RocketLauncher.js script to act like a machine gun. (I'm doing this because I'm adding a trail to the bullet and it wouldn't look right with the MachineGun.js) I put magazines in the rocket launcher script (Now GunScript) and I made it so if the ammo runs out, if there is a magazine left, it'll add more ammo. It's all working fine but now I want there to be a break after there's no more ammo... Here's my primitive version of the script.

var projectile : Rigidbody;
var initialSpeed = 20.0;
var reloadTime = 0.5;
var ammoCount = 20;
var ammoInMagazine = 20;
var magazineCount = 5.0;
private var lastShot = -10.0;

function Update() {
    if (ammoCount == 0 && magazineCount > 1) {
        ammoCount = ammoInMagazine;
        magazineCount--;
    }
}

function Fire () {
    // Did the time exceed the reload time?
    if (Time.time > reloadTime + lastShot && ammoCount > 0) {
        // create a new projectile, use the same position and rotation as the Launcher.
        var instantiatedProjectile : Rigidbody = Instantiate (projectile, transform.position, transform.rotation);

        // Give it an initial forward velocity. The direction is along the z-axis of the missile launcher's transform.
        instantiatedProjectile.velocity = transform.TransformDirection(Vector3 (0, 0, initialSpeed));

        // Ignore collisions between the missile and the character controller
        Physics.IgnoreCollision(instantiatedProjectile.collider, transform.root.collider);

        lastShot = Time.time;
        ammoCount--;
    }
}

It's primitive but it works :)

Again, I want it to reload after the magazine runs out of bullets.

You can use `yield WaitForSeconds`. What's important to notices is that there is a bool to make sure that Reload isn't called multiple times at the same time. I used a bool, there are other ways, but if you don't, every frame that there is not ammo (that is your FPS * reloadTime) will call reload again hence one reload would eat up maybe 100 magazines. That's bad.

var isReloading = false;
var reloadTime = 3;

function Update() {
    if(Input.GetButtonDown("Reload") || ammoCount == 0) {
         if (magazineCount > 1 && !isReloading) {
             isReloading = true;
             Reload();

         }
    } 
}

function Reload () {

    yield WaitForSeconds(reloadTime);

    ammoCount = ammoInMagazine;
    magazineCount--;

    isReloading = false;
}

Edit - Whoops. Sorry about giving the same answer. Was away from my computer and by the time posted - it was already answered.

The quickest way would be:

if (ammoCount == 0 && magazineCount > 1) 
{
        ammoCount = ammoInMagazine;
        magazineCount--;

        // Don't let the player shoot for 3 seconds
        lastShot = Time.time + 3 - reloadTime;
}

A cleaner way (IMHO) would be to do something like this:

private var bChangingClip:boolean = false;

// Getting rid of the Update function. This is a waste. No need to check each frame... Just after firing
//function Update() {}

function Fire () 
{
    // Did the time exceed the reload time?
    if (!bChangingClip && Time.time > reloadTime + lastShot && ammoCount > 0) 
    {
        ...
        lastShot = Time.time;
        ammoCount--;
        if (ammoCount == 0 && magazineCount > 1) 
           StartCoroutine("IE_ChangeClip");
    }
}

function IE_ChangeClip(): IEnumerator
{
     bChangingClip = true;

     yield WaitForSeconds(3.0);

     ammoCount = ammoInMagazine;
     magazineCount--;
     bChangingClip = false;
}