heatcomfortanimhandler.c 3.3 KB

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