heatcomfortmdfr.c 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. class HeatComfortMdfr: ModifierBase
  2. {
  3. override void Init()
  4. {
  5. m_TrackActivatedTime = false;
  6. m_ID = eModifiers.MDF_TEMPERATURE;
  7. m_TickIntervalInactive = DEFAULT_TICK_TIME_INACTIVE;
  8. m_TickIntervalActive = DEFAULT_TICK_TIME_ACTIVE;
  9. DisableDeactivateCheck();
  10. }
  11. override bool ActivateCondition(PlayerBase player)
  12. {
  13. return true;
  14. }
  15. override bool DeactivateCondition(PlayerBase player)
  16. {
  17. return false;
  18. }
  19. override void OnReconnect(PlayerBase player)
  20. {
  21. }
  22. override string GetDebugText()
  23. {
  24. return m_Player.GetStatHeatComfort().Get().ToString();
  25. }
  26. override string GetDebugTextSimple()
  27. {
  28. return m_Player.GetStatHeatComfort().Get().ToString();
  29. }
  30. override void OnTick(PlayerBase player, float deltaT)
  31. {
  32. float heat_comfort = player.GetStatHeatComfort().Get();
  33. float health_loss;
  34. float value_normalized;
  35. if( heat_comfort > PlayerConstants.WATER_LOSS_THRESHOLD_HC_PLUS_LOW )
  36. {
  37. value_normalized = Math.Lerp(PlayerConstants.WATER_LOSS_THRESHOLD_HC_PLUS_LOW, PlayerConstants.WATER_LOSS_THRESHOLD_HC_PLUS_HIGH, heat_comfort);
  38. value_normalized = Math.Clamp(value_normalized, 0, 1);
  39. float water_loss = deltaT * Math.Lerp(PlayerConstants.WATER_LOSS_HC_PLUS_LOW, PlayerConstants.WATER_LOSS_HC_PLUS_HIGH, value_normalized);
  40. player.GetStatWater().Add(-water_loss);
  41. if( heat_comfort > PlayerConstants.WATER_LOSS_THRESHOLD_HC_PLUS_HIGH )
  42. {
  43. value_normalized = Math.Lerp(PlayerConstants.WATER_LOSS_THRESHOLD_HC_PLUS_HIGH, 1.0, heat_comfort);
  44. value_normalized = Math.Clamp(value_normalized, 0, 1);
  45. health_loss = deltaT * Math.Lerp(PlayerConstants.HEALTH_LOSS_HC_PLUS_LOW, PlayerConstants.HEALTH_LOSS_HC_PLUS_HIGH, Easing.EaseInQuad(value_normalized));
  46. }
  47. }
  48. if( heat_comfort < PlayerConstants.ENERGY_LOSS_THRESHOLD_HC_MINUS_LOW )
  49. {
  50. value_normalized = Math.InverseLerp(PlayerConstants.ENERGY_LOSS_THRESHOLD_HC_MINUS_LOW, PlayerConstants.ENERGY_LOSS_THRESHOLD_HC_MINUS_HIGH, heat_comfort);
  51. value_normalized = Math.Clamp(value_normalized, 0, 1);
  52. float energy_loss = deltaT * Math.Lerp(PlayerConstants.ENERGY_LOSS_HC_MINUS_LOW, PlayerConstants.ENERGY_LOSS_HC_MINUS_HIGH, value_normalized);
  53. player.GetStatEnergy().Add(-energy_loss);
  54. if( heat_comfort < PlayerConstants.ENERGY_LOSS_THRESHOLD_HC_MINUS_HIGH )
  55. {
  56. value_normalized = Math.InverseLerp(PlayerConstants.ENERGY_LOSS_THRESHOLD_HC_MINUS_HIGH, -1.0, heat_comfort);
  57. value_normalized = Math.Clamp(value_normalized, 0, 1);
  58. health_loss = deltaT * Math.Lerp(PlayerConstants.HEALTH_LOSS_HC_MINUS_LOW, PlayerConstants.HEALTH_LOSS_HC_MINUS_HIGH, Easing.EaseInQuad(value_normalized));
  59. }
  60. }
  61. if( health_loss != 0 )
  62. {
  63. player.AddHealth("","",-health_loss);
  64. }
  65. }
  66. };