heatcomfortanimhandler.c 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. class HeatComfortAnimHandler
  2. {
  3. const float TICK_INTERVAL = 2;
  4. float m_TimeSinceLastTick;
  5. float m_ProcessTimeAccuFreeze;
  6. float m_ProcessTimeAccuFreezeRattle;
  7. float m_ProcessTimeAccuHot;
  8. PlayerBase m_Player;
  9. float m_EventTimeFreeze = -1;
  10. float m_EventTimeFreezeRattle = -1;
  11. float m_EventTimeHot = -1;
  12. protected ref HumanMovementState m_MovementState = new HumanMovementState();
  13. const float TIME_INTERVAL_HC_MINUS_LOW_MIN = 12; const float TIME_INTERVAL_HC_MINUS_LOW_MAX = 20;
  14. const float TIME_INTERVAL_HC_MINUS_HIGH_MIN = 25; const float TIME_INTERVAL_HC_MINUS_HIGH_MAX = 40;
  15. const float TIME_INTERVAL_HC_PLUS_LOW_MIN = 5; const float TIME_INTERVAL_HC_PLUS_LOW_MAX = 12;
  16. const float TIME_INTERVAL_HC_PLUS_HIGH_MIN = 15; const float TIME_INTERVAL_HC_PLUS_HIGH_MAX = 25;
  17. void HeatComfortAnimHandler(PlayerBase player)
  18. {
  19. m_Player = player;
  20. }
  21. void Update(float delta_time, HumanMovementState hms)
  22. {
  23. m_TimeSinceLastTick += delta_time;
  24. if( m_TimeSinceLastTick > TICK_INTERVAL )
  25. {
  26. Process(m_TimeSinceLastTick);
  27. m_TimeSinceLastTick = 0;
  28. }
  29. }
  30. float GetEventTime(float hc_value, float threshold_low, float threshold_high, float low_min, float high_min, float low_max, float high_max)
  31. {
  32. float inv_value = Math.InverseLerp(threshold_low, threshold_high, hc_value);
  33. float value_min = Math.Lerp(low_min, high_min, inv_value);
  34. float value_max = Math.Lerp(low_max, high_max, inv_value);
  35. return Math.RandomFloatInclusive(value_min, value_max);
  36. }
  37. void Process(float delta_time)
  38. {
  39. if( GetGame().IsServer() )
  40. {
  41. float hc = m_Player.GetStatHeatComfort().Get();
  42. if ( hc <= PlayerConstants.THRESHOLD_HEAT_COMFORT_MINUS_CRITICAL ) // Deep blue zone, rattling sounds are layerd on top of freezing sounds
  43. {
  44. m_ProcessTimeAccuFreezeRattle++;
  45. if (m_EventTimeFreezeRattle < 0)
  46. m_EventTimeFreezeRattle = GetEventTime(hc, -1, PlayerConstants.THRESHOLD_HEAT_COMFORT_MINUS_CRITICAL, TIME_INTERVAL_HC_MINUS_LOW_MIN, TIME_INTERVAL_HC_MINUS_HIGH_MIN, TIME_INTERVAL_HC_MINUS_LOW_MAX, TIME_INTERVAL_HC_MINUS_HIGH_MAX);
  47. if( m_ProcessTimeAccuFreezeRattle > m_EventTimeFreezeRattle )
  48. {
  49. m_ProcessTimeAccuFreezeRattle = 0;
  50. m_EventTimeFreezeRattle = -1;
  51. m_Player.GetSymptomManager().QueueUpPrimarySymptom(SymptomIDs.SYMPTOM_FREEZE_RATTLE);
  52. }
  53. }
  54. if ( hc <= PlayerConstants.THRESHOLD_HEAT_COMFORT_MINUS_WARNING ) // Light blue zone
  55. {
  56. m_ProcessTimeAccuFreeze++;
  57. if(m_EventTimeFreeze < 0) //if not set
  58. {
  59. m_EventTimeFreeze = GetEventTime(hc, PlayerConstants.THRESHOLD_HEAT_COMFORT_MINUS_EMPTY, PlayerConstants.THRESHOLD_HEAT_COMFORT_MINUS_WARNING, TIME_INTERVAL_HC_MINUS_LOW_MIN, TIME_INTERVAL_HC_MINUS_HIGH_MIN, TIME_INTERVAL_HC_MINUS_LOW_MAX, TIME_INTERVAL_HC_MINUS_HIGH_MAX);
  60. }
  61. if( m_ProcessTimeAccuFreeze > m_EventTimeFreeze )
  62. {
  63. m_ProcessTimeAccuFreeze = 0;
  64. m_EventTimeFreeze = -1;
  65. m_Player.GetSymptomManager().QueueUpPrimarySymptom(SymptomIDs.SYMPTOM_FREEZE);
  66. }
  67. }
  68. else if ( hc >= PlayerConstants.THRESHOLD_HEAT_COMFORT_PLUS_WARNING ) // Yellow zone
  69. {
  70. m_ProcessTimeAccuHot++;
  71. if(m_EventTimeHot < 0) //if not set
  72. {
  73. m_EventTimeHot = GetEventTime(hc, PlayerConstants.THRESHOLD_HEAT_COMFORT_PLUS_EMPTY,PlayerConstants.THRESHOLD_HEAT_COMFORT_PLUS_WARNING, TIME_INTERVAL_HC_PLUS_LOW_MIN, TIME_INTERVAL_HC_PLUS_LOW_MIN, TIME_INTERVAL_HC_PLUS_LOW_MAX, TIME_INTERVAL_HC_PLUS_HIGH_MAX);
  74. }
  75. if( m_ProcessTimeAccuHot > m_EventTimeHot )
  76. {
  77. m_ProcessTimeAccuHot = 0;
  78. m_EventTimeHot = -1;
  79. m_Player.GetSymptomManager().QueueUpPrimarySymptom(SymptomIDs.SYMPTOM_HOT);
  80. }
  81. }
  82. }
  83. }
  84. }