DayZ 1.28
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
UndergroundHandlerClient.c
См. документацию.
2{
3 NONE,//player is not interacting with underground at any level
4 OUTER,//player is on the outskirts of the underdound, some effects are already in effect, while others might not be
5 TRANSITIONING,//player has entered underground and is in the process of screen darkening transition
6 FULL//the player is now fully entered underground
7}
8
10{
11 const float LIGHT_BLEND_SPEED_IN = 5;
12 const float LIGHT_BLEND_SPEED_OUT = 1.75;
13 const float MAX_RATIO = 0.9;//how much max ratio between 0..1 can a single breadcrumb occupy
14 const float RATIO_CUTOFF = 0;//what's the minimum ratio a breadcrumb needs to have to be considered when calculatiing accommodation
15 const float DISTANCE_CUTOFF = 5;//we ignore breadcrumbs further than this distance
16 const float ACCO_MODIFIER = 1;//when we calculate eye accommodation between 0..1 based on the breadcrumbs values and distances, we multiply the result by this modifier to get the final eye accommodation value
18 const string UNDERGROUND_LIGHTING = "dz\\data\\lighting\\lighting_underground.txt";
20
22 protected PPERUndergroundAcco m_Requester;
23 protected PPERequester_CameraNV m_NVRequester;
24 protected ref set<UndergroundTrigger> m_InsideTriggers = new set<UndergroundTrigger>();
25
26 protected float m_EyeAccoTarget = 1;
27 protected float m_AccoInterpolationSpeed;
28 protected float m_EyeAcco = 1;
29 protected float m_LightingLerpTarget;
30 protected float m_LightingLerp;
31 protected string m_AmbientController; // active sound controlelr for ambient
33
34 protected UndergroundTrigger m_BestTrigger;
35 protected UndergroundTrigger m_TransitionalTrigger;
36
38 {
40 m_Player = player;
41 m_NVRequester = PPERequester_CameraNV.Cast(PPERequesterBank.GetRequester( PPERequesterBank.REQ_CAMERANV));
42 }
43
55
56 protected PPERUndergroundAcco GetRequester()
57 {
58 if (!m_Requester)
59 {
60 m_Requester = PPERUndergroundAcco.Cast(PPERequesterBank.GetRequester( PPERequesterBank.REQ_UNDERGROUND));
61 m_Requester.Start();
62 }
63 return m_Requester;
64 }
65
66 void OnTriggerEnter(UndergroundTrigger trigger)
67 {
68 m_InsideTriggers.Insert(trigger);
70
71 }
72
73 void OnTriggerLeave(UndergroundTrigger trigger)
74 {
75 int index = m_InsideTriggers.Find(trigger);
76 if (index != -1)
77 {
78 m_InsideTriggers.Remove(index);
79 }
81 }
82
83 protected void CalculateEyeAccoTarget()
84 {
86 return;
87
88 if (m_TransitionalTrigger.m_Data.UseLinePointFade && m_TransitionalTrigger.m_Data.Breadcrumbs.Count() >= 2)
89 {
91 }
92 else if (m_TransitionalTrigger.m_Data.Breadcrumbs.Count() >= 2)
93 {
95 }
96 }
97
98 protected void CalculateBreadCrumbs()
99 {
100 float closestDist = float.MAX;
101 array<float> distances = new array<float>();
102 array<float> distancesInverted = new array<float>();
103
104 int excludeMask = 0;
105 foreach (int indx, auto crumb:m_TransitionalTrigger.m_Data.Breadcrumbs)
106 {
107 if (indx > 32)//error handling for exceeding this limit is handled elsewhere
108 break;
109
110 float dist = vector.Distance(m_Player.GetPosition(), crumb.GetPosition());
111 float crumbRadius = m_TransitionalTrigger.m_Data.Breadcrumbs[indx].Radius;
112 float maxRadiusAllowed = DISTANCE_CUTOFF;
113
114 if (crumbRadius != -1)
115 maxRadiusAllowed = crumbRadius;
116 if (dist > maxRadiusAllowed)
117 excludeMask = (excludeMask | (1 << indx));
118 else if (m_TransitionalTrigger.m_Data.Breadcrumbs[indx].UseRaycast)
119 {
120 int idx = m_Player.GetBoneIndexByName("Head");
121 vector rayStart = m_Player.GetBonePositionWS(idx);
122 vector rayEnd = crumb.GetPosition();
123 vector hitPos, hitNormal;
124 float hitFraction;
125 Object hitObj;
126
127 if (DayZPhysics.RayCastBullet(rayStart, rayEnd,PhxInteractionLayers.TERRAIN | PhxInteractionLayers.ROADWAY| PhxInteractionLayers.BUILDING, null, hitObj, hitPos, hitNormal, hitFraction))
128 {
129 excludeMask = (excludeMask | (1 << indx));
130 }
131 }
132
133 distances.Insert(dist);
134
135 #ifdef DIAG_DEVELOPER
136 if ( DiagMenu.GetBool(DiagMenuIDs.UNDERGROUND_SHOW_BREADCRUMB) )
137 Debug.DrawSphere(crumb.GetPosition(),0.1, COLOR_RED, ShapeFlags.ONCE);
138 #endif
139 }
140
141 float baseDst = distances[0];
142 float sum = 0;
143
144 foreach (float dst:distances)
145 {
146 if (dst == 0)
147 dst = 0.1;
148 float dstInv = (baseDst / dst) * baseDst;
149 sum += dstInv;
150 distancesInverted.Insert(dstInv);
151 }
152
153 float sumCheck = 0;
154 float eyeAcco = 0;
155 foreach (int i, float dstInvert:distancesInverted)
156 {
157 if ((1 << i) & excludeMask)
158 continue;
159
160 float ratio = dstInvert / sum;
161 if (ratio > MAX_RATIO)
162 ratio = MAX_RATIO;
163
164 if (ratio > RATIO_CUTOFF)
165 {
166 #ifdef DIAG_DEVELOPER
167 if (DiagMenu.GetBool(DiagMenuIDs.UNDERGROUND_SHOW_BREADCRUMB) )
168 {
169 float intensity = (1-ratio) * 255;
170 Debug.DrawLine(GetGame().GetPlayer().GetPosition() + "0 1 0", m_TransitionalTrigger.m_Data.Breadcrumbs[i].GetPosition(),ARGB(0,255,intensity,intensity),ShapeFlags.ONCE);
171 }
172 #endif
173
174 eyeAcco += ratio * m_TransitionalTrigger.m_Data.Breadcrumbs[i].EyeAccommodation;
175 }
176 }
177
178 m_EyeAccoTarget = eyeAcco * ACCO_MODIFIER;
179 }
180
181 protected void CalculateLinePointFade()
182 {
184 JsonUndergroundAreaBreadcrumb startPoint = points[0];
185 JsonUndergroundAreaBreadcrumb endPoint = points[points.Count() - 1];
186 vector playerPos = m_Player.GetPosition();
187
188 bool forceAcco;
189 float acco;
190 float accoMax = m_TransitionalTrigger.m_Data.Breadcrumbs[0].EyeAccommodation;
191 float accoMin = endPoint.EyeAccommodation;
192 JsonUndergroundAreaBreadcrumb closestPoint;
193 JsonUndergroundAreaBreadcrumb secondaryPoint;
194 float distanceToClosest;
195 float distanceToSecondary;
196 float distanceBetweenPoints;
197
198 foreach (JsonUndergroundAreaBreadcrumb point : points) //identify closest segment
199 {
200 float dist = vector.DistanceSq(playerPos, point.GetPosition());
201 if (!closestPoint || dist < distanceToClosest)
202 {
203 if (closestPoint)
204 {
205 secondaryPoint = closestPoint;
206 distanceToSecondary = distanceToClosest;
207 }
208 closestPoint = point;
209 distanceToClosest = dist;
210 }
211 else if (!secondaryPoint || dist < secondaryPoint)
212 {
213 secondaryPoint = point;
214 distanceToSecondary = dist;
215 }
216
217 #ifdef DIAG_DEVELOPER
218 if (DiagMenu.GetBool(DiagMenuIDs.UNDERGROUND_SHOW_BREADCRUMB))
219 Debug.DrawSphere(point.GetPosition(),0.1, COLOR_RED, ShapeFlags.ONCE);
220 #endif
221 }
222
223 distanceBetweenPoints = vector.DistanceSq(closestPoint.GetPosition(), secondaryPoint.GetPosition());
224
225 if (closestPoint == startPoint && secondaryPoint == points[1] && distanceToSecondary > distanceBetweenPoints) // before first point, do nothing
226 acco = accoMax;
227 else if (closestPoint == endPoint && secondaryPoint == points[points.Count() - 2] && distanceToSecondary > distanceBetweenPoints) // past second point, do nothing
228 acco = accoMin;
229 else // between the two points, lerp
230 {
231 if (closestPoint == endPoint)
232 secondaryPoint = points[points.Count() - 2];
233 else if (closestPoint == startPoint)
234 secondaryPoint = points[1];
235 else if (distanceBetweenPoints < distanceToClosest || distanceBetweenPoints < distanceToSecondary)
236 {
237 JsonUndergroundAreaBreadcrumb nexPoint = points[points.Find(closestPoint) + 1];
238 if (vector.DistanceSq(playerPos, nexPoint.GetPosition()) < vector.DistanceSq(closestPoint.GetPosition(), nexPoint.GetPosition()))
239 secondaryPoint = nexPoint;
240 else
241 {
242 acco = closestPoint.EyeAccommodation;
243 forceAcco = true;
244 }
245 }
246
247 if (!forceAcco)
248 {
249 distanceToSecondary = vector.DistanceSq(playerPos, secondaryPoint.GetPosition());
250
251 acco = distanceToSecondary / (distanceToClosest + distanceToSecondary); // progress
252 acco = Math.Lerp(secondaryPoint.EyeAccommodation, closestPoint.EyeAccommodation, acco);
253
254 if (points.Find(closestPoint) > points.Find(secondaryPoint))
255 m_LightingLerpTarget = closestPoint.LightLerp;
256 else
257 m_LightingLerpTarget = secondaryPoint.LightLerp;
258
259 }
260 }
261
263
265 {
266 if (m_LightingLerpTarget == 1)
267 {
269 m_AnimTimerLightBlend.Run(1, this, "OnUpdateTimerIn", "OnUpdateTimerEnd",0, false, LIGHT_BLEND_SPEED_IN);
270 }
271 else
272 {
274 m_AnimTimerLightBlend.Run(0, this, "OnUpdateTimerOut", "OnUpdateTimerEnd",m_LightingLerp, false, LIGHT_BLEND_SPEED_OUT);
275 }
276 }
277
278 #ifdef DIAG_DEVELOPER
279 if (DiagMenu.GetBool(DiagMenuIDs.UNDERGROUND_SHOW_BREADCRUMB))
280 {
281 Debug.DrawLine(m_Player.GetPosition() + "0 1 0", closestPoint.GetPosition(), COLOR_YELLOW, ShapeFlags.ONCE);
282 if (acco != accoMin && acco != accoMax)
283 Debug.DrawLine(closestPoint.GetPosition(), secondaryPoint.GetPosition(), COLOR_RED, ShapeFlags.ONCE);
284
285 DbgUI.Begin(String("Underground Areas"), 20, 20);
286 DbgUI.Text(String("Closest point id: " + points.Find(closestPoint)));
287 DbgUI.Text(String("Second closest id: " + points.Find(secondaryPoint)));
288 DbgUI.End();
289 }
290 #endif
291 }
292
293 protected void ProcessEyeAcco(float timeSlice)
294 {
296 bool reachedTarget = CalculateEyeAcco(timeSlice);
297 ApplyEyeAcco();
298 if(reachedTarget && !m_Player.m_UndergroundPresence)
299 {
300 GetRequester().Stop();
302 //m_NVRequester.SetUndergroundExposureCoef(1.0);
303 m_Player.KillUndergroundHandler();
304 }
305
306 }
307
308 protected void ProcessLighting(float timeSlice)
309 {
310 #ifdef DEVELOPER
311 if (!DiagMenu.GetBool(DiagMenuIDs.UNDERGROUND_DISABLE_DARKENING) )
312 {
314 }
315 else
316 {
318 }
319 #else
321 #endif
322 }
323
324 protected void ProcessSound(float timeSlice)
325 {
326 if (m_BestTrigger && m_BestTrigger.m_Data && m_BestTrigger.m_Data.AmbientSoundType != string.Empty) // caves use sound controllers so EnvSounds2D shouldnt be touched
327 return;
328
329 // reduces all env sounds and increases ambient based on eye acco
331
332 if (m_AmbientSound)
333 {
334 if (m_TransitionalTrigger && m_TransitionalTrigger.m_Data.Breadcrumbs.Count() >= 2)
335 m_AmbientSound.SetSoundVolume(1-m_EyeAcco);
336 }
337 }
338
339 void Tick(float timeSlice)
340 {
341 if (!m_Player.IsAlive())
342 return;
343
344 ProcessEyeAcco(timeSlice);
345 ProcessLighting(timeSlice);
346 ProcessSound(timeSlice);
347
348 #ifdef DIAG_DEVELOPER
349 if ( DiagMenu.GetBool(DiagMenuIDs.UNDERGROUND_SHOW_BREADCRUMB) )
350 {
351 DisplayDebugInfo(GetGame().GetWorld().GetEyeAccom(), m_LightingLerp);
352 }
353 #endif
354
355 }
356
357 protected void ApplyEyeAcco()
358 {
359 #ifdef DIAG_DEVELOPER
360 if (!DiagMenu.GetBool(DiagMenuIDs.UNDERGROUND_DISABLE_DARKENING) )
361 {
362 GetRequester().SetEyeAccommodation(m_EyeAcco);
363 }
364 else
365 {
366 GetRequester().SetEyeAccommodation(1);
367 }
368 #else
369 GetRequester().SetEyeAccommodation(m_EyeAcco);
370 #endif
371
372 float undergrounNVExposureCoef = m_EyeAcco;
373 if (m_LightingLerp >= 1.0 || GetDayZGame().GetWorld().IsNight())
374 {
375 undergrounNVExposureCoef = 1.0;
376 }
377 //m_NVRequester.SetUndergroundExposureCoef(undergrounNVExposureCoef);
378 UpdateNVGRequester(undergrounNVExposureCoef);
379 }
380
381 protected void UpdateNVGRequester(float value)
382 {
383 m_NVRequester.SetUndergroundExposureCoef(value);
384 }
385
386 protected bool CalculateEyeAcco(float timeSlice)
387 {
388 if (m_TransitionalTrigger || !m_Player.m_UndergroundPresence || (m_EyeAccoTarget == 1))
389 {
390 float accoDiff = m_EyeAccoTarget - m_EyeAcco;
391 float increase = accoDiff * m_AccoInterpolationSpeed * timeSlice;
392 m_EyeAcco += increase;
393 if (Math.AbsFloat(accoDiff) < 0.01)
394 {
396 return true;
397 }
398 }
399 else
400 {
402 }
403 return false;
404 }
405
406
407
408 protected void OnTriggerInsiderUpdate()
409 {
410 EUndergroundTriggerType bestType = EUndergroundTriggerType.UNDEFINED;
412 UndergroundTrigger bestTrigger;
413 m_EyeAccoTarget = 1;
415
416 foreach (auto t:m_InsideTriggers)
417 {
418 if (t.m_Type > bestType)
419 {
420 bestTrigger = t;
421 bestType = t.m_Type;
422 }
423 }
424 //Print(m_InsideTriggers.Count());
425 //Print(bestType);
426 if (bestTrigger)
427 {
428 m_BestTrigger = bestTrigger;
429
430 if (bestTrigger.m_Type == EUndergroundTriggerType.TRANSITIONING)
431 {
432 m_TransitionalTrigger = bestTrigger;
433 }
434 m_EyeAccoTarget = bestTrigger.m_Accommodation;
435 if (bestTrigger.m_InterpolationSpeed != -1 && bestTrigger.m_InterpolationSpeed != 0)
436 m_AccoInterpolationSpeed = bestTrigger.m_InterpolationSpeed;
437 }
438
439 SetUndergroundPresence(bestTrigger);
440 }
441
442
443 protected void SetUndergroundPresence(UndergroundTrigger trigger)
444 {
446 EUndergroundPresence oldPresence = m_Player.m_UndergroundPresence;
447
448 if (trigger)
449 {
450 if (trigger.m_Type == EUndergroundTriggerType.OUTER)
451 {
452 newPresence = EUndergroundPresence.OUTER;
453 }
454 else if (trigger.m_Type == EUndergroundTriggerType.TRANSITIONING)
455 {
456 newPresence = EUndergroundPresence.TRANSITIONING;
457 }
458 else if (trigger.m_Type == EUndergroundTriggerType.INNER)
459 {
460 newPresence = EUndergroundPresence.FULL;
461 }
462 }
463
464 if (newPresence != oldPresence)//was there a change ?
465 {
466 OnUndergroundPresenceUpdate(newPresence,oldPresence);
467 m_Player.SetUnderground(newPresence);
468 }
469
470
471 }
472
473 protected void EnableLights(bool enable)
474 {
475 foreach (ScriptedLightBase light:ScriptedLightBase.m_NightTimeOnlyLights)
476 {
477 light.SetVisibleDuringDaylight(enable);
478 }
479 }
480
482
484 {
486 return;
487 float value01 = m_AnimTimerLightBlend.GetValue();
488 float result = Easing.EaseInQuint(value01);
489 m_LightingLerp = result;
490
491 }
492
494 {
496 return;
497 float value01 = m_AnimTimerLightBlend.GetValue();
498 float result = Easing.EaseOutCubic(value01);
499 m_LightingLerp = result;
500 }
501
502 protected void PlayAmbientSound()
503 {
504 if (m_BestTrigger && m_BestTrigger.m_Data.AmbientSoundType != string.Empty)
505 {
506 m_AmbientController = m_BestTrigger.m_Data.AmbientSoundType;
507 SetSoundControllerOverride(m_AmbientController, 1.0, SoundControllerAction.Overwrite);
508 }
509 else
510 m_Player.PlaySoundSetLoop(m_AmbientSound, "Underground_SoundSet",3,3);
511 }
512
513 protected void StopAmbientSound()
514 {
515 if (m_AmbientController != string.Empty)
516 {
517 SetSoundControllerOverride(m_AmbientController, 0, SoundControllerAction.None);
518 m_AmbientController = string.Empty;
519 }
520 else if (m_AmbientSound)
521 m_Player.StopSoundSet(m_AmbientSound);
522 }
523
525 {
526 //Print("-----> On Undeground Presence update " + EnumTools.EnumToString(EUndergroundPresence, newPresence) + " " + EnumTools.EnumToString(EUndergroundPresence, oldPresence));
527 if (newPresence > EUndergroundPresence.NONE)
528 {
529 if (oldPresence == EUndergroundPresence.NONE)
530 {
531 EnableLights(true);
532 if (m_BestTrigger && m_BestTrigger.m_Data && m_BestTrigger.m_Data.AmbientSoundType != string.Empty)
534 }
535 if (newPresence > EUndergroundPresence.OUTER && oldPresence <= EUndergroundPresence.OUTER)
536 {
539 }
540 if (newPresence == EUndergroundPresence.FULL)
541 {
543 m_AnimTimerLightBlend.Run(1, this, "OnUpdateTimerIn", "OnUpdateTimerEnd",0, false, LIGHT_BLEND_SPEED_IN);
544 }
545 }
546 if (newPresence < EUndergroundPresence.FULL && oldPresence == EUndergroundPresence.FULL)
547 {
549 m_AnimTimerLightBlend.Run(0, this, "OnUpdateTimerOut", "OnUpdateTimerEnd",m_LightingLerp, false, LIGHT_BLEND_SPEED_OUT);
550 }
551 if (newPresence <= EUndergroundPresence.OUTER && oldPresence > EUndergroundPresence.OUTER)
552 {
554 }
555 if (newPresence == EUndergroundPresence.NONE)
556 {
558
559 if (oldPresence >= EUndergroundPresence.OUTER)
560 {
562 EnableLights(false);
563 }
564 }
565 }
566
567 #ifdef DIAG_DEVELOPER
568 protected void DisplayDebugInfo(float acco, float lighting)
569 {
570 if (acco < 0.0001)
571 acco = 0;
572 DbgUI.Begin(String("Underground Areas"), 20, 20);
573 DbgUI.Text(String("Eye Accomodation: " + acco.ToString()));
574 DbgUI.Text(String("Lighting lerp: " + lighting.ToString()));
575 DbgUI.End();
576 }
577 #endif
578}
enum EWetnessLevel FULL
override void Tick()
Определения ContaminatedArea_Dynamic.c:106
DayZGame GetDayZGame()
Определения DayZGame.c:3870
PhxInteractionLayers
Определения DayZPhysics.c:2
DiagMenuIDs
Определения EDiagMenuIDs.c:2
DayZPlayer m_Player
Определения Hand_Events.c:42
Empty
Определения Hand_States.c:14
void ProcessSound()
Определения HungerSoundHandler.c:28
PlayerBase GetPlayer()
Определения ModifierBase.c:51
bool CalculateEyeAcco(float timeSlice)
Определения UndergroundHandlerClient.c:386
void ApplyEyeAcco()
Определения UndergroundHandlerClient.c:357
void StopAmbientSound()
Определения UndergroundHandlerClient.c:513
void UndergroundHandlerClient(PlayerBase player)
Определения UndergroundHandlerClient.c:37
ref AnimationTimer m_AnimTimerLightBlend
Определения UndergroundHandlerClient.c:19
const float DEFAULT_INTERPOLATION_SPEED
Определения UndergroundHandlerClient.c:17
const float DISTANCE_CUTOFF
Определения UndergroundHandlerClient.c:15
void OnTriggerLeave(UndergroundTrigger trigger)
Определения UndergroundHandlerClient.c:73
string m_AmbientController
Определения UndergroundHandlerClient.c:31
UndergroundTrigger m_TransitionalTrigger
Определения UndergroundHandlerClient.c:35
PPERUndergroundAcco m_Requester
Определения UndergroundHandlerClient.c:22
void UpdateNVGRequester(float value)
Определения UndergroundHandlerClient.c:381
const float ACCO_MODIFIER
Определения UndergroundHandlerClient.c:16
void CalculateEyeAccoTarget()
Определения UndergroundHandlerClient.c:83
ref set< UndergroundTrigger > m_InsideTriggers
Определения UndergroundHandlerClient.c:24
enum EUndergroundPresence LIGHT_BLEND_SPEED_IN
PPERUndergroundAcco GetRequester()
Определения UndergroundHandlerClient.c:56
EffectSound m_AmbientSound
Определения UndergroundHandlerClient.c:32
void CalculateLinePointFade()
Определения UndergroundHandlerClient.c:181
void OnTriggerInsiderUpdate()
Определения UndergroundHandlerClient.c:408
void OnUpdateTimerEnd()
UndergroundTrigger m_BestTrigger
Определения UndergroundHandlerClient.c:34
const float RATIO_CUTOFF
Определения UndergroundHandlerClient.c:14
float m_EyeAcco
Определения UndergroundHandlerClient.c:28
void CalculateBreadCrumbs()
Определения UndergroundHandlerClient.c:98
void ProcessLighting(float timeSlice)
Определения UndergroundHandlerClient.c:308
void EnableLights(bool enable)
Определения UndergroundHandlerClient.c:473
float m_LightingLerpTarget
Определения UndergroundHandlerClient.c:29
const float LIGHT_BLEND_SPEED_OUT
Определения UndergroundHandlerClient.c:12
void ~UndergroundHandlerClient()
Определения UndergroundHandlerClient.c:44
void OnUndergroundPresenceUpdate(EUndergroundPresence newPresence, EUndergroundPresence oldPresence)
Определения UndergroundHandlerClient.c:524
float m_EyeAccoTarget
Определения UndergroundHandlerClient.c:26
PPERequester_CameraNV m_NVRequester
Определения UndergroundHandlerClient.c:23
float m_AccoInterpolationSpeed
Определения UndergroundHandlerClient.c:27
void OnTriggerEnter(UndergroundTrigger trigger)
Определения UndergroundHandlerClient.c:66
void OnUpdateTimerIn()
Определения UndergroundHandlerClient.c:483
void OnUpdateTimerOut()
Определения UndergroundHandlerClient.c:493
void ProcessEyeAcco(float timeSlice)
Определения UndergroundHandlerClient.c:293
float m_LightingLerp
Определения UndergroundHandlerClient.c:30
const string UNDERGROUND_LIGHTING
Определения UndergroundHandlerClient.c:18
EUndergroundPresence
Определения UndergroundHandlerClient.c:2
@ TRANSITIONING
Определения UndergroundHandlerClient.c:5
@ OUTER
Определения UndergroundHandlerClient.c:4
void SetUndergroundPresence(UndergroundTrigger trigger)
Определения UndergroundHandlerClient.c:443
const float MAX_RATIO
Определения UndergroundHandlerClient.c:13
void PlayAmbientSound()
Определения UndergroundHandlerClient.c:502
AnimationTimer class. This timer is for animating float value. usage:
Определения 3_Game/tools/tools.c:653
proto native World GetWorld()
proto native Weather GetWeather()
Returns weather controller object.
static proto bool RayCastBullet(vector begPos, vector endPos, PhxInteractionLayers layerMask, Object ignoreObj, out Object hitObject, out vector hitPosition, out vector hitNormal, out float hitFraction)
Определения DayZPhysics.c:124
Определения DbgUI.c:60
static Shape DrawSphere(vector pos, float size=1, int color=0x1fff7f7f, ShapeFlags flags=ShapeFlags.TRANSP|ShapeFlags.NOOUTLINE)
Определения 3_Game/tools/Debug.c:319
static Shape DrawLine(vector from, vector to, int color=0xFFFFFFFF, int flags=0)
Определения 3_Game/tools/Debug.c:382
Определения 3_Game/tools/Debug.c:2
Определения EnDebug.c:241
static float EaseInQuint(float t)
Определения Easing.c:78
static float EaseOutCubic(float t)
Определения Easing.c:42
Input value between 0 and 1, returns value adjusted by easing, no automatic clamping of input(do your...
Определения Easing.c:3
Wrapper class for managing sound through SEffectManager.
Определения EffectSound.c:5
Определения EnMath.c:7
Определения ObjectTyped.c:2
Определения PlayerBaseClient.c:2
proto native void SuppressLightningSimulation(bool state)
enables/disables thunderbolt simulation on client (together with sounds)
proto native void SetExplicitVolumeFactor_EnvSounds2D(float factor, float fadeTime)
proto native void LoadUserLightingCfg(string path, string name)
proto native void SetUserLightingLerp(float val)
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
proto string ToString(bool simple=true)
static proto native float DistanceSq(vector v1, vector v2)
Returns the square distance between tips of two 3D vectors.
static proto native float Distance(vector v1, vector v2)
Returns the distance between tips of two 3D vectors.
Определения EnConvert.c:106
proto native CGame GetGame()
const int COLOR_RED
Определения 1_Core/constants.c:64
const int COLOR_YELLOW
Определения 1_Core/constants.c:67
ShapeFlags
Определения EnDebug.c:126
static proto native void End()
static proto native void Begin(string windowTitle, float x=0, float y=0)
static proto native void Text(string label)
static proto bool GetBool(int id, bool reverse=false)
Get value as bool from the given script id.
string String(string s)
Helper for passing string expression to functions with void parameter. Example: Print(String("Hello "...
Определения EnScript.c:339
static proto float Lerp(float a, float b, float time)
Linearly interpolates between 'a' and 'b' given 'time'.
static proto float AbsFloat(float f)
Returns absolute value.
@ NONE
No flags.
Определения EnProfiler.c:11
SetSoundControllerOverride(string controllerName, float value, SoundControllerAction action)
class JsonUndergroundAreaTriggerData GetPosition
Определения UndergroundAreaLoader.c:9
int ARGB(int a, int r, int g, int b)
Определения proto.c:322