Dayz
Build 1.29.163047, Scripts Rev. 123548
Dayz Code Explorer by Zeroy
Toggle main menu visibility
Loading...
Searching...
No Matches
shockhandler.c
Go to the documentation of this file.
1
class
ShockHandler
2
{
3
protected
const
float
UPDATE_THRESHOLD
= 3;
//NOTE : The lower, the more precise but the more synchronization
4
const
float
VALUE_CHECK_INTERVAL
= 0.95;
//in seconds
5
private
const
int
INTENSITY_FACTOR
= 1;
//How intense the vignette effect will be, the higher the value, the stronger the effect
6
private
const
int
VIGNETTE_INTENSITY_MAX
= 1;
//Max BASE intensity of the vignette effect (w/o. bobbing). 0..2, where 2 is full screen coverage
7
private
const
int
VIGNETTE_INTENSITY_MAX_TOTAL
= 2;
//Max TOTAL intensity of the vignette effect (w. bobbing). 0..2, where 2 is full screen coverage
8
private
const
float
SMOOTHING_MAX_INCR
= 0.05;
//max smoothing change INCREASE per update
9
private
const
float
SMOOTHING_MAX_DECR
= 0.01;
//max smoothing change DECREASE per update
10
//bobbing constants
11
private
const
float
PULSE_PERIOD
= 0.5;
//The time it takes for pulse to do a full cycle
12
private
const
float
PULSE_AMPLITUDE
= 0.05;
//This is a multiplier, keep below 1 or expect the unexpected
13
14
protected
float
m_Shock
;
15
protected
float
m_LastEffectIntensityValue
;
//for interpolation only
16
protected
float
m_ShockValueMax
;
17
protected
float
m_CumulatedShock
;
18
private
float
m_TimeSinceLastTick
=
VALUE_CHECK_INTERVAL
+ 1;
19
private
float
m_ShockMultiplier
= 1;
20
private
float
m_PrevVignette
;
//Previous shock-adjecent value (some normalization required). Client sets it only on regular ShockHandler update!
21
22
//bobbing effect
23
private
float
m_PulseTimer
;
24
25
//PPE
26
PPERequester_TunnelVisionEffects
m_Requester
;
27
protected
ref Param1<float>
m_Param
;
28
29
protected
PlayerBase
m_Player
;
30
31
void
ShockHandler
(
PlayerBase
player)
32
{
33
m_Player
= player;
34
m_Player
.m_CurrentShock =
m_Player
.GetMaxHealth(
""
,
"Shock"
);
35
m_ShockValueMax
=
m_Player
.GetMaxHealth(
""
,
"Shock"
);
36
m_PrevVignette
=
m_Player
.m_CurrentShock /
m_ShockValueMax
;
//Equivalent to divided by 100
37
m_Requester
= PPERequester_TunnelVisionEffects.Cast(PPERequesterBank.GetRequester(PPERequester_TunnelVisionEffects));
38
m_Param
=
new
Param1<float>(0);
39
40
//loegacy stuff
41
m_ShockValueThreshold
=
m_ShockValueMax
* 0.95;
42
}
43
44
void
Update
(
float
deltaT)
45
{
46
m_TimeSinceLastTick
+= deltaT;
47
m_PulseTimer
+= deltaT;
48
49
//periodical update, just in case
50
if
(
m_TimeSinceLastTick
>
VALUE_CHECK_INTERVAL
)
51
{
52
if
(
g_Game
.IsClient())
53
{
54
//ShockHitEffect(m_PrevVignette * m_ShockValueMax);
55
m_PrevVignette
=
m_Player
.m_CurrentShock /
m_ShockValueMax
;
56
}
57
58
CheckValue
(
false
);
59
m_TimeSinceLastTick
= 0;
60
}
61
62
if
(
g_Game
.IsClient())
63
{
64
float
valAdjusted =
BaseEffectIntensityCalc
();
65
66
if
(valAdjusted <= 0)
67
{
68
if
(
m_Requester
.IsRequesterRunning())
69
m_Requester
.Stop();
70
71
return
;
72
}
73
74
//Print("dbgShock | valAdjusted: " + valAdjusted);
75
76
//Add bobbing to create pulsing effect
77
valAdjusted =
AddEffectBobbing
(valAdjusted);
78
79
m_Param
.param1 = valAdjusted;
80
m_Requester
.Start(
m_Param
);
81
}
82
}
83
84
float
GetCurrentShock
()
85
{
86
return
m_Player
.m_CurrentShock;
87
}
88
89
float
GetShock
()
90
{
91
return
m_Shock
;
92
}
93
94
void
SetShock
(
float
dealtShock)
95
{
96
m_Shock
+= dealtShock;
97
CheckValue
(
false
);
98
}
99
100
//Inflict shock damage
101
private
void
DealShock
()
102
{
103
if
(
g_Game
.IsServer())
104
m_Player
.GiveShock(-
m_CumulatedShock
);
105
}
106
107
//Passing a value of FALSE will only check the values, a value of TRUE will force a synchronization (don't use too often)
108
void
CheckValue
(
bool
forceUpdate)
109
{
110
m_CumulatedShock
+=
m_Shock
;
// increment on both client and server
111
112
if
(forceUpdate)
113
m_PrevVignette
=
NormalizeShockVal
(
m_Player
.m_CurrentShock);
114
115
if
(
g_Game
.IsServer())
116
{
117
if
(
m_CumulatedShock
>=
UPDATE_THRESHOLD
|| forceUpdate)
118
{
119
m_CumulatedShock
*=
m_ShockMultiplier
;
120
DealShock
();
121
m_CumulatedShock
= 0;
122
m_Shock
= 0;
123
124
Synchronize
();
125
}
126
127
m_Player
.m_CurrentShock =
m_Player
.GetHealth(
""
,
"Shock"
);
128
}
129
}
130
131
protected
void
Synchronize
()
132
{
133
DayZPlayerSyncJunctures
.
SendShock
(
m_Player
,
m_Player
.m_CurrentShock);
134
}
135
136
protected
float
BaseEffectIntensityCalc
()
137
{
138
float
effectIntensity = 1 -
Easing
.
EaseInQuart
(
NormalizeShockVal
(
m_Player
.m_CurrentShock));
139
140
//smoothing
141
if
(effectIntensity !=
m_LastEffectIntensityValue
)
142
effectIntensity =
Math
.
Clamp
(effectIntensity,
m_LastEffectIntensityValue
-
SMOOTHING_MAX_DECR
,
m_LastEffectIntensityValue
+
SMOOTHING_MAX_INCR
);
143
144
m_LastEffectIntensityValue
= effectIntensity;
145
146
return
effectIntensity;
147
}
148
150
protected
float
AddEffectBobbing
(
float
baseVal)
151
{
152
float
ret = baseVal;
153
float
bobbingVal = 0.0;
154
155
if
(
m_Player
.m_CurrentShock >
m_ShockValueMax
* 0.8)
156
bobbingVal = MiscGameplayFunctions.Bobbing(
PULSE_PERIOD
,
PULSE_AMPLITUDE
,
m_PulseTimer
);
157
ret += bobbingVal;
158
ret =
Math
.
Clamp
(ret,0,
VIGNETTE_INTENSITY_MAX_TOTAL
);
159
160
return
ret;
161
}
162
163
float
SetMultiplier
(
float
mult)
164
{
165
m_ShockMultiplier
= mult;
166
return
m_ShockMultiplier
;
167
}
168
169
private
float
NormalizeShockVal
(
float
shock)
170
{
171
float
base =
m_ShockValueMax
*
INTENSITY_FACTOR
;
172
float
normShock = shock / base;
173
return
normShock;
174
}
175
176
private
float
LerpVignette
(
float
x
,
float
y
,
float
deltaT)
177
{
178
float
output;
179
output =
Math
.
Lerp
(
x
,
y
, deltaT);
180
return
output;
181
}
182
184
//Deprecated stuff below//
186
private
const
int
LIGHT_SHOCK_HIT
= 33;
187
private
const
int
MID_SHOCK_HIT
= 67;
188
private
const
int
HEAVY_SHOCK_HIT
= 100;
189
protected
float
m_ShockValueThreshold
;
190
private
float
m_LerpRes
;
191
193
private
void
ShockHitEffect
(
float
compareBase)
194
{
195
float
shockDifference = compareBase -
m_Player
.m_CurrentShock;
196
if
(shockDifference >=
UPDATE_THRESHOLD
)
197
{
198
if
(
m_CumulatedShock
< 25)
199
m_Player
.SpawnShockEffect(MiscGameplayFunctions.Normalize(
LIGHT_SHOCK_HIT
, 100));
200
else
if
(
m_CumulatedShock
< 50)
201
m_Player
.SpawnShockEffect(MiscGameplayFunctions.Normalize(
MID_SHOCK_HIT
, 100));
202
else
203
m_Player
.SpawnShockEffect(MiscGameplayFunctions.Normalize(
HEAVY_SHOCK_HIT
, 100));
204
}
205
}
206
};
DayZPlayerSyncJunctures
Definition
dayzplayersyncjunctures.c:5
DayZPlayerSyncJunctures::SendShock
static void SendShock(DayZPlayer pPlayer, float shockValue)
Shock.
Definition
dayzplayersyncjunctures.c:413
Easing
Input value between 0 and 1, returns value adjusted by easing, no automatic clamping of input(do your...
Definition
easing.c:3
Easing::EaseInQuart
static float EaseInQuart(float t)
Definition
easing.c:56
Math
Definition
enmath.c:7
PlayerBase
Definition
playerbaseclient.c:2
ShockHandler::HEAVY_SHOCK_HIT
const int HEAVY_SHOCK_HIT
Deprecated.
Definition
shockhandler.c:188
ShockHandler::AddEffectBobbing
float AddEffectBobbing(float baseVal)
adds bobbing, also clamps to valid range
Definition
shockhandler.c:150
ShockHandler::Update
void Update(float deltaT)
Definition
shockhandler.c:44
ShockHandler::PULSE_PERIOD
const float PULSE_PERIOD
Definition
shockhandler.c:11
ShockHandler::VIGNETTE_INTENSITY_MAX
const int VIGNETTE_INTENSITY_MAX
Definition
shockhandler.c:6
ShockHandler::DealShock
void DealShock()
Definition
shockhandler.c:101
ShockHandler::ShockHitEffect
void ShockHitEffect(float compareBase)
Deprecated.
Definition
shockhandler.c:193
ShockHandler::SetMultiplier
float SetMultiplier(float mult)
Definition
shockhandler.c:163
ShockHandler::m_LerpRes
float m_LerpRes
Deprecated.
Definition
shockhandler.c:190
ShockHandler::m_Player
PlayerBase m_Player
Definition
shockhandler.c:29
ShockHandler::LIGHT_SHOCK_HIT
const int LIGHT_SHOCK_HIT
Definition
shockhandler.c:186
ShockHandler::LerpVignette
float LerpVignette(float x, float y, float deltaT)
Definition
shockhandler.c:176
ShockHandler::m_ShockValueThreshold
float m_ShockValueThreshold
Deprecated.
Definition
shockhandler.c:189
ShockHandler::UPDATE_THRESHOLD
const float UPDATE_THRESHOLD
Definition
shockhandler.c:3
ShockHandler::INTENSITY_FACTOR
const int INTENSITY_FACTOR
Definition
shockhandler.c:5
ShockHandler::m_ShockValueMax
float m_ShockValueMax
Definition
shockhandler.c:16
ShockHandler::m_PrevVignette
float m_PrevVignette
Definition
shockhandler.c:20
ShockHandler::MID_SHOCK_HIT
const int MID_SHOCK_HIT
Deprecated.
Definition
shockhandler.c:187
ShockHandler::m_PulseTimer
float m_PulseTimer
Definition
shockhandler.c:23
ShockHandler::SMOOTHING_MAX_DECR
const float SMOOTHING_MAX_DECR
Definition
shockhandler.c:9
ShockHandler::m_Shock
float m_Shock
Definition
shockhandler.c:14
ShockHandler::PULSE_AMPLITUDE
const float PULSE_AMPLITUDE
Definition
shockhandler.c:12
ShockHandler::ShockHandler
void ShockHandler(PlayerBase player)
Definition
shockhandler.c:31
ShockHandler::m_ShockMultiplier
float m_ShockMultiplier
Definition
shockhandler.c:19
ShockHandler::SetShock
void SetShock(float dealtShock)
Definition
shockhandler.c:94
ShockHandler::Synchronize
void Synchronize()
Definition
shockhandler.c:131
ShockHandler::GetShock
float GetShock()
Definition
shockhandler.c:89
ShockHandler::NormalizeShockVal
float NormalizeShockVal(float shock)
Definition
shockhandler.c:169
ShockHandler::m_Param
ref Param1< float > m_Param
Definition
shockhandler.c:27
ShockHandler::m_Requester
PPERequester_TunnelVisionEffects m_Requester
Definition
shockhandler.c:26
ShockHandler::m_CumulatedShock
float m_CumulatedShock
Definition
shockhandler.c:17
ShockHandler::VALUE_CHECK_INTERVAL
const float VALUE_CHECK_INTERVAL
Definition
shockhandler.c:4
ShockHandler::GetCurrentShock
float GetCurrentShock()
Definition
shockhandler.c:84
ShockHandler::SMOOTHING_MAX_INCR
const float SMOOTHING_MAX_INCR
Definition
shockhandler.c:8
ShockHandler::m_TimeSinceLastTick
float m_TimeSinceLastTick
works ok on server, but does nothing for client. See deprecated stuff.
Definition
shockhandler.c:18
ShockHandler::CheckValue
void CheckValue(bool forceUpdate)
Definition
shockhandler.c:108
ShockHandler::m_LastEffectIntensityValue
float m_LastEffectIntensityValue
Definition
shockhandler.c:15
ShockHandler::VIGNETTE_INTENSITY_MAX_TOTAL
const int VIGNETTE_INTENSITY_MAX_TOTAL
Definition
shockhandler.c:7
ShockHandler::BaseEffectIntensityCalc
float BaseEffectIntensityCalc()
Definition
shockhandler.c:136
g_Game
DayZGame g_Game
Definition
dayzgame.c:3942
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::Lerp
static proto float Lerp(float a, float b, float time)
Linearly interpolates between 'a' and 'b' given 'time'.
x
Icon x
y
Icon y
Games
Dayz
scripts
4_world
classes
shockhandler.c
Generated by
1.17.0