DayZ Scripts
v1.21.156300 ยท Jun 20, 2023
 
Loading...
Searching...
No Matches
StaminaSoundHandler.c
Go to the documentation of this file.
1const float TICK_INTERVAL = 1;
2
3const float STAMINA_SOUND_TR1 = 0.55;
4const float STAMINA_SOUND_TR2 = 0.25;
5
7{
11}
12
13enum eStaminaTendency
14{
17}
18
19enum eStaminaState
20{
27 //count bellow, add above
28 COUNT
29}
30
31
33{
36
37 void Update();
38
40 {
41 return m_Id;
42 }
43
45 {
46 m_Player = player;
47 Init();
48 }
49
50 void Init();
51}
52
54{
55
56 override void Init()
57 {
58 m_Id = eSoundHandlers.STAMINA;
59 }
60
61 eStaminaState GetStaminaState(eStaminaTendency tendency, eStaminaZones zone)
62 {
63 eStaminaState stamina_state;
64
65 zone = Math.Clamp(zone, eStaminaZones.ZONE0, eStaminaZones.ZONE2);
66
67 if(zone == eStaminaZones.ZONE1 && tendency == eStaminaTendency.DOWN)
68 {
69 stamina_state = eStaminaState.ZONE1_DOWN;
70 }
71
72 if(zone == eStaminaZones.ZONE1 && tendency == eStaminaTendency.UP)
73 {
74 stamina_state = eStaminaState.ZONE1_UP;
75 }
76
77 if(zone == eStaminaZones.ZONE2 && tendency == eStaminaTendency.DOWN)
78 {
79 stamina_state = eStaminaState.ZONE2_DOWN;
80 }
81
82 if(zone == eStaminaZones.ZONE2 && tendency == eStaminaTendency.UP)
83 {
84 stamina_state = eStaminaState.ZONE2_UP;
85 }
86
87 if(zone == eStaminaZones.ZONE0 && tendency == eStaminaTendency.UP)
88 {
89 stamina_state = eStaminaState.ZONE0_UP;
90 }
91
92 if(zone == eStaminaZones.ZONE0 && tendency == eStaminaTendency.DOWN)
93 {
94 stamina_state = eStaminaState.ZONE0_DOWN;
95 }
96
97 return stamina_state;
98 }
99}
100
101
102//---------------------------
103// Server
104//---------------------------
105class StaminaSoundHandlerServer extends StaminaSoundHandlerBase
106{
111
112 void SetStaminaZoneOffset(int zone_offset)
113 {
114 m_StaminaZoneOffset = zone_offset;
115 }
116
117 // ! Called from command handler
118 override void Update()
119 {
120 m_Stamina = m_Player.GetStaminaHandler().GetStamina();
121 float stamina_delta = m_StaminaLastValue - m_Stamina;
122 eStaminaTendency stamina_tendency;
123 eStaminaZones stamina_zone;
124
125 //if( stamina_delta == 0 ) return;
126
127 if( stamina_delta > 0 )
128 {
129 stamina_tendency = eStaminaTendency.DOWN;
130 }
131 if( stamina_delta <= 0 )
132 {
133 stamina_tendency = eStaminaTendency.UP;
134 }
135
137
138 stamina_zone = GetZone(m_Stamina);
139 m_Player.SetStaminaState( GetStaminaState(stamina_tendency, stamina_zone + m_StaminaZoneOffset) );
140
141 //EPlayerSoundEventID sound_event_id = GetPlayerSoundEventID();
142 /*
143 //PrintString("stamina delta " +stamina_delta.ToString());
144 //PrintString("stamina zone " +m_StaminaZone.ToString());
145 //PrintString("stamina tendency " +m_StaminaTendency.ToString());
146 */
147 //PrintString(" sound event id " +sound_event_id.ToString());
148
149
150 //if( sound_event_id !=0 ) m_Player.SendSoundEvent(sound_event_id);
151 }
152
153 eStaminaZones GetZone(float stamina)
154 {
155 float stamina_normalized = Math.InverseLerp(0, m_Player.GetStaminaHandler().GetStaminaCap(), stamina);
156 stamina_normalized = Math.Clamp(stamina_normalized,0,1);
157 //PrintString(" stamina_normalized " +stamina_normalized.ToString());
158 eStaminaZones stamina_zone = eStaminaZones.ZONE0;
159
160 if( stamina_normalized < STAMINA_SOUND_TR1)
161 {
162 stamina_zone = eStaminaZones.ZONE1;
163 }
164
165 if( stamina_normalized < STAMINA_SOUND_TR2)
166 {
167 stamina_zone = eStaminaZones.ZONE2;
168 }
169
170 return stamina_zone;
171 }
172}
173
174
175//---------------------------
176// Client
177//---------------------------
178class StaminaSoundHandlerClient extends StaminaSoundHandlerBase
179{
180 float m_PostponeTime = -1;
181
184 bool m_StaminaUpEndPlayed = true;
187
188
189 void PostponeStamina(float time)
190 {
191 m_PostponeTime = GetGame().GetTime() + time;
192 }
193
194
195 override void Update()
196 {
197 if( GetGame().GetTime() < m_PostponeTime || m_Player.GetPlayerSoundEventHandler().m_CurrentState )
198 {
199 return;
200 }
201 //Print(Math.RandomFloat01());
202 eStaminaState stamina_state = m_Player.GetStaminaState();
203 switch(stamina_state)
204 {
205 case eStaminaState.ZONE1_DOWN:
206 if(m_Player.PlaySoundEvent(EPlayerSoundEventID.STAMINA_DOWN_LIGHT))
207 {
208 m_StaminaUpEndPlayed = false;
209 }
210 break;
211
212 case eStaminaState.ZONE1_UP:
213 if(m_Player.PlaySoundEvent(EPlayerSoundEventID.STAMINA_UP_LIGHT))
214 {
215 m_StaminaUpEndPlayed = false;
216 }
217 break;
218
219 case eStaminaState.ZONE2_DOWN:
220 if(m_Player.PlaySoundEvent(EPlayerSoundEventID.STAMINA_DOWN_HEAVY))
221 {
222 m_StaminaUpEndPlayed = false;
223 }
224 break;
225
226 case eStaminaState.ZONE2_UP:
227 if(m_Player.PlaySoundEvent(EPlayerSoundEventID.STAMINA_UP_HEAVY))
228 {
229 m_StaminaUpEndPlayed = false;
230 }
231 break;
232
233 case eStaminaState.ZONE0_UP:
234 if(!m_StaminaUpEndPlayed && m_Player.PlaySoundEvent(EPlayerSoundEventID.STAMINA_UP_END))
235 {
236 m_StaminaUpEndPlayed = true;
237 }
238 else
239 {
240 m_Player.PlaySoundEvent(EPlayerSoundEventID.STAMINA_NORMAL_DUMMY);
241 }
242 break;
243
244 case eStaminaState.ZONE0_DOWN:
245 m_Player.PlaySoundEvent(EPlayerSoundEventID.STAMINA_NORMAL_DUMMY);
246 break;
247 }
248 }
249}
@ COUNT
DayZPlayer m_Player
Definition Hand_Events.c:42
float GetTime()
eSoundHandlers
ref Timer m_ClientCharacterDistanceCheck
class PlayerSoundManagerServer extends PlayerSoundManagerBase m_ClientCharacterTick
protected float m_Stamina
void StaminaHandler(PlayerBase player)
enum eStaminaZones ZONE1_DOWN
const float STAMINA_SOUND_TR1
PlayerBase m_Player
enum eStaminaZones ZONE1_UP
float m_StaminaLastValue
int m_StaminaZoneOffset
enum eStaminaZones UP
eStaminaZones GetZone(float stamina)
const float STAMINA_SOUND_TR2
void SetStaminaZoneOffset(int zone_offset)
enum eStaminaZones ZONE2_DOWN
enum eStaminaZones m_Id
eStaminaZones
const float TICK_INTERVAL
enum eStaminaZones ZONE0_DOWN
enum eStaminaZones ZONE2_UP
enum eStaminaZones ZONE0_UP
class StaminaSoundHandlerBase extends SoundHandlerBase m_Stamina
StaminaHandler m_StaminaHandler
enum eStaminaZones DOWN
eSoundHandlers GetID()
proto int GetTime()
returns mission time in milliseconds
bool PlaySoundEvent(EPlayerSoundEventID id, bool from_anim_system=false, bool is_from_server=false)
Definition EnMath.c:7
override void Init()
eStaminaState GetStaminaState(eStaminaTendency tendency, eStaminaZones zone)
proto native CGame GetGame()
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'.
static proto float InverseLerp(float a, float b, float value)
Calculates the linear value that produces the interpolant value within the range [a,...
void Update()