DayZ 1.30
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
DayZPlayerCamera_Base.c
См. документацию.
1
2float Limit(float pV, float pMin, float pMax)
3{
4 if (pV >= pMin && pV <= pMax)
5 {
6 return pV;
7 }
8 else if (pV < pMin)
9 {
10 return pMin;
11 }
12 else
13 {
14 return pMax;
15 }
16}
17
18
19float fixAngle_PI_PI(float pAngle)
20{
21 while (pAngle > Math.PI)
22 {
23
24 pAngle -= Math.PI2;
25 }
26
27 while (pAngle < -Math.PI)
28 {
29
30 pAngle += Math.PI2;
31 }
32
33 return pAngle;
34}
35
36float fixAngle_180_180(float pAngle)
37{
38 while (pAngle > 180)
39 {
40
41 pAngle -= 360;
42 }
43
44 while (pAngle < -180)
45 {
46
47 pAngle += 360;
48 }
49
50 return pAngle;
51}
52
53
88
90{
91 static const float CONST_NEARPLANE_OPTICS_MIN = 0.04; //Minimal safe near plane value, artifacts on the far plane otherwise!
92 const float SANDSTORM_NVG_THRESHOLD = 0.15;
93
97
100 {
101 m_fLRAngleVel[0] = 0;
102 m_fUDAngleVel[0] = 0;
103 m_fFovAbsVel[0] = 0;
105
106 m_fFovAbsolute = GetDayZGame().GetFOVByZoomType(m_pPlayer.GetEyeZoomLevel());
108 /*
109 {
110 int perItemCamUD = pPlayer.GetCurrentPerItemCameraUD();
111 string a = "Per Item Camera User Data: " + perItemCamUD.ToString();
112 Print(a);
113 }
114 */
115 m_CameraPPDelay = 0;
116
117 m_CommandWeapons = pPlayer.GetCommandModifier_Weapons();
118 Init();
120 };
121
122 //disabled by default, overrides on select 3rd person cameras
124 {
126 m_pInput.Override3rdIsRightShoulder(HumanInputControllerOverrideType.DISABLED, false);
127 }
128
129 void ProcessCameraShake(float delta, out float leftRight, out float upDown)
130 {
131 if (m_CameraShake)
132 {
133 float x,y;
134 m_CameraShake.Update(delta, x, y);
135 leftRight += x;
136 upDown += y;
137 }
138 }
139
140 void Init()
141 {
142 PlayerBase player = PlayerBase.Cast(m_pPlayer);
143 if ( player && player.IsNVGWorking() != IsCameraNV() )
144 {
145 SetCameraNV(player.IsNVGWorking());
146 SetCameraNVType(player.GetNVType());
147 }
148 }
149
150 float UpdateUDAngleUnlocked(out float pAngle, out float pAngleAdd, float pMin, float pMax, float pDt)
151 {
152 float target = 0.0;
153
154 if (m_pInput.CameraIsTracking())
155 {
156 pAngleAdd = m_pInput.GetTracking()[1] * Math.RAD2DEG;
157 pAngle = target;
158
159 m_fUDAngleVel[0] = 0;
160 }
161 else
162 {
163 if (m_pInput.CameraIsFreeLook())
164 {
165 pAngleAdd += m_pInput.GetAimDelta(pDt)[1] * Math.RAD2DEG;
166
167 m_fUDAngleVel[0] = 0;
168 }
169 else
170 {
171 target = m_CommandWeapons.GetBaseAimingAngleUD();
172 pAngleAdd = pAngle + pAngleAdd - target;
173 pAngle = target;
174
175 PlayerBase player = PlayerBase.Cast(m_pPlayer);
176 if (player) // handle locking of camera U/D angle movement when performing an action and not in freelook
177 {
178 float pitch = pAngle + pAngleAdd;
179 float downLimit, upLimit, leftLimit, rightLimit;
180 player.GetLookLimits(downLimit, upLimit, leftLimit, rightLimit);
181
182 if (pitch < (upLimit + 1) && pitch > (downLimit - 1)) // stop smoothing once within sufficiently small difference
183 {
184 pMin = downLimit;
185 pMax = upLimit;
186 }
187 else // smooth camera to locked angle, avoiding snap from the angle we started the action to the limit
188 {
189 float velMin[1] = m_fUDAngleVel;
190 pMin = Math.SmoothCD(pitch, downLimit, velMin, 0.2, 1000, pDt);
191
192 float velMax[1] = m_fUDAngleVel;
193 pMax = Math.SmoothCD(pitch, upLimit, velMax, 0.2, 1000, pDt);
194 }
195 }
196
197 pAngleAdd = Math.SmoothCD(pAngleAdd, 0.0, m_fUDAngleVel, 0.14, 1000, pDt);
198 }
199
200 if (!m_pInput.CameraIsFreeLook())
201 {
202 pAngle += m_pInput.GetAimDelta(pDt)[1] * Math.RAD2DEG;
203 }
204 }
205
206 pAngle = Limit(pAngle, pMin, pMax);
207 pAngleAdd = Limit(pAngle + pAngleAdd, pMin, pMax) - pAngle;
208
209 return pAngle + pAngleAdd;
210 }
211
212 float UpdateLRAngleUnlocked(out float pAngle, out float pAngleAdd, float pMin, float pMax, float pDt)
213 {
214 float target = 0;
215
216 if (m_pInput.CameraIsTracking())
217 {
218 pAngleAdd = m_pInput.GetTracking()[0] * Math.RAD2DEG;
219 pAngle = target;
220
221 m_fUDAngleVel[0] = 0;
222 }
223 else
224 {
225 if (Math.AbsFloat(pAngleAdd) > 0.001)
226 {
227 pAngleAdd = pAngle + pAngleAdd - target;
228 pAngle = target;
229 }
230
231 if (m_pInput.CameraIsFreeLook() || m_bForceFreeLook)
232 {
233 pAngleAdd += m_pInput.GetAimDelta(pDt)[0] * Math.RAD2DEG;
234
235 m_fLRAngleVel[0] = 0;
236 }
237 else
238 {
239 pAngleAdd = Math.SmoothCD(pAngleAdd, 0.0, m_fLRAngleVel, 0.14, 1000, pDt);
240 }
241
242 pAngleAdd = pAngleAdd + pAngle;
243 }
244
245 pAngle = Limit(pAngle, pMin, pMax);
246 pAngleAdd = Limit(pAngle + pAngleAdd, pMin, pMax) - pAngle;
247
248 return pAngle + pAngleAdd;
249 }
250
251 float UpdateUDAngle(out float pAngle, out float pAngleAdd, float pMin, float pMax, float pDt)
252 {
253 if (Math.AbsFloat(pAngleAdd) > 0.001)
254 {
255 float aimingUDAngle = m_CommandWeapons.GetBaseAimingAngleUD();
256
259
260 // override actual angle
261 pAngleAdd = pAngle + pAngleAdd - aimingUDAngle;
262 pAngle = aimingUDAngle;
263
264 // Print("Angle: " + pAngle.ToString() + " Aim: " + actualUDAngle.ToString() );
265 }
266
268 if( m_pInput.CameraIsFreeLook() )
269 {
270 pAngleAdd += m_pInput.GetAimChange()[1] * Math.RAD2DEG;
271 pAngleAdd = Limit(pAngleAdd, pMin, pMax);
272
273 m_fUDAngleVel[0] = 0;
274 }
275 else
276 {
277 if( m_pInput.CameraIsTracking() )
278 {
279 pAngleAdd = m_pInput.GetTracking()[1] * Math.RAD2DEG;
280 pAngleAdd = Limit(pAngleAdd, pMin, pMax);
281
282 m_fUDAngleVel[0] = 0;
283 }
284 else
285 {
287 pAngle += m_pInput.GetAimChange()[1] * Math.RAD2DEG;
288 pAngle = Limit(pAngle, pMin, pMax);
289
290 pAngleAdd = Math.SmoothCD(pAngleAdd, 0, m_fUDAngleVel, 0.14, 1000, pDt);
291 }
292 }
293
294 /*{
295 float change = m_pInput.GetAimChange()[1] * Math.RAD2DEG;
296
297 Print ("Script: Camera ud angle: " + pAngle.ToString() + " change: " + change.ToString() );
298 }*/
299
300 return Limit(pAngle + pAngleAdd, pMin, pMax);
301 }
302
303 float UpdateLRAngle(float pAngle, float pMin, float pMax, float pDt)
304 {
306 if (m_pInput.CameraIsFreeLook() || m_bForceFreeLook)
307 {
309 pAngle += m_pInput.GetAimChange()[0] * Math.RAD2DEG;
310 pAngle = Limit(pAngle, pMin, pMax);
311
312 m_fLRAngleVel[0] = 0; // reset filter
313
314 }
315 else
316 {
317 if( m_pInput.CameraIsTracking() )
318 {
319 pAngle = m_pInput.GetTracking()[0] * Math.RAD2DEG;
320 pAngle = Limit(-pAngle, pMin, pMax);
321
322 m_fLRAngleVel[0] = 0; // reset filter
323 }
324 else
325 {
326 // smooth value back to 0
327 pAngle = Math.SmoothCD(pAngle, 0, m_fLRAngleVel, 0.14, 1000, pDt);
328 // m_fLeftRightAngle = 0.9 * (1.0 - pDt);
329 }
330 }
331
332 return pAngle;
333 }
334
335
336
337 void StdFovUpdate(float pDt, out DayZPlayerCameraResult pOutResult)
338 {
340 ECameraZoomType zoomType = m_pPlayer.GetEyeZoomLevel();
341 m_fFovAbsolute = Math.SmoothCD(m_fFovAbsolute, GetDayZGame().GetFOVByZoomType(zoomType), m_fFovAbsVel, 0.1, 1000, pDt);
342
343 pOutResult.m_fFovAbsolute = m_fFovAbsolute;
344
346 if (!m_pPlayer.IsShootingFromCamera())
347 {
348 pOutResult.m_fShootFromCamera = 0.0;
349 }
350 }
351
352 override void SpawnCameraShakeProper(float strength, float radius, float smoothness, float radius_decay_speed)
353 {
354 m_CameraShake = new CameraShake(strength, radius, smoothness, radius_decay_speed);
355 }
356
357 override void OnUpdate(float pDt, out DayZPlayerCameraResult pOutResult)
358 {
359 if (!m_pPlayer || !PlayerBase.Cast(m_pPlayer))
360 {
361 Debug.Log("DayZPlayerCameraBase | OnUpdate | no player!");
362 return;
363 }
364
365 if (PlayerBase.Cast(m_pPlayer).GetCurrentCamera() != this)
366 {
367 //Print("DayZPlayerCameraBase | OnUpdate | unused camera! | " + this + "/" + PlayerBase.Cast(m_pPlayer).GetCurrentCamera());
368 return;
369 }
370
371 super.OnUpdate(pDt, pOutResult);
372 StdFovUpdate(pDt, pOutResult);
375 }
376
377 override void OnActivate(DayZPlayerCamera pPrevCamera, DayZPlayerCameraResult pPrevCameraResult)
378 {
379 InitCameraOnPlayer(true);
380 SetCameraPPDelay(pPrevCamera);
381
382 if (DayZPlayerCameraBase.Cast(pPrevCamera) && DayZPlayerCameraBase.Cast(pPrevCamera).IsCameraNV() && !IsCameraNV())
383 {
384 PPERequesterBank.GetRequester(PPERequesterBank.REQ_CAMERANV).Start( new Param1<int>(PPERequester_CameraNV.NV_TRANSITIVE) );
385 }
386
387 g_Game.GetCallQueue(CALL_CATEGORY_GUI).CallLater(SetCameraPP,m_CameraPPDelay*1000,false,true,this); // this takes care of weapon/optics postprocessing
388 DayZPlayerCameraOptics optic_camera;
389 if (DayZPlayerCamera.CastTo(optic_camera,pPrevCamera))
390 {
391 g_Game.GetCallQueue(CALL_CATEGORY_GUI).Call(PlayerBase.Cast(m_pPlayer).HideClothing,null,false);
392 }
393 }
394
396 {
398 }
399
400 override string GetCameraName()
401 {
402 return "DayZPlayerCameraBase";
403 }
404
406 {
407 }
408
409 void SetCameraNV(bool nightvision)
410 {
411 m_IsNightvision = nightvision;
412 }
413
415 {
416 return m_IsNightvision;
417 }
418
419 void SetCameraNVType(int type)
420 {
421 m_NightvisionType = type;
422 }
423
425 {
426 return m_NightvisionType;
427 }
428
430 {
431 if ( !player )
432 return;
433
434 bool nvStateChanged = player.IsNVGWorking() != IsCameraNV() || player.GetNVType() != GetCameraNVType();
435
436 // Re-resolve every tick so the effective variant follows the player between
437 // surface / tunnel / sandstorm without needing to toggle the NVG off and on.
438 // Only triggers a re-apply when the resolved variant actually differs, so a
439 // stable environment causes no extra SetCameraPP calls.
440 bool envChanged = IsCameraNV() && ResolveNVType(player.GetNVType(), player) != m_ResolvedNVType;
441
442 if ( nvStateChanged || envChanged )
443 {
444 SetCameraNV(player.IsNVGWorking());
445 SetCameraNVType(player.GetNVType());
446 SetCameraPP(true, this); // SetCameraPP re-resolves and stores m_ResolvedNVType
447 }
448 }
449
451 void SetCameraPP(bool state, DayZPlayerCamera launchedFrom)
452 {
453 PPERequesterBank.GetRequester(PPERequester_CameraADS).Stop();
454
455 if (IsCameraNV())
456 {
457 // Resolve the raw NV type to its underground / sandstorm variant before applying.
458 int resolvedType = ResolveNVType(GetCameraNVType(), PlayerBase.Cast(m_pPlayer));
459 m_ResolvedNVType = resolvedType;
460 SetNVPostprocess(resolvedType);
461 }
462 else
463 {
466 }
467
468 m_weaponUsed = Weapon_Base.Cast(m_pPlayer.GetEntityInHands());
469 if (m_weaponUsed)
470 {
471 m_weaponUsed.HideWeaponBarrel(false);
472 }
473 }
474
475 override float GetCurrentYaw()
476 {
477 return m_CurrentCameraYaw;
478 }
479
480 override float GetCurrentPitch()
481 {
483 }
484
485 override float GetCurrentRoll()
486 {
487 return m_CurrentCameraRoll;
488 }
489
490 void ForceFreelook(bool state)
491 {
492 m_bForceFreeLook = state;
493 }
494
495 //TODO - better handling of distinct occluder types
497 void SetNVPostprocess(int NVtype)
498 {
499 //remove ALL conflicting NV occluders first
500 Mission mission = g_Game.GetMission();
501 if (mission && mission.GetEffectWidgets())
502 mission.GetEffectWidgets().RemoveActiveEffects({EffectWidgetsTypes.NVG_OCCLUDER,EffectWidgetsTypes.PUMPKIN_OCCLUDER});
503
504 switch (NVtype)
505 {
506 case NVTypes.NONE:
507 {
508 PPERequesterBank.GetRequester(PPERequester_CameraNV).Stop();
509 }
510 break;
511
512 //night-vision modes
513 case NVTypes.NV_OPTICS_KAZUAR_NIGHT:
514 case NVTypes.NV_OPTICS_STARLIGHT_NIGHT:
515 case NVTypes.NV_OPTICS_ON:
516 {
517 PPERequesterBank.GetRequester(PPERequesterBank.REQ_CAMERANV).Start( new Param1<int>(PPERequester_CameraNV.NV_DEFAULT_OPTICS) );
518 }
519 break;
520
521 //daytime filter modes
522 case NVTypes.NV_OPTICS_KAZUAR_DAY:
523 case NVTypes.NV_OPTICS_STARLIGHT_DAY:
524 case NVTypes.NV_OPTICS_SANDSTORM_DAY:
525 {
526 PPERequesterBank.GetRequester(PPERequesterBank.REQ_CAMERANV).Start( new Param1<int>(PPERequester_CameraNV.NV_DAYTIME_OPTICS) );
527 }
528 break;
529
530 case NVTypes.NV_GOGGLES_OFF:
531 case NVTypes.NV_OPTICS_OFF:
532 {
533 PPERequesterBank.GetRequester(PPERequesterBank.REQ_CAMERANV).Start( new Param1<int>(PPERequester_CameraNV.NV_NO_BATTERY) );
534 }
535 break;
536
537 case NVTypes.NV_GOGGLES:
538 {
539 PPERequesterBank.GetRequester(PPERequesterBank.REQ_CAMERANV).Start( new Param1<int>(PPERequester_CameraNV.NV_DEFAULT_GLASSES) );
540 if (mission && mission.GetEffectWidgets())
541 mission.GetEffectWidgets().AddActiveEffects({EffectWidgetsTypes.NVG_OCCLUDER});
542 }
543 break;
544
545 case NVTypes.NV_GOGGLES_2D:
546 {
547 PPERequesterBank.GetRequester(PPERequesterBank.REQ_CAMERANV).Start( new Param1<int>(PPERequester_CameraNV.NV_DEFAULT_GLASSES) );
548 if (mission && mission.GetEffectWidgets())
549 mission.GetEffectWidgets().AddActiveEffects({EffectWidgetsTypes.NVG_OCCLUDER});
550 }
551 break;
552
553 case NVTypes.NV_PUMPKIN:
554 {
555 PPERequesterBank.GetRequester(PPERequesterBank.REQ_CAMERANV).Start( new Param1<int>(PPERequester_CameraNV.NV_PUMPKIN) );
556 if (mission && mission.GetEffectWidgets())
557 mission.GetEffectWidgets().AddActiveEffects({EffectWidgetsTypes.PUMPKIN_OCCLUDER});
558 }
559 break;
560
561 // ====================== OPTICS condition variants ======================
562 case NVTypes.NV_OPTICS_UNDERGROUND:
563 {
564 PPERequesterBank.GetRequester(PPERequesterBank.REQ_CAMERANV).Start( new Param1<int>(PPERequester_CameraNV.NV_UNDERGROUND_OPTICS) );
565 }
566 break;
567
568 case NVTypes.NV_OPTICS_SANDSTORM_NIGHT:
569 {
570 PPERequesterBank.GetRequester(PPERequesterBank.REQ_CAMERANV).Start( new Param1<int>(PPERequester_CameraNV.NV_SANDSTORM_OPTICS) );
571 }
572 break;
573
574 case NVTypes.NV_OPTICS_UNDERGROUND_SANDSTORM:
575 {
576 PPERequesterBank.GetRequester(PPERequesterBank.REQ_CAMERANV).Start( new Param1<int>(PPERequester_CameraNV.NV_UNDERGROUND_SANDSTORM_OPTICS) );
577 }
578 break;
579
580 // ====================== GLASSES condition variants =====================
581 case NVTypes.NV_GOGGLES_DAY:
582 {
583 PPERequesterBank.GetRequester(PPERequesterBank.REQ_CAMERANV).Start( new Param1<int>(PPERequester_CameraNV.NV_DAYTIME_GLASSES) );
584 if (mission && mission.GetEffectWidgets())
585 mission.GetEffectWidgets().AddActiveEffects({EffectWidgetsTypes.NVG_OCCLUDER});
586 }
587 break;
588
589 case NVTypes.NV_GOGGLES_UNDERGROUND:
590 {
591 PPERequesterBank.GetRequester(PPERequesterBank.REQ_CAMERANV).Start( new Param1<int>(PPERequester_CameraNV.NV_UNDERGROUND_GLASSES) );
592 if (mission && mission.GetEffectWidgets())
593 mission.GetEffectWidgets().AddActiveEffects({EffectWidgetsTypes.NVG_OCCLUDER});
594 }
595 break;
596
597 case NVTypes.NV_GOGGLES_SANDSTORM:
598 {
599 PPERequesterBank.GetRequester(PPERequesterBank.REQ_CAMERANV).Start( new Param1<int>(PPERequester_CameraNV.NV_SANDSTORM_GLASSES) );
600 if (mission && mission.GetEffectWidgets())
601 mission.GetEffectWidgets().AddActiveEffects({EffectWidgetsTypes.NVG_OCCLUDER});
602 }
603 break;
604
605 case NVTypes.NV_GOGGLES_UNDERGROUND_SANDSTORM:
606 {
607 PPERequesterBank.GetRequester(PPERequesterBank.REQ_CAMERANV).Start( new Param1<int>(PPERequester_CameraNV.NV_UNDERGROUND_SANDSTORM_GLASSES) );
608 if (mission && mission.GetEffectWidgets())
609 mission.GetEffectWidgets().AddActiveEffects({EffectWidgetsTypes.NVG_OCCLUDER});
610 }
611 break;
612
613 // ====================== PUMPKIN condition variants =====================
614 case NVTypes.NV_PUMPKIN_DAY:
615 {
616 PPERequesterBank.GetRequester(PPERequesterBank.REQ_CAMERANV).Start( new Param1<int>(PPERequester_CameraNV.NV_DAYTIME_PUMPKIN) );
617 if (mission && mission.GetEffectWidgets())
618 mission.GetEffectWidgets().AddActiveEffects({EffectWidgetsTypes.PUMPKIN_OCCLUDER});
619 }
620 break;
621
622 case NVTypes.NV_PUMPKIN_UNDERGROUND:
623 {
624 PPERequesterBank.GetRequester(PPERequesterBank.REQ_CAMERANV).Start( new Param1<int>(PPERequester_CameraNV.NV_UNDERGROUND_PUMPKIN) );
625 if (mission && mission.GetEffectWidgets())
626 mission.GetEffectWidgets().AddActiveEffects({EffectWidgetsTypes.PUMPKIN_OCCLUDER});
627 }
628 break;
629
630 case NVTypes.NV_PUMPKIN_SANDSTORM:
631 {
632 PPERequesterBank.GetRequester(PPERequesterBank.REQ_CAMERANV).Start( new Param1<int>(PPERequester_CameraNV.NV_SANDSTORM_PUMPKIN) );
633 if (mission && mission.GetEffectWidgets())
634 mission.GetEffectWidgets().AddActiveEffects({EffectWidgetsTypes.PUMPKIN_OCCLUDER});
635 }
636 break;
637
638 case NVTypes.NV_PUMPKIN_UNDERGROUND_SANDSTORM:
639 {
640 PPERequesterBank.GetRequester(PPERequesterBank.REQ_CAMERANV).Start( new Param1<int>(PPERequester_CameraNV.NV_UNDERGROUND_SANDSTORM_PUMPKIN) );
641 if (mission && mission.GetEffectWidgets())
642 mission.GetEffectWidgets().AddActiveEffects({EffectWidgetsTypes.PUMPKIN_OCCLUDER});
643 }
644 break;
645 }
646
647 if (PlayerBaseClient.Cast(m_pPlayer))
648 {
649 PlayerBaseClient.Cast(m_pPlayer).SwitchPersonalLight(NVtype < 1);
650 }
651 }
652
653 void InitCameraOnPlayer(bool force = false)
654 {
655 PlayerBase player = PlayerBase.Cast(m_pPlayer);
656 if (!player.GetCurrentPlayerCamera() || (force && player.GetCurrentPlayerCamera() != this))
657 {
658 player.OnCameraChanged(this);
659 }
660 }
661
662 int ResolveNVType(int rawType, PlayerBase player)
663 {
664 if (!player)
665 return rawType;
666
667 // Only the generic "device is on" states get environment upgrades. OFF states,
668 // NONE, and the explicit Kazuar/Starlight day/night variants keep their own handling.
669 bool isOpticsOn = (rawType == NVTypes.NV_OPTICS_ON || rawType == NVTypes.NV_OPTICS_KAZUAR_DAY || rawType == NVTypes.NV_OPTICS_KAZUAR_NIGHT || rawType == NVTypes.NV_OPTICS_STARLIGHT_DAY || rawType == NVTypes.NV_OPTICS_STARLIGHT_NIGHT);
670 bool isGogglesOn = (rawType == NVTypes.NV_GOGGLES || rawType == NVTypes.NV_GOGGLES_2D);
671 bool isPumpkinOn = (rawType == NVTypes.NV_PUMPKIN);
672
673 if (!isOpticsOn && !isGogglesOn && !isPumpkinOn)
674 return rawType;
675
676 bool underground = IsPlayerUnderground(player);
677 bool sandstorm = IsSandstormActiveForPlayer(player);
678
679
680 // Nothing special about the environment -> keep the raw type.
681 if (!underground && !sandstorm)
682 return rawType;
683
684 if (isOpticsOn)
685 {
686 bool isNight = (rawType == NVTypes.NV_OPTICS_ON || rawType == NVTypes.NV_OPTICS_KAZUAR_NIGHT || rawType == NVTypes.NV_OPTICS_STARLIGHT_NIGHT);
687 if (underground && sandstorm)
688 {
689 return NVTypes.NV_OPTICS_UNDERGROUND_SANDSTORM;
690 }
691
692 if (underground)
693 {
694 return NVTypes.NV_OPTICS_UNDERGROUND;
695 }
696
697 if (isNight)
698 return NVTypes.NV_OPTICS_SANDSTORM_NIGHT;
699 return NVTypes.NV_OPTICS_SANDSTORM_DAY;
700 }
701
702 if (isGogglesOn)
703 {
704 if (underground && sandstorm)
705 return NVTypes.NV_GOGGLES_UNDERGROUND_SANDSTORM;
706 if (underground)
707 return NVTypes.NV_GOGGLES_UNDERGROUND;
708 return NVTypes.NV_GOGGLES_SANDSTORM;
709 }
710
711 // isPumpkinOn
712 if (underground && sandstorm)
713 return NVTypes.NV_PUMPKIN_UNDERGROUND_SANDSTORM;
714 if (underground)
715 return NVTypes.NV_PUMPKIN_UNDERGROUND;
716 return NVTypes.NV_PUMPKIN_SANDSTORM;
717 }
718
723 {
724 if (!player)
725 return false;
726
727 // Prefer a dedicated check if available:
728 // return player.IsUnderground();
729 // Fallback using the roof/shadow signals shown on the debug overlay:
730 return player.GetUndergroundPresence() != EUndergroundPresence.NONE;
731 }
732
736 {
737 if (!player || !g_Game)
738 return false;
739
740 Weather weather = g_Game.GetWeather();
741 if (!weather)
742 return false;
743
745 if (!sandstorm || !sandstorm.IsActive())
746 return false;
747
748 float intensity = sandstorm.GetIntensity(player.GetPosition());
749 return intensity > SANDSTORM_NVG_THRESHOLD;
750 }
751
752 protected float m_fLRAngleVel[1];
753 protected float m_fUDAngleVel[1];
754 protected float m_fFovAbsVel[1];
755 protected float m_fFovAbsolute;
756 protected bool m_bForceFreeLook;
757 protected float m_WeaponSwayModifier;
758 protected float m_CameraPPDelay;
759
760 protected float m_CurrentCameraYaw;
761 protected float m_CurrentCameraPitch;
762 protected float m_CurrentCameraRoll;
763
765 protected bool m_IsNightvision;
766 protected int m_NightvisionType;
767 protected int m_ResolvedNVType;
768}
DayZGame g_Game
Определения DayZGame.c:4074
DayZGame GetDayZGame()
Определения DayZGame.c:4076
float m_fUDAngleVel[1]
Определения DayZPlayerCamera_Base.c:753
float UpdateLRAngleUnlocked(out float pAngle, out float pAngleAdd, float pMin, float pMax, float pDt)
Определения DayZPlayerCamera_Base.c:212
ref CameraShake m_CameraShake
Определения DayZPlayerCamera_Base.c:96
bool IsSandstormActiveForPlayer(PlayerBase player)
Определения DayZPlayerCamera_Base.c:735
float m_CurrentCameraYaw
Определения DayZPlayerCamera_Base.c:760
const float SANDSTORM_NVG_THRESHOLD
Определения DayZPlayerCamera_Base.c:92
bool m_IsNightvision
Определения DayZPlayerCamera_Base.c:765
float m_CurrentCameraPitch
Определения DayZPlayerCamera_Base.c:761
float UpdateUDAngleUnlocked(out float pAngle, out float pAngleAdd, float pMin, float pMax, float pDt)
Определения DayZPlayerCamera_Base.c:150
int m_NightvisionType
Определения DayZPlayerCamera_Base.c:766
Weapon_Base m_weaponUsed
Определения DayZPlayerCamera_Base.c:94
void StdFovUpdate(float pDt, out DayZPlayerCameraResult pOutResult)
Определения DayZPlayerCamera_Base.c:337
int m_ResolvedNVType
Определения DayZPlayerCamera_Base.c:767
NVTypes
Определения DayZPlayerCamera_Base.c:55
@ NV_OPTICS_UNDERGROUND_SANDSTORM
Определения DayZPlayerCamera_Base.c:72
@ NV_OPTICS_SANDSTORM_NIGHT
Определения DayZPlayerCamera_Base.c:71
@ NV_PUMPKIN_SANDSTORM
Определения DayZPlayerCamera_Base.c:83
@ NV_GOGGLES_OFF
Определения DayZPlayerCamera_Base.c:59
@ NV_PUMPKIN
Определения DayZPlayerCamera_Base.c:62
@ NV_PUMPKIN_UNDERGROUND_SANDSTORM
Определения DayZPlayerCamera_Base.c:84
@ NV_GOGGLES_UNDERGROUND
Определения DayZPlayerCamera_Base.c:76
@ NV_OPTICS_OFF
Определения DayZPlayerCamera_Base.c:61
@ NV_GOGGLES_DAY
Определения DayZPlayerCamera_Base.c:75
@ NV_OPTICS_ON
Определения DayZPlayerCamera_Base.c:60
@ NV_GOGGLES_UNDERGROUND_SANDSTORM
Определения DayZPlayerCamera_Base.c:78
@ NV_OPTICS_STARLIGHT_DAY
Определения DayZPlayerCamera_Base.c:65
@ NV_OPTICS_KAZUAR_DAY
Определения DayZPlayerCamera_Base.c:63
@ NV_GOGGLES
Определения DayZPlayerCamera_Base.c:57
@ NV_OPTICS_UNDERGROUND
Определения DayZPlayerCamera_Base.c:69
@ NV_GOGGLES_2D
Определения DayZPlayerCamera_Base.c:58
@ NV_PUMPKIN_DAY
Определения DayZPlayerCamera_Base.c:81
@ NV_PUMPKIN_UNDERGROUND
Определения DayZPlayerCamera_Base.c:82
@ NV_OPTICS_STARLIGHT_NIGHT
Определения DayZPlayerCamera_Base.c:66
@ NV_OPTICS_SANDSTORM_DAY
Определения DayZPlayerCamera_Base.c:70
@ NV_GOGGLES_SANDSTORM
Определения DayZPlayerCamera_Base.c:77
@ NV_OPTICS_KAZUAR_NIGHT
Определения DayZPlayerCamera_Base.c:64
float m_CurrentCameraRoll
Определения DayZPlayerCamera_Base.c:762
bool IsCameraNV()
Определения DayZPlayerCamera_Base.c:414
float fixAngle_PI_PI(float pAngle)
Определения DayZPlayerCamera_Base.c:19
float UpdateLRAngle(float pAngle, float pMin, float pMax, float pDt)
Определения DayZPlayerCamera_Base.c:303
int ResolveNVType(int rawType, PlayerBase player)
Определения DayZPlayerCamera_Base.c:662
bool m_bForceFreeLook
Определения DayZPlayerCamera_Base.c:756
float m_CameraPPDelay
Определения DayZPlayerCamera_Base.c:758
float GetWeaponSwayModifier()
Определения DayZPlayerCamera_Base.c:395
void DayZPlayerCameraBase(DayZPlayer pPlayer, HumanInputController pInput)
constructor must be same
Определения DayZPlayerCamera_Base.c:99
void SetNVPostprocess(int NVtype)
DayZPlayerCameraOptics handles this separately, otherwise it takes active NVType from PlayerBase::Get...
Определения DayZPlayerCamera_Base.c:497
void InitCameraOnPlayer(bool force=false)
Определения DayZPlayerCamera_Base.c:653
void HandleShoulderCameraOverride(HumanInputController pInput)
Определения DayZPlayerCamera_Base.c:123
void SetCameraPP(bool state, DayZPlayerCamera launchedFrom)
by default sets camera PP to zero, regardless of parameter. Override if needed.
Определения DayZPlayerCamera_Base.c:451
float fixAngle_180_180(float pAngle)
Определения DayZPlayerCamera_Base.c:36
void SetCameraNV(bool nightvision)
Определения DayZPlayerCamera_Base.c:409
float m_WeaponSwayModifier
Определения DayZPlayerCamera_Base.c:757
enum NVTypes CONST_NEARPLANE_OPTICS_MIN
bool IsPlayerUnderground(PlayerBase player)
Определения DayZPlayerCamera_Base.c:722
void UpdateCameraNV(PlayerBase player)
Определения DayZPlayerCamera_Base.c:429
void SetCameraNVType(int type)
Определения DayZPlayerCamera_Base.c:419
float m_fFovAbsVel[1]
Определения DayZPlayerCamera_Base.c:754
int GetCameraNVType()
Определения DayZPlayerCamera_Base.c:424
void ForceFreelook(bool state)
Определения DayZPlayerCamera_Base.c:490
ItemOptics m_opticsUsed
Определения DayZPlayerCamera_Base.c:95
float UpdateUDAngle(out float pAngle, out float pAngleAdd, float pMin, float pMax, float pDt)
Определения DayZPlayerCamera_Base.c:251
HumanCommandWeapons m_CommandWeapons
Определения DayZPlayerCamera_Base.c:764
void ProcessCameraShake(float delta, out float leftRight, out float upDown)
Определения DayZPlayerCamera_Base.c:129
float m_fLRAngleVel[1]
Определения DayZPlayerCamera_Base.c:752
void DayZPlayerCameraOptics(DayZPlayer pPlayer, HumanInputController pInput)
Определения DayZPlayerCameraIronsights.c:367
override void Init()
single position related to each particular attachment group
Определения DayZPlayerCameraIronsights.c:374
Mission mission
Определения DisplayStatus.c:28
ECameraZoomType
Определения ECameraZoomType.c:2
const int MAX
Определения EnConvert.c:27
Icon x
Icon y
void OnActivate()
Определения Trap_LandMine.c:67
EUndergroundPresence
Определения UndergroundHandlerClient.c:2
Определения CameraShake.c:2
override void SetCameraPP(bool state, DayZPlayerCamera launchedFrom)
Определения DayZPlayerCameraIronsights.c:256
override void SetCameraPPDelay(DayZPlayerCamera pPrevCamera)
Определения DayZPlayerCameraIronsights.c:322
override string GetCameraName()
Определения DayZPlayerCamera1stPerson.c:85
this is main camera class
Определения DayZPlayerCamera1stPerson.c:5
Определения DayZPlayerImplement.c:87
static void Log(string message=LOG_DEFAULT, string plugin=LOG_DEFAULT, string author=LOG_DEFAULT, string label=LOG_DEFAULT, string entity=LOG_DEFAULT)
Prints debug message with normal prio.
Определения 3_Game/DayZ/tools/Debug.c:183
Определения 3_Game/DayZ/tools/Debug.c:2
Определения human.c:1027
Определения human.c:18
Определения ItemOptics.c:2
Определения EnMath.c:7
Mission class.
Определения gameplay.c:686
Определения PlayerBaseClient.c:2
proto native float GetIntensity(vector worldPosition)
Returns the intensity of the sandstorm at a given position in world space. The sandstorm must be acti...
proto native bool IsActive()
Returns whether sandstorm is currently active.
shorthand
Определения BoltActionRifle_Base.c:6
proto native Sandstorm GetSandstorm()
Returns the sandstorm phenomenon weather controller.
Определения Weather.c:168
float GetCurrentRoll()
Определения dayzplayer.c:107
float GetCurrentYaw()
Определения dayzplayer.c:97
void SpawnCameraShakeProper(float strength, float radius, float smoothness, float radius_decay_speed)
Определения DayZPlayerCamera_Base.c:352
DayZPlayer m_pPlayer
data
Определения dayzplayer.c:135
HumanInputController m_pInput
human input
Определения dayzplayer.c:136
float GetCurrentPitch()
Определения dayzplayer.c:102
class DayZPlayerCameraResult DayZPlayerCamera(DayZPlayer pPlayer, HumanInputController pInput)
Определения dayzplayer.c:56
float m_fFovAbsolute
fov absolute value override - -1.0 default, if set - overrides absolute fov setting
Определения dayzplayer.c:60
static const float PI2
Определения EnMath.c:13
static const float RAD2DEG
Определения EnMath.c:16
static proto float AbsFloat(float f)
Returns absolute value.
static proto float SmoothCD(float val, float target, inout float velocity[], float smoothTime, float maxVelocity, float dt)
Does the CD smoothing function - easy in | easy out / S shaped smoothing.
static const float PI
Определения EnMath.c:12
@ NONE
body is not in simulation, nor in collision world
Определения SimulationState.c:15
Limit
proto native void OnUpdate()
Определения 3_Game/DayZ/tools/tools.c:349
const int CALL_CATEGORY_GUI
Определения 3_Game/DayZ/tools/tools.c:9
HumanInputControllerOverrideType
Определения human.c:8