Gun reload not working?

Hello all, this is my ammo script attached to the gun:

var Bullet : Rigidbody; //The bullet prefab is a Rigid body
var Spawn : Transform; //Where the bullet shoots from
var BulletSpeed : float = 1000; //How fast the bullet goes
var ReloadTime : float = 2; //How long it takes to reload
var AmmoInMag : float = 30; //How much ammo the gun carries
var IsFullAuto = true;
static var AmmoLeft : float;
private var CanFire = true;
var FireRate = 0.1;

function Start () {
	AmmoLeft = AmmoInMag;
	}

function Update () {

	if(IsFullAuto == false){
		if(Input.GetButtonDown("Fire1")){
			if(AmmoLeft > 0){
				Fire();
			}
		}
	}
	else{
	if(Input.GetButton("Fire1")){
			if(AmmoLeft > 0){
				Fire();
			}
		}
	}


	
	if(AmmoLeft == 0)
	{
		Reload();
	}
	
	if(AmmoLeft < 0){
		AmmoLeft = 0;
	}
}
function Fire(){
	if(CanFire == true){
		var bullet1 : Rigidbody = Instantiate(Bullet,Spawn.position,Spawn.rotation);
		bullet1.AddForce(bullet1.transform.right *BulletSpeed);
		CanFire = false;
		yield WaitForSeconds(FireRate);
		CanFire = true;
		AmmoLeft -= 1;
		audio.Play();	
	}
}



function Reload(){
	CanFire = false;
	yield WaitForSeconds(ReloadTime);
	CanFire = true;
}

I can’t figure out why, but all works until it has to reload - the gun will fire but when the AmmoInMag runs out, it doesn’t seem to reload… how can I fix this?

Help is appreciated + thanks in advance.

1 Answer

1

You’re not putting any bullets back in the gun in your Reload() function. Between lines 59 and 60, add:

AmmoLeft = AmmoInMag;

This works, with no errors, but after the first reload, it fires more than 7 shots before reloading, why is this? Side note - there are 7 bullets in the "AmmoInMag" variable in the inspector.

The problem is here: if(AmmoLeft == 0) { Reload(); } This is executed every frame in Update() during the time your code is waiting for 'ReloadTime'. This means a bunch of extra coroutines stack up refilling 'AmmoLeft'. This should fix it: if(AmmoLeft == 0 && CanFire) { Reload(); }

Thanks, that did the job.

I recommend you to take a look at the concept of the state machines... It's not that complicated and very useful in game logic programming