public void ResetWeaponStates() { foreach (var weaponState in _weaponStates) { weaponState.elapsedSinceLastShot = weaponState.cooldown; weaponState.currentDispersionDegrees = weaponState.defaultDispersionDegrees; if (weaponState == _activeWeaponState) { OnDispersionChanged?.Invoke(weaponState.currentDispersionDegrees); } } }
private IEnumerator SimulateRecoilDispersionRoutine(WeaponState weaponState, bool simulateRecoil) { var startDispersionAmount = simulateRecoil ? MAX_DISPERSION_DEGREE : weaponState.currentDispersionDegrees; var elapsed = 0f; while (_isActive && elapsed < weaponState.cooldown && weaponState.cooldown > 0f) { elapsed += Time.deltaTime; weaponState.currentDispersionDegrees = Mathf.Lerp(startDispersionAmount, weaponState.defaultDispersionDegrees, elapsed / weaponState.cooldown); if (weaponState.isActive) { OnDispersionChanged?.Invoke(weaponState.currentDispersionDegrees); } yield return(null); } weaponState.currentDispersionDegrees = weaponState.defaultDispersionDegrees; }
private void IncreaseDispersionRate() { _activeWeaponState.currentDispersionDegrees = Mathf.Min(MAX_DISPERSION_DEGREE, _activeConfig.dispersionIncrementOverTime * _activeWeaponState.currentDispersionDegrees); OnDispersionChanged?.Invoke(_activeWeaponState.currentDispersionDegrees); }
private void ResetActiveWeaponDispersionRate() { _activeWeaponState.currentDispersionDegrees = _activeConfig.dispersionDegrees; OnDispersionChanged?.Invoke(_activeWeaponState.currentDispersionDegrees); }