heatcomfortanimhandler.c 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  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 = 5; const float TIME_INTERVAL_HC_MINUS_LOW_MAX = 12;
  14. const float TIME_INTERVAL_HC_MINUS_HIGH_MIN = 15; const float TIME_INTERVAL_HC_MINUS_HIGH_MAX = 25;
  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. float inv_value;
  43. float value_min;
  44. float value_max;
  45. float offset_time;
  46. if ( hc <= PlayerConstants.THRESHOLD_HEAT_COMFORT_MINUS_CRITICAL )
  47. {
  48. m_ProcessTimeAccuFreezeRattle++;
  49. if (m_EventTimeFreezeRattle < 0)
  50. 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);
  51. if( m_ProcessTimeAccuFreezeRattle > m_EventTimeFreezeRattle )
  52. {
  53. m_ProcessTimeAccuFreezeRattle = 0;
  54. m_EventTimeFreezeRattle = -1;
  55. m_Player.GetSymptomManager().QueueUpPrimarySymptom(SymptomIDs.SYMPTOM_FREEZE_RATTLE);
  56. }
  57. }
  58. if ( hc <= PlayerConstants.THRESHOLD_HEAT_COMFORT_MINUS_WARNING )
  59. {
  60. m_ProcessTimeAccuFreeze++;
  61. if(m_EventTimeFreeze < 0)//if not set
  62. {
  63. 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);
  64. }
  65. if( m_ProcessTimeAccuFreeze > m_EventTimeFreeze )
  66. {
  67. m_ProcessTimeAccuFreeze = 0;
  68. m_EventTimeFreeze = -1;
  69. m_Player.GetSymptomManager().QueueUpPrimarySymptom(SymptomIDs.SYMPTOM_FREEZE);
  70. /*
  71. Print("-----======== freezing ========-------");
  72. Print(inv_value);
  73. Print(value_min);
  74. Print(value_max);
  75. Print(offset_time);
  76. Print("-----======== freezing ========-------");
  77. */
  78. }
  79. }
  80. else if ( hc >= PlayerConstants.THRESHOLD_HEAT_COMFORT_PLUS_WARNING )
  81. {
  82. m_ProcessTimeAccuHot++;
  83. if(m_EventTimeHot < 0)//if not set
  84. {
  85. 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);
  86. }
  87. if( m_ProcessTimeAccuHot > m_EventTimeHot )
  88. {
  89. m_ProcessTimeAccuHot = 0;
  90. m_EventTimeHot = -1;
  91. m_Player.GetSymptomManager().QueueUpPrimarySymptom(SymptomIDs.SYMPTOM_HOT);
  92. //Print("-----======== freezing ========-------");
  93. //Print(inv_value);
  94. //Print(value_min);
  95. //Print(value_max);
  96. //Print(offset_time);
  97. //Print("-----======== freezing ========-------");
  98. }
  99. }
  100. }
  101. }
  102. }