public virtual void LoadAllAmmo(vShooterWeapon weapon, bool secundaryWeapon = false)
 {
     if (!weapon)
     {
         return;
     }
     UpdateTotalAmmo();
     if (weapon.ammoCount < weapon.clipSize && (weapon.isInfinityAmmo || WeaponHasUnloadedAmmo(secundaryWeapon)))
     {
         var needAmmo = weapon.clipSize - weapon.ammoCount;
         if (weapon.isInfinityAmmo)
         {
             weapon.AddAmmo(needAmmo);
         }
         else
         {
             if (WeaponAmmo(weapon).count < needAmmo)
             {
                 needAmmo = WeaponAmmo(weapon).count;
             }
             weapon.AddAmmo(needAmmo);
             WeaponAmmo(weapon).Use(needAmmo);
         }
         weapon.onReload.Invoke();
     }
 }
        protected void ReloadWeaponAuto(vShooterWeapon weapon, bool ignoreAmmo, bool secundaryWeapon = false)
        {
            if (!weapon)
            {
                return;
            }
            UpdateTotalAmmo();

            if (!(!ignoreAmmo && (weapon.ammoCount >= weapon.clipSize || !WeaponHasAmmo(secundaryWeapon))))
            {
                var needAmmo = weapon.clipSize - weapon.ammoCount;

                if (!ignoreAmmo && WeaponAmmo(weapon).count < needAmmo)
                {
                    needAmmo = WeaponAmmo(weapon).count;
                }

                weapon.AddAmmo(needAmmo);
                if (!ignoreAmmo)
                {
                    WeaponAmmo(weapon).Use(needAmmo);
                }
            }
        }
        protected virtual IEnumerator AddAmmoToWeapon(vShooterWeapon weapon, float delayTime, bool ignoreEffects = false)
        {
            isReloading = true;
            if (weapon.ammoCount < weapon.clipSize && (weapon.isInfinityAmmo || WeaponHasUnloadedAmmo()) && !weapon.dontUseReload && !cancelReload)
            {
                if (!ignoreEffects)
                {
                    weapon.ReloadEffect();
                }
                yield return(new WaitForSeconds(delayTime));

                if (!cancelReload)
                {
                    var needAmmo = weapon.reloadOneByOne ? 1 : weapon.clipSize - weapon.ammoCount;

                    if (weapon.isInfinityAmmo)
                    {
                        weapon.AddAmmo(needAmmo);
                    }
                    else
                    {
                        if (WeaponAmmo(weapon).count < needAmmo)
                        {
                            needAmmo = WeaponAmmo(weapon).count;
                        }
                        weapon.AddAmmo(needAmmo);
                        WeaponAmmo(weapon).Use(needAmmo);
                    }

                    if (weapon.reloadOneByOne && weapon.ammoCount < weapon.clipSize && WeaponHasUnloadedAmmo())
                    {
                        if (WeaponAmmo(weapon).count == 0)
                        {
                            if (!ignoreEffects)
                            {
                                weapon.FinishReloadEffect();
                            }
                            if (!ignoreEffects)
                            {
                                isReloadingWeapon = false;
                            }
                            if (!ignoreEffects)
                            {
                                onFinishReloadWeapon.Invoke(weapon);
                            }
                        }
                        else
                        {
                            if (!ignoreEffects)
                            {
                                isReloadingWeapon = true;
                            }
                            if (!cancelReload)
                            {
                                if (!ignoreEffects)
                                {
                                    animator.SetInteger(ReloadID, weapon.reloadID);
                                    animator.SetTrigger(Reload);
                                }
                                StartCoroutine(AddAmmoToWeapon(weapon, delayTime, ignoreEffects));
                            }
                        }
                    }
                    else
                    {
                        if (!ignoreEffects)
                        {
                            weapon.FinishReloadEffect();
                        }
                        if (!ignoreEffects)
                        {
                            isReloadingWeapon = false;
                        }
                        if (!ignoreEffects)
                        {
                            onFinishReloadWeapon.Invoke(weapon);
                        }
                    }
                }
                UpdateTotalAmmo();
            }
            isReloading = false;
        }