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; }