i have this script for a 2 handed pistol model, the problem is that each gun stops firing when one of them gets into reload state, i cant see why this happens
heres the code
var normalpositionleft : Vector3;
var aimpositionleft : Vector3;
var normalpositionright : Vector3;
var aimpositionright : Vector3;
var aimFOV : float = 45;
var normalFOV : float = 65;
var speed: float;
var damping : float;
var player : Transform;
var AudioSourceleft : AudioSource;
var AudioSourceright : AudioSource;
var fireAudioSourceleft : AudioSource;
var fireAudioSourceright : AudioSource;
var emptySound : AudioClip;
var fireSound : AudioClip;
var armleft : Transform;
var armright : Transform;
var reloadSoundleft : AudioClip;
var reloadSoundright : AudioClip;
var ammoToReload : float = 12;
var impactprefab : Transform;
var projectilecount : int = 1;
var inaccuracy : float = 0.1;
var force : float = 500;
var damage : float = 50;
var range : float = 100;
var mask : LayerMask;
var fireAnimleft : AnimationClip;
var fireAnimright : AnimationClip;
var fireAnimSpeed : float = 1.5;
var reloadAnimright : AnimationClip;
var reloadAnimleft : AnimationClip;
var shell : Transform;
var shellPosright : Transform;
var shellPosleft : Transform;
var shellejectdelay : float = 0;
var ammo : float = 200;
var currentammoright: float = 12;
var currentammoleft: float = 12;
var muzzle : Transform;
var muzzlePosright : Transform;
var muzzlePosleft : Transform;
var retractPos : Vector3;
private var isfiring : boolean = false;
private var didfireleft : boolean = false;
private var nextField : float;
private var isaiming : boolean = false;
private var isreloadingleft : boolean;
private var isreloadingright : boolean;
private var canaim : boolean = true;
private var retract : boolean = false;
private var canfire : boolean = true;
private var canreload : boolean = true;
private var canrun : boolean = true;
function Start()
{
retract = false;
Screen.lockCursor = true;
onstart();
}
function Update ()
{
var step = speed * Time.deltaTime;
var newField = Mathf.SmoothDamp(Camera.main.fieldOfView, nextField, damping, .3);
Camera.main.fieldOfView = newField;
if (retract)
{
canfire = false;
isaiming = false;
armright.transform.localPosition = Vector3.MoveTowards(armright.transform.localPosition, retractPos, 5 * Time.deltaTime);
armleft.transform.localPosition = Vector3.MoveTowards(armleft.transform.localPosition, retractPos, 5 * Time.deltaTime);
nextField = normalFOV;
}
else
{
canfire = true;
}
if (Input.GetMouseButton(1) && canaim)
{
isaiming = true;
armright.transform.localPosition = Vector3.MoveTowards(armright.transform.localPosition, aimpositionright, step);
armleft.transform.localPosition = Vector3.MoveTowards(armleft.transform.localPosition, aimpositionleft, step);
nextField = aimFOV;
canrun = false;
}
else
{
isaiming = false;
armright.transform.localPosition = Vector3.MoveTowards(armright.transform.localPosition, normalpositionright, step);
armleft.transform.localPosition = Vector3.MoveTowards(armleft.transform.localPosition, normalpositionleft, step);
nextField = normalFOV;
canrun = true;
}
if ((currentammoleft ==0 || currentammoright == 0) && ammo == 0)
{
canfire = false;
canreload = false;
if (Input.GetMouseButtonDown(0) )
{
AudioSourceleft.PlayOneShot(emptySound);
}
}
else
{
canreload = true;
}
if (Input.GetMouseButton(0) && canfire)
{
if (didfireleft)
{
fireright();
}
else
{
fireleft();
}
}
}
function onstart()
{
AudioSourceleft.Stop();
AudioSourceright.Stop();
}
function fireleft()
{
if (currentammoleft <= 0 )
{
reloadleft();
}
if (armleft.animation[fireAnimleft.name].enabled == false && !isreloadingleft)
{
var muzzleInstance2 = Instantiate(muzzle, muzzlePosleft.transform.position,muzzlePosleft.transform.rotation);
muzzleInstance2.parent = transform;
ejectshellleft();
fire(1);
fireAudioSourceleft.PlayOneShot(fireSound, 1);
armleft.animation[fireAnimleft.name].speed = fireAnimSpeed;
armleft.animation.Play(fireAnimleft.name);
currentammoleft -=1;
yield WaitForSeconds (armleft.animation[fireAnimleft.name].length * 1);
didfireleft = true;
}
}
function fireright()
{
if (currentammoright <= 0 )
{
reloadright();
}
if (armright.animation[fireAnimright.name].enabled == false && !isreloadingright)
{
var muzzleInstance1 = Instantiate(muzzle, muzzlePosright.transform.position,muzzlePosright.transform.rotation);
muzzleInstance1.parent = transform;
ejectshellright();
fire(1);
fireAudioSourceright.PlayOneShot(fireSound, 1);
armright.animation[fireAnimright.name].speed = fireAnimSpeed;
armright.animation.Play(fireAnimright.name);
currentammoright -=1;
yield WaitForSeconds (armright.animation[fireAnimright.name].length * 1);
didfireleft = false;
}
}
function reloadleft()
{
if (armleft.animation[reloadAnimleft.name].enabled == false && canreload)
{
isreloadingleft = true;
armleft.animation.Play(reloadAnimleft.name);
AudioSourceleft.clip = reloadSoundleft;
AudioSourceleft.loop = false;
AudioSourceleft.volume = 1;
AudioSourceleft.Play();
canaim = false;
yield WaitForSeconds(armleft.animation[reloadAnimleft.name].length * 0.3);
ammoToReload = Mathf.Clamp(ammoToReload, ammoToReload, ammo);
ammo -= ammoToReload;
currentammoleft += ammoToReload;
yield WaitForSeconds(armleft.animation[reloadAnimleft.name].length * 0.7);
isreloadingleft = false;
canaim = true;
}
}
function reloadright()
{
if (armright.animation[reloadAnimright.name].enabled == false && canreload)
{
isreloadingright = true;
armright.animation.Play(reloadAnimright.name);
AudioSourceright.clip = reloadSoundright;
AudioSourceright.loop = false;
AudioSourceright.volume = 1;
AudioSourceright.Play();
canaim = false;
yield WaitForSeconds(armright.animation[reloadAnimright.name].length * 0.3);
ammoToReload = Mathf.Clamp(ammoToReload, ammoToReload, ammo);
ammo -= ammoToReload;
currentammoright += ammoToReload;
yield WaitForSeconds(armright.animation[reloadAnimright.name].length * 0.7);
isreloadingright = false;
canaim = true;
}
}
function doRetract()
{
retract = true;
}
function doNormal()
{
onstart();
retract = false;
}
function ejectshellleft()
{
yield WaitForSeconds(shellejectdelay);
var shellInstance = Instantiate(shell, shellPosleft.transform.position,shellPosleft.transform.rotation);
shellInstance.rigidbody.AddRelativeForce(80,80,0);
shellInstance.rigidbody.AddRelativeTorque(10,10,0);
}
function ejectshellright()
{
yield WaitForSeconds(shellejectdelay);
var shellInstance = Instantiate(shell, shellPosright.transform.position,shellPosright.transform.rotation);
shellInstance.rigidbody.AddRelativeForce(80,80,0);
shellInstance.rigidbody.AddRelativeTorque(10,10,0);
}
function fire (i : int)
{
var rand : Vector2 = Random.insideUnitCircle;
var fwrd = Camera.main.transform.forward;
var camUp = Camera.main.transform.up;
var camRight = Camera.main.transform.right;
var wantedvector = fwrd;
wantedvector += Random.Range( -inaccuracy, inaccuracy ) * camUp + Random.Range( -inaccuracy, inaccuracy ) * camRight;
var ray = new Ray (transform.position, wantedvector);
var hit : RaycastHit = new RaycastHit();
if (Physics.Raycast(ray,hit, range,mask))
{
if(hit.rigidbody) hit.rigidbody.AddForceAtPosition (force * fwrd , hit.point);
hit.transform.SendMessageUpwards ("Damage",damage, SendMessageOptions.DontRequireReceiver);
var decal = Instantiate(impactprefab, hit.point, Quaternion.FromToRotation(Vector3.up, hit.normal));
decal.parent = hit.transform;
}
}