DayZ 1.29
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 {
39 g_Game.GetWorld().LoadUserLightingCfg(UNDERGROUND_LIGHTING, "Underground");
40 m_Player = player;
41 m_NVRequester = PPERequester_CameraNV.Cast(PPERequesterBank.GetRequester(PPERequesterBank.REQ_CAMERANV));
42 }
43
45 {
46 if (g_Game)
47 {
48 g_Game.GetWorld().SetExplicitVolumeFactor_EnvSounds2D(1, 0.5);
49 g_Game.GetWeather().SuppressLightningSimulation(false);
50 g_Game.GetWorld().SetUserLightingLerp(0);
52 m_AmbientSound.Stop();
53 }
54 }
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 void OnTriggerLeave(UndergroundTrigger trigger)
73 {
74 int index = m_InsideTriggers.Find(trigger);
75 if (index != -1)
76 m_InsideTriggers.Remove(index);
77
79 }
80
81 protected void CalculateEyeAccoTarget()
82 {
84 return;
85
86 if (m_TransitionalTrigger.m_Data.UseLinePointFade && m_TransitionalTrigger.m_Data.Breadcrumbs.Count() >= 2)
87 {
89 }
90 else if (m_TransitionalTrigger.m_Data.Breadcrumbs.Count() >= 1)
91 {
93 }
94 }
95
96 protected void CalculateBreadCrumbs()
97 {
98 float closestDist = float.MAX;
99 array<float> distances = new array<float>();
100 array<float> distancesInverted = new array<float>();
101
102 int excludeMask = 0;
103 foreach (int indx, auto crumb : m_TransitionalTrigger.m_Data.Breadcrumbs)
104 {
105 if (indx > 32)//error handling for exceeding this limit is handled elsewhere
106 break;
107
108 float dist = vector.Distance(m_Player.GetPosition(), crumb.GetPosition());
109 float crumbRadius = m_TransitionalTrigger.m_Data.Breadcrumbs[indx].Radius;
110 float maxRadiusAllowed = DISTANCE_CUTOFF;
111
112 switch (crumb.ExternalValueController.Type)
113 {
114 case "DoorState":
115 {
116 BreadcrumbDoorStateController ctrl = new BreadcrumbDoorStateController(crumb.ExternalValueController.Params);
117 if (!ctrl || (ctrl && ctrl.SelectionName == ""))
118 break;
119
120 Building building = Building.Cast(m_TransitionalTrigger.GetTriggerParentObject());
121 if (!building)
122 break;
123
124 float animPhase = building.GetAnimationPhase(ctrl.SelectionName);
125 m_LightingLerpTarget = Math.Clamp(Easing.EaseInOutQuint(1 - animPhase), 0.0, 1.0);
126 m_LightingLerp = Easing.EaseInQuint(1 - Math.Remap(0.2, 0.5, 0.0, 1.0, animPhase));
127 m_EyeAccoTarget = Math.Remap(0.2, 0.5, 0.0, m_TransitionalTrigger.m_Data.Breadcrumbs[indx].EyeAccommodation, animPhase * ACCO_MODIFIER);
128
129 return;
130 }
131 }
132
133 if (crumbRadius != -1)
134 maxRadiusAllowed = crumbRadius;
135 if (dist > maxRadiusAllowed)
136 excludeMask = (excludeMask | (1 << indx));
137 else if (m_TransitionalTrigger.m_Data.Breadcrumbs[indx].UseRaycast)
138 {
139 vector rayStart;
140 MiscGameplayFunctions.GetHeadBonePos(m_Player, rayStart);
141 vector rayEnd = crumb.GetPosition();
142 vector hitPos, hitNormal;
143 float hitFraction;
144 Object hitObj;
145
146 if (DayZPhysics.RayCastBullet(rayStart, rayEnd,PhxInteractionLayers.TERRAIN | PhxInteractionLayers.ROADWAY| PhxInteractionLayers.BUILDING, null, hitObj, hitPos, hitNormal, hitFraction))
147 {
148 excludeMask = (excludeMask | (1 << indx));
149 }
150 }
151
152 distances.Insert(dist);
153
154 #ifdef DIAG_DEVELOPER
155 if ( DiagMenu.GetBool(DiagMenuIDs.UNDERGROUND_SHOW_BREADCRUMB) )
156 Debug.DrawSphere(crumb.GetPosition(),0.1, COLOR_RED, ShapeFlags.ONCE);
157 #endif
158 }
159
160 float baseDst = distances[0];
161 float sum = 0;
162
163 foreach (float dst:distances)
164 {
165 if (dst == 0)
166 dst = 0.1;
167 float dstInv = (baseDst / dst) * baseDst;
168 sum += dstInv;
169 distancesInverted.Insert(dstInv);
170 }
171
172 float sumCheck = 0;
173 float eyeAcco = 0;
174 foreach (int i, float dstInvert:distancesInverted)
175 {
176 if ((1 << i) & excludeMask)
177 continue;
178
179 float ratio = dstInvert / sum;
180 if (ratio > MAX_RATIO)
181 ratio = MAX_RATIO;
182
183 if (ratio > RATIO_CUTOFF)
184 {
185 #ifdef DIAG_DEVELOPER
186 if (DiagMenu.GetBool(DiagMenuIDs.UNDERGROUND_SHOW_BREADCRUMB) )
187 {
188 float intensity = (1-ratio) * 255;
189 Debug.DrawLine(g_Game.GetPlayer().GetPosition() + "0 1 0", m_TransitionalTrigger.m_Data.Breadcrumbs[i].GetPosition(),ARGB(0,255,intensity,intensity),ShapeFlags.ONCE);
190 }
191 #endif
192
193 eyeAcco += ratio * m_TransitionalTrigger.m_Data.Breadcrumbs[i].EyeAccommodation;
194 }
195 }
196
197 m_EyeAccoTarget = eyeAcco * ACCO_MODIFIER;
198 }
199
200 protected void CalculateLinePointFade()
201 {
203 JsonUndergroundAreaBreadcrumb startPoint = points[0];
204 JsonUndergroundAreaBreadcrumb endPoint = points[points.Count() - 1];
205 vector playerPos = m_Player.GetPosition();
206
207 bool forceAcco;
208 float acco;
209 float accoMax = m_TransitionalTrigger.m_Data.Breadcrumbs[0].EyeAccommodation;
210 float accoMin = endPoint.EyeAccommodation;
211 JsonUndergroundAreaBreadcrumb closestPoint;
212 JsonUndergroundAreaBreadcrumb secondaryPoint;
213 float distanceToClosest;
214 float distanceToSecondary;
215 float distanceBetweenPoints;
216
217 foreach (JsonUndergroundAreaBreadcrumb point : points) //identify closest segment
218 {
219 float dist = vector.DistanceSq(playerPos, point.GetPosition());
220 if (!closestPoint || dist < distanceToClosest)
221 {
222 if (closestPoint)
223 {
224 secondaryPoint = closestPoint;
225 distanceToSecondary = distanceToClosest;
226 }
227 closestPoint = point;
228 distanceToClosest = dist;
229 }
230 else if (!secondaryPoint || dist < secondaryPoint)
231 {
232 secondaryPoint = point;
233 distanceToSecondary = dist;
234 }
235
236 #ifdef DIAG_DEVELOPER
237 if (DiagMenu.GetBool(DiagMenuIDs.UNDERGROUND_SHOW_BREADCRUMB))
238 Debug.DrawSphere(point.GetPosition(),0.1, COLOR_RED, ShapeFlags.ONCE);
239 #endif
240 }
241
242 distanceBetweenPoints = vector.DistanceSq(closestPoint.GetPosition(), secondaryPoint.GetPosition());
243
244 if (closestPoint == startPoint && secondaryPoint == points[1] && distanceToSecondary > distanceBetweenPoints) // before first point, do nothing
245 acco = accoMax;
246 else if (closestPoint == endPoint && secondaryPoint == points[points.Count() - 2] && distanceToSecondary > distanceBetweenPoints) // past second point, do nothing
247 acco = accoMin;
248 else // between the two points, lerp
249 {
250 if (closestPoint == endPoint)
251 secondaryPoint = points[points.Count() - 2];
252 else if (closestPoint == startPoint)
253 secondaryPoint = points[1];
254 else if (distanceBetweenPoints < distanceToClosest || distanceBetweenPoints < distanceToSecondary)
255 {
256 JsonUndergroundAreaBreadcrumb nexPoint = points[points.Find(closestPoint) + 1];
257 if (vector.DistanceSq(playerPos, nexPoint.GetPosition()) < vector.DistanceSq(closestPoint.GetPosition(), nexPoint.GetPosition()))
258 secondaryPoint = nexPoint;
259 else
260 {
261 acco = closestPoint.EyeAccommodation;
262 forceAcco = true;
263 }
264 }
265
266 if (!forceAcco)
267 {
268 distanceToSecondary = vector.DistanceSq(playerPos, secondaryPoint.GetPosition());
269
270 acco = distanceToSecondary / (distanceToClosest + distanceToSecondary); // progress
271 acco = Math.Lerp(secondaryPoint.EyeAccommodation, closestPoint.EyeAccommodation, acco);
272
273 if (points.Find(closestPoint) > points.Find(secondaryPoint))
274 m_LightingLerpTarget = closestPoint.LightLerp;
275 else
276 m_LightingLerpTarget = secondaryPoint.LightLerp;
277
278 }
279 }
280
282
284 {
285 if (m_LightingLerpTarget == 1)
286 {
288 m_AnimTimerLightBlend.Run(1, this, "OnUpdateTimerIn", "OnUpdateTimerEnd",0, false, LIGHT_BLEND_SPEED_IN);
289 }
290 else
291 {
293 m_AnimTimerLightBlend.Run(0, this, "OnUpdateTimerOut", "OnUpdateTimerEnd",m_LightingLerp, false, LIGHT_BLEND_SPEED_OUT);
294 }
295 }
296
297 #ifdef DIAG_DEVELOPER
298 if (DiagMenu.GetBool(DiagMenuIDs.UNDERGROUND_SHOW_BREADCRUMB))
299 {
300 vector headPosition;
301 MiscGameplayFunctions.GetHeadBonePos(m_Player, headPosition);
302 Debug.DrawLine(headPosition, closestPoint.GetPosition(), COLOR_YELLOW, ShapeFlags.ONCE);
303 if (acco != accoMin && acco != accoMax)
304 Debug.DrawLine(closestPoint.GetPosition(), secondaryPoint.GetPosition(), COLOR_RED, ShapeFlags.ONCE);
305
306 DbgUI.Begin(String("Underground Areas"), 20, 20);
307 DbgUI.Text(String("Closest point id: " + points.Find(closestPoint)));
308 DbgUI.Text(String("Second closest id: " + points.Find(secondaryPoint)));
309 DbgUI.End();
310 }
311 #endif
312 }
313
314 protected void ProcessEyeAcco(float timeSlice)
315 {
317 bool reachedTarget = CalculateEyeAcco(timeSlice);
318 ApplyEyeAcco();
319 if(reachedTarget && !m_Player.m_UndergroundPresence)
320 {
321 GetRequester().Stop();
323 //m_NVRequester.SetUndergroundExposureCoef(1.0);
324 m_Player.KillUndergroundHandler();
325 }
326
327 }
328
329 protected void ProcessLighting(float timeSlice)
330 {
331 #ifdef DEVELOPER
332 if (!DiagMenu.GetBool(DiagMenuIDs.UNDERGROUND_DISABLE_DARKENING) )
333 {
334 g_Game.GetWorld().SetUserLightingLerp(m_LightingLerp);
335 }
336 else
337 {
338 g_Game.GetWorld().SetUserLightingLerp(0);
339 }
340 #else
341 g_Game.GetWorld().SetUserLightingLerp(m_LightingLerp);
342 #endif
343 }
344
345 protected void ProcessSound(float timeSlice)
346 {
347 if (m_BestTrigger && m_BestTrigger.m_Data && m_BestTrigger.m_Data.AmbientSoundType != string.Empty) // caves use sound controllers so EnvSounds2D shouldnt be touched
348 return;
349
350 // reduces all env sounds and increases ambient based on eye acco
351 g_Game.GetWorld().SetExplicitVolumeFactor_EnvSounds2D(m_EyeAcco, 0);
352
353 if (m_AmbientSound)
354 {
355 if (m_TransitionalTrigger && m_TransitionalTrigger.m_Data.Breadcrumbs.Count() >= 2)
356 m_AmbientSound.SetSoundVolume(1-m_EyeAcco);
357 }
358 }
359
360 void Tick(float timeSlice)
361 {
362 if (!m_Player.IsAlive())
363 return;
364
365 ProcessEyeAcco(timeSlice);
366 ProcessLighting(timeSlice);
367 ProcessSound(timeSlice);
368
369 #ifdef DIAG_DEVELOPER
370 if ( DiagMenu.GetBool(DiagMenuIDs.UNDERGROUND_SHOW_BREADCRUMB) )
371 {
372 DisplayDebugInfo(g_Game.GetWorld().GetEyeAccom(), m_LightingLerp);
373 }
374 #endif
375
376 }
377
378 protected void ApplyEyeAcco()
379 {
380 #ifdef DIAG_DEVELOPER
381 if (!DiagMenu.GetBool(DiagMenuIDs.UNDERGROUND_DISABLE_DARKENING) )
382 {
383 GetRequester().SetEyeAccommodation(m_EyeAcco);
384 }
385 else
386 {
387 GetRequester().SetEyeAccommodation(1);
388 }
389 #else
390 GetRequester().SetEyeAccommodation(m_EyeAcco);
391 #endif
392
393 float undergrounNVExposureCoef = m_EyeAcco;
394 if (m_LightingLerp >= 1.0 || GetDayZGame().GetWorld().IsNight())
395 {
396 undergrounNVExposureCoef = 1.0;
397 }
398 //m_NVRequester.SetUndergroundExposureCoef(undergrounNVExposureCoef);
399 UpdateNVGRequester(undergrounNVExposureCoef);
400 }
401
402 protected void UpdateNVGRequester(float value)
403 {
404 m_NVRequester.SetUndergroundExposureCoef(value);
405 }
406
407 protected bool CalculateEyeAcco(float timeSlice)
408 {
409 if (m_TransitionalTrigger || !m_Player.m_UndergroundPresence || (m_EyeAccoTarget == 1))
410 {
411 float accoDiff = m_EyeAccoTarget - m_EyeAcco;
412 float increase = accoDiff * m_AccoInterpolationSpeed * timeSlice;
413 m_EyeAcco += increase;
414 if (Math.AbsFloat(accoDiff) < 0.01)
415 {
417 return true;
418 }
419 }
420 else
421 {
423 }
424 return false;
425 }
426
427
428
429 protected void OnTriggerInsiderUpdate()
430 {
431 EUndergroundTriggerType bestType = EUndergroundTriggerType.UNDEFINED;
433 UndergroundTrigger bestTrigger;
434 m_EyeAccoTarget = 1;
436
437 foreach (auto t:m_InsideTriggers)
438 {
439 if (t.m_Type > bestType)
440 {
441 bestTrigger = t;
442 bestType = t.m_Type;
443 }
444 }
445 //Print(m_InsideTriggers.Count());
446 //Print(bestType);
447 if (bestTrigger)
448 {
449 m_BestTrigger = bestTrigger;
450
451 if (bestTrigger.m_Type == EUndergroundTriggerType.TRANSITIONING)
452 {
453 m_TransitionalTrigger = bestTrigger;
454 }
455 m_EyeAccoTarget = bestTrigger.m_Accommodation;
456 if (bestTrigger.m_InterpolationSpeed != -1 && bestTrigger.m_InterpolationSpeed != 0)
457 m_AccoInterpolationSpeed = bestTrigger.m_InterpolationSpeed;
458 }
459
460 SetUndergroundPresence(bestTrigger);
461 }
462
463
464 protected void SetUndergroundPresence(UndergroundTrigger trigger)
465 {
467 EUndergroundPresence oldPresence = m_Player.m_UndergroundPresence;
468
469 if (trigger)
470 {
471 if (trigger.m_Type == EUndergroundTriggerType.OUTER)
472 newPresence = EUndergroundPresence.OUTER;
473 else if (trigger.m_Type == EUndergroundTriggerType.TRANSITIONING)
474 newPresence = EUndergroundPresence.TRANSITIONING;
475 else if (trigger.m_Type == EUndergroundTriggerType.INNER)
476 newPresence = EUndergroundPresence.FULL;
477 }
478
479 if (newPresence != oldPresence)//was there a change ?
480 {
481 OnUndergroundPresenceUpdate(newPresence, oldPresence);
482 m_Player.SetUnderground(newPresence);
483 }
484 }
485
486 protected void EnableLights(bool enable)
487 {
488 foreach (ScriptedLightBase light:ScriptedLightBase.m_NightTimeOnlyLights)
489 {
490 light.SetVisibleDuringDaylight(enable);
491 }
492 }
493
495
497 {
499 return;
500 float value01 = m_AnimTimerLightBlend.GetValue();
501 float result = Easing.EaseInQuint(value01);
502 m_LightingLerp = result;
503
504 }
505
507 {
509 return;
510 float value01 = m_AnimTimerLightBlend.GetValue();
511 float result = Easing.EaseOutCubic(value01);
512 m_LightingLerp = result;
513 }
514
515 protected void PlayAmbientSound()
516 {
517 if (m_BestTrigger)
518 {
519 if (m_BestTrigger.m_Data.AmbientSoundType != string.Empty)
520 {
521 m_AmbientController = m_BestTrigger.m_Data.AmbientSoundType;
522 SetSoundControllerOverride(m_AmbientController, 1.0, SoundControllerAction.Overwrite);
523 }
524 if (m_BestTrigger.m_Data.AmbientSoundSet != string.Empty)
525 {
526 if (m_AmbientSound && m_BestTrigger.m_Data.AmbientSoundSet != m_AmbientSound.GetSoundSet())
528
529 m_Player.PlaySoundSetLoop(m_AmbientSound, m_BestTrigger.m_Data.AmbientSoundSet, 3, 3);
530 }
531
532 }
533 }
534
535 protected void StopAmbientSound()
536 {
537 if (m_AmbientController != string.Empty)
538 {
539 SetSoundControllerOverride(m_AmbientController, 0, SoundControllerAction.None);
540 m_AmbientController = string.Empty;
541 }
542 else if (m_AmbientSound)
543 m_Player.StopSoundSet(m_AmbientSound);
544 }
545
547 {
548 //Print("-----> On Undeground Presence update " + EnumTools.EnumToString(EUndergroundPresence, newPresence) + " " + EnumTools.EnumToString(EUndergroundPresence, oldPresence));
549 if (newPresence > EUndergroundPresence.NONE)
550 {
551 if (oldPresence == EUndergroundPresence.NONE)
552 {
553 EnableLights(true);
554 if (m_BestTrigger && m_BestTrigger.m_Data)
556 }
557 if (newPresence > EUndergroundPresence.OUTER && oldPresence <= EUndergroundPresence.OUTER)
558 {
559 g_Game.GetWeather().SuppressLightningSimulation(true);
561 }
562 if (newPresence == EUndergroundPresence.FULL)
563 {
565 m_AnimTimerLightBlend.Run(1.0, this, "OnUpdateTimerIn", "OnUpdateTimerEnd", m_LightingLerp, false, LIGHT_BLEND_SPEED_IN);
566 }
567 }
568 if (newPresence < EUndergroundPresence.FULL && oldPresence == EUndergroundPresence.FULL)
569 {
571 m_AnimTimerLightBlend.Run(0.0, this, "OnUpdateTimerOut", "OnUpdateTimerEnd", m_LightingLerp, false, LIGHT_BLEND_SPEED_OUT);
572 }
573 if (newPresence <= EUndergroundPresence.OUTER && oldPresence > EUndergroundPresence.OUTER)
574 {
575 g_Game.GetWeather().SuppressLightningSimulation(false);
576 }
577 if (newPresence == EUndergroundPresence.NONE)
578 {
580
581 if (oldPresence >= EUndergroundPresence.OUTER)
582 {
583 g_Game.GetWorld().SetUserLightingLerp(0);
584 EnableLights(false);
585 }
586 }
587 }
588
589 #ifdef DIAG_DEVELOPER
590 protected void DisplayDebugInfo(float acco, float lighting)
591 {
592 if (acco < 0.0001)
593 acco = 0;
594 DbgUI.Begin(String("Underground Areas"), 20, 20);
595 DbgUI.Text(String("Eye Accomodation: " + acco.ToString()));
596 DbgUI.Text(String("Lighting lerp: " + lighting.ToString()));
597 DbgUI.End();
598 }
599 #endif
600}
enum EWetnessLevel FULL
map m_Player
override void Tick()
Определения ContaminatedArea_Dynamic.c:106
DayZGame g_Game
Определения DayZGame.c:3942
DayZGame GetDayZGame()
Определения DayZGame.c:3944
PhxInteractionLayers
Определения DayZPhysics.c:2
DiagMenuIDs
Определения EDiagMenuIDs.c:2
Empty
Определения Hand_States.c:14
void ProcessSound()
Определения HungerSoundHandler.c:28
void BreadcrumbDoorStateController(TStringArray params)
Определения UndergroundAreaLoader.c:62
bool CalculateEyeAcco(float timeSlice)
Определения UndergroundHandlerClient.c:407
void ApplyEyeAcco()
Определения UndergroundHandlerClient.c:378
void StopAmbientSound()
Определения UndergroundHandlerClient.c:535
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:72
string m_AmbientController
Определения UndergroundHandlerClient.c:31
UndergroundTrigger m_TransitionalTrigger
Определения UndergroundHandlerClient.c:35
PPERUndergroundAcco m_Requester
Определения UndergroundHandlerClient.c:22
void UpdateNVGRequester(float value)
Определения UndergroundHandlerClient.c:402
const float ACCO_MODIFIER
Определения UndergroundHandlerClient.c:16
void CalculateEyeAccoTarget()
Определения UndergroundHandlerClient.c:81
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:200
void OnTriggerInsiderUpdate()
Определения UndergroundHandlerClient.c:429
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:96
void ProcessLighting(float timeSlice)
Определения UndergroundHandlerClient.c:329
void EnableLights(bool enable)
Определения UndergroundHandlerClient.c:486
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:546
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:496
void OnUpdateTimerOut()
Определения UndergroundHandlerClient.c:506
void ProcessEyeAcco(float timeSlice)
Определения UndergroundHandlerClient.c:314
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:464
const float MAX_RATIO
Определения UndergroundHandlerClient.c:13
void PlayAmbientSound()
Определения UndergroundHandlerClient.c:515
AnimationTimer class. This timer is for animating float value. usage:
Определения 3_Game/DayZ/tools/tools.c:651
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/DayZ/tools/Debug.c:382
static Shape DrawLine(vector from, vector to, int color=0xFFFFFFFF, int flags=0)
Определения 3_Game/DayZ/tools/Debug.c:461
Определения 3_Game/DayZ/tools/Debug.c:2
Определения EnDebug.c:241
static float EaseInQuint(float t)
Определения Easing.c:78
static float EaseInOutQuint(float t)
Определения Easing.c:89
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
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:119
const int COLOR_RED
Определения 1_Core/DayZ/constants.c:64
const int COLOR_YELLOW
Определения 1_Core/DayZ/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 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 float Remap(float inputMin, float inputMax, float outputMin, float outputMax, float inputValue, bool clampedOutput=true)
Returns given value remaped from input range into output range.
Определения EnMath.c:740
static proto float AbsFloat(float f)
Returns absolute value.
@ NONE
body is not in simulation, nor in collision world
Определения SimulationState.c:15
SetSoundControllerOverride(string controllerName, float value, SoundControllerAction action)
int ARGB(int a, int r, int g, int b)
Определения proto.c:322