DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
StaminaSoundHandler.c
См. документацию.
1const float TICK_INTERVAL = 1;
2
3const float STAMINA_SOUND_TR1 = 0.55;
4const float STAMINA_SOUND_TR2 = 0.25;
5
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
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 {
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}
class ServerBrowserHelperFunctions m_Id
@ COUNT
Определения EGameStateIcons.c:7
DayZPlayer m_Player
Определения Hand_Events.c:42
float GetTime()
Определения NotificationSystem.c:35
EPlayerSoundEventID
Определения PlayerSoundEventHandler.c:3
eSoundHandlers
Определения PlayerSoundManager.c:5
enum eStaminaZones ZONE1_DOWN
const float STAMINA_SOUND_TR1
Определения StaminaSoundHandler.c:3
PlayerBase m_Player
Определения StaminaSoundHandler.c:35
enum eStaminaZones ZONE1_UP
float m_StaminaLastValue
Определения StaminaSoundHandler.c:109
int m_StaminaZoneOffset
Определения StaminaSoundHandler.c:110
enum eStaminaZones UP
eStaminaZones GetZone(float stamina)
Определения StaminaSoundHandler.c:153
void SoundHandlerBase(PlayerBase player)
Определения StaminaSoundHandler.c:44
const float STAMINA_SOUND_TR2
Определения StaminaSoundHandler.c:4
void SetStaminaZoneOffset(int zone_offset)
Определения StaminaSoundHandler.c:112
enum eStaminaZones ZONE2_DOWN
enum eStaminaZones m_Id
eStaminaZones
Определения StaminaSoundHandler.c:7
@ ZONE1
Определения StaminaSoundHandler.c:9
@ ZONE0
Определения StaminaSoundHandler.c:8
@ ZONE2
Определения StaminaSoundHandler.c:10
const float TICK_INTERVAL
Определения StaminaSoundHandler.c:1
enum eStaminaZones ZONE0_DOWN
enum eStaminaZones ZONE2_UP
enum eStaminaZones ZONE0_UP
class StaminaSoundHandlerBase extends SoundHandlerBase m_Stamina
StaminaHandler m_StaminaHandler
Определения StaminaSoundHandler.c:108
enum eStaminaZones DOWN
eSoundHandlers GetID()
Определения StaminaSoundHandler.c:39
proto int GetTime()
returns mission time in milliseconds
Определения EnMath.c:7
Определения PlayerBaseClient.c:2
eStaminaState GetStaminaState(eStaminaTendency tendency, eStaminaZones zone)
Определения StaminaSoundHandler.c:61
override void Init()
Определения HungerSoundHandler.c:3
Определения StaminaHandler.c:261
ref Timer m_ClientCharacterDistanceCheck
Определения StaminaSoundHandler.c:186
void PostponeStamina(float time)
Определения StaminaSoundHandler.c:189
float m_PostponeTime
Определения StaminaSoundHandler.c:180
bool m_StaminaUpEndPlayed
Определения StaminaSoundHandler.c:184
ref Timer m_ClientCharacterTick
Определения StaminaSoundHandler.c:185
bool m_UpdateTimerRunning
Определения StaminaSoundHandler.c:183
override void Update()
Определения StaminaSoundHandler.c:195
Определения DayZPlayerImplement.c:63
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()
Определения StaminaSoundHandler.c:118