Dayz Explorer 1.29.162510
Loading...
Searching...
No Matches
heatcomfortanimhandler.c
Go to the documentation of this file.
2{
3 const float TICK_INTERVAL = 2;
4
5 float m_TimeSinceLastTick;
6 float m_ProcessTimeAccuFreeze;
7 float m_ProcessTimeAccuFreezeRattle;
8 float m_ProcessTimeAccuHot;
9
10 PlayerBase m_Player;
11
12 float m_EventTimeFreezeRattle = -1; // -1 = symptom effect needs to be triggered for first time
13 float m_EventTimeFreeze = -1;
14 float m_EventTimeHot = -1;
15
16 protected ref HumanMovementState m_MovementState = new HumanMovementState();
17
18 const float TIME_INTERVAL_HC_MINUS_LOW_MIN = 12; // Freezing and rattle symptoms interval minimum, lerped according to heat confort
20
21 const float TIME_INTERVAL_HC_MINUS_LOW_MAX = 20; // Interval maximum, lerped according to heat confort
23
24 const float TIME_INTERVAL_HC_PLUS_LOW_MIN = 12; // Ditto for heat symptoms
26
29
31 {
32 m_Player = player;
33 }
34
35 void Update(float delta_time, HumanMovementState hms)
36 {
37 m_TimeSinceLastTick += delta_time;
38
39 if (m_TimeSinceLastTick > TICK_INTERVAL)
40 {
41 if (g_Game.IsServer())
42 Process(m_TimeSinceLastTick);
43
44 m_TimeSinceLastTick = 0;
45 }
46 }
47
48 void Process(float delta_time)
49 {
50 float hc = m_Player.GetStatHeatComfort().Get();
51
52 if (hc >= PlayerConstants.THRESHOLD_HEAT_COMFORT_PLUS_WARNING) // Yellow zone
53 {
54 m_ProcessTimeAccuHot += delta_time;
55
56 if (m_EventTimeHot < 0 || m_ProcessTimeAccuHot >= m_EventTimeHot)
57 ProcessHot(hc);
58 }
59 else if (Math.IsInRange(hc, PlayerConstants.THRESHOLD_HEAT_COMFORT_MINUS_WARNING, PlayerConstants.THRESHOLD_HEAT_COMFORT_PLUS_WARNING))
60 {
61 // White zone, reset the timers
62
63 if (m_EventTimeHot > -1 && hc <= 0)
64 m_EventTimeHot = -1;
65
66 if (m_EventTimeFreeze > -1 && hc >= 0)
67 m_EventTimeFreeze = -1;
68
69 if (m_EventTimeFreezeRattle > -1)
70 m_EventTimeFreezeRattle = -1;
71
72 }
73 else if (hc <= PlayerConstants.THRESHOLD_HEAT_COMFORT_MINUS_WARNING) // Light blue zone
74 {
75 if (hc <= PlayerConstants.THRESHOLD_HEAT_COMFORT_MINUS_CRITICAL) // Deep blue blinking zone, rattling is layerd on top of freezing
76 {
77 m_ProcessTimeAccuFreezeRattle += delta_time;
78
79 if (m_EventTimeFreezeRattle < 0 || m_ProcessTimeAccuFreezeRattle >= m_EventTimeFreezeRattle)
80 ProcessFreezeRattle(hc);
81 }
82
83 m_ProcessTimeAccuFreeze += delta_time;
84
85 if (m_EventTimeFreeze < 0 || m_ProcessTimeAccuFreeze >= m_EventTimeFreeze)
86 ProcessFreeze(hc);
87 }
88
89 // Debug.Log("HeatComfort: " + hc);
90 }
91
92 private void ProcessHot(float hcValue)
93 {
94 m_Player.GetSymptomManager().QueueUpPrimarySymptom(SymptomIDs.SYMPTOM_HOT);
95 m_EventTimeHot = GetEventTime(hcValue, PlayerConstants.THRESHOLD_HEAT_COMFORT_PLUS_EMPTY, PlayerConstants.THRESHOLD_HEAT_COMFORT_PLUS_WARNING, TIME_INTERVAL_HC_PLUS_LOW_MIN, TIME_INTERVAL_HC_PLUS_HIGH_MIN, TIME_INTERVAL_HC_PLUS_LOW_MAX, TIME_INTERVAL_HC_PLUS_HIGH_MAX);
96 m_ProcessTimeAccuHot = 0;
97
98 // Debug.Log("HeatComfort: " + hcValue + ", HOT in: " + m_EventTimeHot + "s");
99 }
100
101 private void ProcessFreeze(float hcValue)
102 {
103 m_Player.GetSymptomManager().QueueUpPrimarySymptom(SymptomIDs.SYMPTOM_FREEZE);
104 m_EventTimeFreeze = GetEventTime(hcValue, 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);
105 m_ProcessTimeAccuFreeze = 0;
106
107 // Debug.Log("HeatComfort: " + hcValue + ", FREEZE in: " + m_EventTimeFreeze + "s");
108 }
109
110 private void ProcessFreezeRattle(float hcValue)
111 {
112 m_Player.GetSymptomManager().QueueUpPrimarySymptom(SymptomIDs.SYMPTOM_FREEZE_RATTLE);
113 m_EventTimeFreezeRattle = GetEventTime(hcValue, -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);
114 m_ProcessTimeAccuFreezeRattle = 0;
115
116 // Debug.Log("HeatComfort: " + hcValue + ", RATTLE in: " + m_EventTimeFreezeRattle + "s");
117 }
118
119 private float GetEventTime(float hcValue, float threshold_low, float thresholdHigh, float lowMin, float highMin, float lowMax, float highMax)
120 {
121 float inv_value = Math.Clamp(Math.InverseLerp(threshold_low, thresholdHigh, hcValue), 0, 1);
122 float valueMin = Math.Lerp(lowMin, highMin, inv_value);
123 float value_max = Math.Lerp(lowMax, highMax, inv_value);
124
125 return Math.RandomFloatInclusive(valueMin, value_max);
126 }
127}
map m_Player
void Update(float delta_time, HumanMovementState hms)
ref HumanMovementState m_MovementState
void Process(float delta_time)
void HeatComfortAnimHandler(PlayerBase player)
Definition enmath.c:7
DayZGame g_Game
Definition dayzgame.c:3942
void Process()