コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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;
            }
        }
コード例 #3
0
        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;
                    }
                }
            }
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }