class HeatComfortMdfr: ModifierBase { override void Init() { m_TrackActivatedTime = false; m_ID = eModifiers.MDF_TEMPERATURE; m_TickIntervalInactive = DEFAULT_TICK_TIME_INACTIVE; m_TickIntervalActive = DEFAULT_TICK_TIME_ACTIVE; DisableDeactivateCheck(); } override bool ActivateCondition(PlayerBase player) { return true; } override bool DeactivateCondition(PlayerBase player) { return false; } override void OnReconnect(PlayerBase player) { } override string GetDebugText() { return m_Player.GetStatHeatComfort().Get().ToString(); } override string GetDebugTextSimple() { return m_Player.GetStatHeatComfort().Get().ToString(); } override void OnTick(PlayerBase player, float deltaT) { float heat_comfort = player.GetStatHeatComfort().Get(); float health_loss; float value_normalized; if( heat_comfort > PlayerConstants.WATER_LOSS_THRESHOLD_HC_PLUS_LOW ) { value_normalized = Math.Lerp(PlayerConstants.WATER_LOSS_THRESHOLD_HC_PLUS_LOW, PlayerConstants.WATER_LOSS_THRESHOLD_HC_PLUS_HIGH, heat_comfort); value_normalized = Math.Clamp(value_normalized, 0, 1); float water_loss = deltaT * Math.Lerp(PlayerConstants.WATER_LOSS_HC_PLUS_LOW, PlayerConstants.WATER_LOSS_HC_PLUS_HIGH, value_normalized); player.GetStatWater().Add(-water_loss); if( heat_comfort > PlayerConstants.WATER_LOSS_THRESHOLD_HC_PLUS_HIGH ) { value_normalized = Math.Lerp(PlayerConstants.WATER_LOSS_THRESHOLD_HC_PLUS_HIGH, 1.0, heat_comfort); value_normalized = Math.Clamp(value_normalized, 0, 1); health_loss = deltaT * Math.Lerp(PlayerConstants.HEALTH_LOSS_HC_PLUS_LOW, PlayerConstants.HEALTH_LOSS_HC_PLUS_HIGH, Easing.EaseInQuad(value_normalized)); } } if( heat_comfort < PlayerConstants.ENERGY_LOSS_THRESHOLD_HC_MINUS_LOW ) { value_normalized = Math.InverseLerp(PlayerConstants.ENERGY_LOSS_THRESHOLD_HC_MINUS_LOW, PlayerConstants.ENERGY_LOSS_THRESHOLD_HC_MINUS_HIGH, heat_comfort); value_normalized = Math.Clamp(value_normalized, 0, 1); float energy_loss = deltaT * Math.Lerp(PlayerConstants.ENERGY_LOSS_HC_MINUS_LOW, PlayerConstants.ENERGY_LOSS_HC_MINUS_HIGH, value_normalized); player.GetStatEnergy().Add(-energy_loss); if( heat_comfort < PlayerConstants.ENERGY_LOSS_THRESHOLD_HC_MINUS_HIGH ) { value_normalized = Math.InverseLerp(PlayerConstants.ENERGY_LOSS_THRESHOLD_HC_MINUS_HIGH, -1.0, heat_comfort); value_normalized = Math.Clamp(value_normalized, 0, 1); health_loss = deltaT * Math.Lerp(PlayerConstants.HEALTH_LOSS_HC_MINUS_LOW, PlayerConstants.HEALTH_LOSS_HC_MINUS_HIGH, Easing.EaseInQuad(value_normalized)); } } if( health_loss != 0 ) { player.AddHealth("","",-health_loss); } } };