void FireGun() { if (gunHandler.status == GunHandler.GunStatus.reloading || gunHandler.CantContinueShooting()) { return; } shootingGun = true; GunObject gun = gunHandler.gun; fireTimer = gun.firerate; switch (gun.shooting) { case GunObject.ShootType.semi: PlayShotSFX(); float addTime = gun.firerate / (float)semiCalculations; StartCoroutine(singleShot()); if (!gunHandler.ShootGun()) { AutoReloadGun(gunHandler.gunIndex); } IEnumerator singleShot() { SimulateShot(); for (int i = 0; i < semiCalculations; i++) { continuousShots++; ApplyRecoil(addTime); yield return(new WaitForSeconds(addTime)); } shootingGun = false; } fireDelayTimer = 0; //Restart the timer if semi or burst break; case GunObject.ShootType.auto: PlayShotSFX(); SimulateShot(); ApplyRecoil(gun.firerate); if (!gunHandler.ShootGun()) { AutoReloadGun(gunHandler.gunIndex); } shootingGun = false; break; case GunObject.ShootType.burst: PlayShotSFX(); float shotTime = gun.burstTime / (float)gun.burstShot; StartCoroutine(burstShot()); IEnumerator burstShot() { for (int i = 0; i < gun.burstShot; i++) { SimulateShot(); continuousShots++; ApplyRecoil(shotTime); if (!gunHandler.ShootGun()) { //Stop when we run out of bullets AutoReloadGun(gunHandler.gunIndex); yield return(null); } else { yield return(new WaitForSeconds(shotTime)); } } shootingGun = false; } fireDelayTimer = 0; //Restart the timer if semi or burst break; } }