private void CalculateVitalsBonus(float deltaTime) { if (_gc.Health.Status.OxygenPercentage <= 0f) { _drowningDeathEvent.Invoke(deltaTime); return; } if (_gameTimeGotUnderwater.HasValue) { if (_gameTimeGotUnderwater.Value >= _gc.WorldTime.Value) { _gameTimeGotUnderwater = null; return; } var gameMinutesUnterwater = (_gc.WorldTime.Value - _gameTimeGotUnderwater.Value).TotalMinutes; var oxyPercent = (float)gameMinutesUnterwater / (float)MaxGameMinutesUnderwater; BloodPressureTopBonus = Helpers.Lerp(0f, MaxBloodPressureBonus, oxyPercent); BloodPressureBottomBonus = Helpers.Lerp(0f, MaxBloodPressureBonus, oxyPercent); HeartRateBonus = Helpers.Lerp(0f, MaxHeartRateBonus, oxyPercent); OxygenLevelBonus = -Helpers.Lerp(0f, MaxOxygenBonus, oxyPercent); } }
private void ProcessUnderwaterEffects(float gameSecondsSinceLastCall, float deltaTime) { if (_lastUnderWaterState && !_gc.Player.IsUnderWater) { if (_gc.Health.Status.OxygenPercentage < 20f) { _playHardBreath.Invoke(deltaTime); } else if (_gc.Health.Status.OxygenPercentage < 40f) { _playMediumBreath.Invoke(deltaTime); } else if (_gc.Health.Status.OxygenPercentage < 70f) { _playLightBreath.Invoke(deltaTime); } _lastUnderWaterState = _gc.Player.IsUnderWater; } if (!_lastUnderWaterState && _gc.Player.IsUnderWater) { _lastUnderWaterState = _gc.Player.IsUnderWater; } }
private void ProcessRunningEffects(float gameSecondsSinceLastCall, float deltaTime) { if (_healthController.UnconsciousMode) { return; } if (_gc.Player.IsRunning && !_gc.Health.Status.CannotRun && !_gc.Player.IsUnderWater && !_gc.Player.IsSwimming && !_healthController.Status.IsLegFracture && !_healthController.IsInventoryOverload) { _gameSecondsInRunningState += gameSecondsSinceLastCall; } else { _gameSecondsInRunningState -= gameSecondsSinceLastCall; } if (_gameSecondsInRunningState < 0.00001f) { _gameSecondsInRunningState = 0; } if (_gameSecondsInRunningState >= SecondsUntilMaxRunningDeltaReached) { _gameSecondsInRunningState = SecondsUntilMaxRunningDeltaReached; } if (Math.Abs(_gameSecondsInRunningState) < 0.00001f) { return; } var runningPerc = _gameSecondsInRunningState / SecondsUntilMaxRunningDeltaReached; BloodPressureTopBonus = Helpers.Lerp(0f, MaxBloodPressureBonus, runningPerc); BloodPressureBottomBonus = Helpers.Lerp(0f, MaxBloodPressureBonus, runningPerc); HeartRateBonus = Helpers.Lerp(0f, MaxHeartRateBonus, runningPerc); BodyTemperatureBonus = Helpers.Lerp(0f, MaxBodyTemperatureBonus, runningPerc); OxygenLevelBonus = _gc.Player.IsUnderWater || _gc.Body.IsSleeping ? 0f : -Helpers.Lerp(0f, MaxOxygenBonus, runningPerc); // ignore if underwater if (_gameSecondsInRunningState > SecondsOfRunningBeforeWheeze) { if (!_isWheezeEventTriggered) { _intenseRunningOnEvent.Invoke(deltaTime); _isWheezeEventTriggered = true; } } else { if (_gameSecondsInRunningState < SecondsOfRunningBeforeWheeze) { if (_isWheezeEventTriggered) { _intenseRunningOffEvent.Invoke(deltaTime); _isWheezeEventTriggered = false; } } } }
private void CalculateVitalsBonus(float deltaTime) { if (_gc.Health.Status.OxygenPercentage <= 0f) { _drowningDeathEvent.Invoke(deltaTime); return; } var oxyPercent = 1f - _gc.Health.Status.OxygenPercentage / 100f; BloodPressureTopBonus = Helpers.Lerp(0f, MaxBloodPressureBonus, oxyPercent); BloodPressureBottomBonus = Helpers.Lerp(0f, MaxBloodPressureBonus, oxyPercent); HeartRateBonus = Helpers.Lerp(0f, MaxHeartRateBonus, oxyPercent); OxygenLevelBonus = -Helpers.Lerp(0f, MaxOxygenBonus, oxyPercent); }
private void ProcessInventoryEffects(float deltaTime) { if (_gc.Inventory.RoughWeight >= InventoryController.MaximumInventoryWeight) { if (!IsFreezed) { IsFreezed = true; _freezedByInventoryOverloadEvent.Invoke(deltaTime); } return; } IsFreezed = false; var invPerc = _gc.Inventory.RoughWeight / InventoryController.MaximumInventoryWeight; PlayerRunSpeedBonus = -Helpers.Lerp(0f, _gc.Player.RunSpeed / 2f, invPerc); PlayerWalkSpeedBonus = -Helpers.Lerp(0f, _gc.Player.WalkSpeed / 2f, invPerc); PlayerCrouchSpeedBonus = -Helpers.Lerp(0f, _gc.Player.CrouchSpeed / 3f, invPerc); }