Dayz
Build 1.29.163047, Scripts Rev. 123548
Dayz Code Explorer by Zeroy
Toggle main menu visibility
Loading...
Searching...
No Matches
heatcomfortanimhandler.c
Go to the documentation of this file.
1
class
HeatComfortAnimHandler
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
19
const
float
TIME_INTERVAL_HC_MINUS_HIGH_MIN
= 25;
20
21
const
float
TIME_INTERVAL_HC_MINUS_LOW_MAX
= 20;
// Interval maximum, lerped according to heat confort
22
const
float
TIME_INTERVAL_HC_MINUS_HIGH_MAX
= 40;
23
24
const
float
TIME_INTERVAL_HC_PLUS_LOW_MIN
= 12;
// Ditto for heat symptoms
25
const
float
TIME_INTERVAL_HC_PLUS_HIGH_MIN
= 25;
26
27
const
float
TIME_INTERVAL_HC_PLUS_LOW_MAX
= 20;
28
const
float
TIME_INTERVAL_HC_PLUS_HIGH_MAX
= 40;
29
30
void
HeatComfortAnimHandler
(
PlayerBase
player)
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
}
HeatComfortAnimHandler::TIME_INTERVAL_HC_PLUS_LOW_MIN
const float TIME_INTERVAL_HC_PLUS_LOW_MIN
Definition
heatcomfortanimhandler.c:24
HeatComfortAnimHandler::TIME_INTERVAL_HC_MINUS_LOW_MIN
const float TIME_INTERVAL_HC_MINUS_LOW_MIN
Definition
heatcomfortanimhandler.c:18
HeatComfortAnimHandler::GetEventTime
float GetEventTime(float hcValue, float threshold_low, float thresholdHigh, float lowMin, float highMin, float lowMax, float highMax)
Definition
heatcomfortanimhandler.c:119
HeatComfortAnimHandler::m_EventTimeFreeze
float m_EventTimeFreeze
Definition
heatcomfortanimhandler.c:13
HeatComfortAnimHandler::m_Player
PlayerBase m_Player
Definition
heatcomfortanimhandler.c:10
HeatComfortAnimHandler::TIME_INTERVAL_HC_PLUS_HIGH_MAX
const float TIME_INTERVAL_HC_PLUS_HIGH_MAX
Definition
heatcomfortanimhandler.c:28
HeatComfortAnimHandler::TIME_INTERVAL_HC_MINUS_LOW_MAX
const float TIME_INTERVAL_HC_MINUS_LOW_MAX
Definition
heatcomfortanimhandler.c:21
HeatComfortAnimHandler::ProcessFreeze
void ProcessFreeze(float hcValue)
Definition
heatcomfortanimhandler.c:101
HeatComfortAnimHandler::m_ProcessTimeAccuFreeze
float m_ProcessTimeAccuFreeze
Definition
heatcomfortanimhandler.c:6
HeatComfortAnimHandler::ProcessHot
void ProcessHot(float hcValue)
Definition
heatcomfortanimhandler.c:92
HeatComfortAnimHandler::m_ProcessTimeAccuHot
float m_ProcessTimeAccuHot
Definition
heatcomfortanimhandler.c:8
HeatComfortAnimHandler::m_MovementState
ref HumanMovementState m_MovementState
Definition
heatcomfortanimhandler.c:16
HeatComfortAnimHandler::Update
void Update(float delta_time, HumanMovementState hms)
Definition
heatcomfortanimhandler.c:35
HeatComfortAnimHandler::m_EventTimeFreezeRattle
float m_EventTimeFreezeRattle
Definition
heatcomfortanimhandler.c:12
HeatComfortAnimHandler::TIME_INTERVAL_HC_MINUS_HIGH_MIN
const float TIME_INTERVAL_HC_MINUS_HIGH_MIN
Definition
heatcomfortanimhandler.c:19
HeatComfortAnimHandler::TICK_INTERVAL
const float TICK_INTERVAL
Definition
heatcomfortanimhandler.c:3
HeatComfortAnimHandler::TIME_INTERVAL_HC_PLUS_LOW_MAX
const float TIME_INTERVAL_HC_PLUS_LOW_MAX
Definition
heatcomfortanimhandler.c:27
HeatComfortAnimHandler::Process
void Process(float delta_time)
Definition
heatcomfortanimhandler.c:48
HeatComfortAnimHandler::m_TimeSinceLastTick
float m_TimeSinceLastTick
Definition
heatcomfortanimhandler.c:5
HeatComfortAnimHandler::ProcessFreezeRattle
void ProcessFreezeRattle(float hcValue)
Definition
heatcomfortanimhandler.c:110
HeatComfortAnimHandler::TIME_INTERVAL_HC_PLUS_HIGH_MIN
const float TIME_INTERVAL_HC_PLUS_HIGH_MIN
Definition
heatcomfortanimhandler.c:25
HeatComfortAnimHandler::TIME_INTERVAL_HC_MINUS_HIGH_MAX
const float TIME_INTERVAL_HC_MINUS_HIGH_MAX
Definition
heatcomfortanimhandler.c:22
HeatComfortAnimHandler::HeatComfortAnimHandler
void HeatComfortAnimHandler(PlayerBase player)
Definition
heatcomfortanimhandler.c:30
HeatComfortAnimHandler::m_ProcessTimeAccuFreezeRattle
float m_ProcessTimeAccuFreezeRattle
Definition
heatcomfortanimhandler.c:7
HeatComfortAnimHandler::m_EventTimeHot
float m_EventTimeHot
Definition
heatcomfortanimhandler.c:14
HumanMovementState
Definition
human.c:1154
Math
Definition
enmath.c:7
PlayerBase
Definition
playerbaseclient.c:2
PlayerConstants
Definition
playerconstants.c:2
PlayerConstants::THRESHOLD_HEAT_COMFORT_MINUS_WARNING
static const float THRESHOLD_HEAT_COMFORT_MINUS_WARNING
Definition
playerconstants.c:92
PlayerConstants::THRESHOLD_HEAT_COMFORT_PLUS_WARNING
static const float THRESHOLD_HEAT_COMFORT_PLUS_WARNING
Definition
playerconstants.c:88
PlayerConstants::THRESHOLD_HEAT_COMFORT_PLUS_EMPTY
static const float THRESHOLD_HEAT_COMFORT_PLUS_EMPTY
Definition
playerconstants.c:90
PlayerConstants::THRESHOLD_HEAT_COMFORT_MINUS_CRITICAL
static const float THRESHOLD_HEAT_COMFORT_MINUS_CRITICAL
Definition
playerconstants.c:93
PlayerConstants::THRESHOLD_HEAT_COMFORT_MINUS_EMPTY
static const float THRESHOLD_HEAT_COMFORT_MINUS_EMPTY
Definition
playerconstants.c:94
g_Game
DayZGame g_Game
Definition
dayzgame.c:3942
Process
void Process()
Definition
effectmanager.c:743
Math::Clamp
static proto float Clamp(float value, float min, float max)
Clamps 'value' to 'min' if it is lower than 'min', or to 'max' if it is higher than 'max'.
Math::InverseLerp
static proto float InverseLerp(float a, float b, float value)
Calculates the linear value that produces the interpolant value within the range [a,...
Math::IsInRange
static proto bool IsInRange(float v, float min, float max)
Returns if value is between min and max (inclusive).
Math::RandomFloatInclusive
static float RandomFloatInclusive(float min, float max)
Returns a random float number between and min [inclusive] and max [inclusive].
Definition
enmath.c:106
Math::Lerp
static proto float Lerp(float a, float b, float time)
Linearly interpolates between 'a' and 'b' given 'time'.
Games
Dayz
scripts
4_world
classes
heatcomfortanimhandler.c
Generated by
1.17.0