Ошибка уменьшения кол-ва патрон при стрельбе после перезарядки
После срабатывания коротины AmmoSize() (условной перезарядки) первые несколько секунд уходят патроны из переменной maxAmmo, а не ammoSizeMag. Причем изначально всё работает отлично, и если после перезарядки подождать несколько секунд (около трёх), то всё будет также отлично работать. Уже долго не могу понять в чем ошибка, сколько бы не перепроверял код. Возможно где-то должна быть дополнительная проверка?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Weapon : MonoBehaviour
{
[Header("All Settings")]
private float _nextFire = 0f;
private bool _isHaveAmmo = false;
private bool _maxAmmo = true;
public Animator animHands;
public GameObject AmmoUI;
private bool _isShooting = false;
private bool _isReload = false;
[Header("Weapon Settings")]
//public float damage = 20f;
public float fireRate = 10.0f;
public float range = 15f;
//public float force = 200f;
[Header("Ammo Settings")]
public int maxAmmo;
public int ammoSizeMag;
public int max_ammoSizeMag;
public GameObject ammoSizeMagText;
public GameObject maxAmmoText;
public void Start()
{
AmmoUI.SetActive(true);
}
public void Update()
{
AmmoAll();
GetComponents();
if (_isShooting == true && Time.time > _nextFire)
{
_nextFire = Time.time + 1f / fireRate;
AmmoCheck();
}
if (_maxAmmo == true)
{
if (_isReload == true)
{
StartCoroutine(AmmoSize());
}
}
}
public void GetComponents()
{
ammoSizeMagText.GetComponent<Text>().text = ammoSizeMag.ToString();
maxAmmoText.GetComponent<Text>().text = maxAmmo.ToString();
}
public void OnClickReload()
{
_isReload = true;
}
public void OnClickShoot()
{
if (_isHaveAmmo == true)
{
_isShooting = true;
animHands.SetBool("Shoot", true);
}
}
public void OnClickStopShoot()
{
_isShooting = false;
animHands.SetBool("Shoot", false);
}
public void AmmoAll()
{
if (ammoSizeMag == 30)
{
_maxAmmo = false;
}
else if (ammoSizeMag < 30)
{
_maxAmmo = true;
}
if (maxAmmo <= 0)
{
_maxAmmo = false;
}
if (_isShooting == true && ammoSizeMag <= 0)
{
_isHaveAmmo = false;
//_audioSource.PlayOneShot(noAmmo);
}
else if (ammoSizeMag != 0)
{
_isHaveAmmo = true;
}
}
public void AmmoCheck()
{
if (ammoSizeMag > 0 && ammoSizeMag <= 30)
{
_isHaveAmmo = true;
//StartCoroutine(Ejection());
ammoSizeMag--;
}
}
public IEnumerator Ejection()
{
yield return new WaitForSeconds(0.1f);
//bulletEjectionP.Play();
}
public IEnumerator AmmoSize()
{
animHands.SetBool("Reload", true);
_isHaveAmmo = false;
//reloadAnim.SetActive(true);
yield return new WaitForSeconds(2.5f);
_isHaveAmmo = true;
//reloadAnim.SetActive(false);
if (max_ammoSizeMag - ammoSizeMag >= maxAmmo)
{
ammoSizeMag += maxAmmo;
maxAmmo = 0;
_isReload = false;
animHands.SetBool("Reload", false);
}
else
{
maxAmmo -= max_ammoSizeMag - ammoSizeMag;
ammoSizeMag += max_ammoSizeMag - ammoSizeMag;
_isReload = false;
animHands.SetBool("Reload", false);
}
}
}