2float Limit(
float pV,
float pMin,
float pMax)
4 if (pV >= pMin && pV <= pMax)
143 if ( player && player.IsNVGWorking() !=
IsCameraNV() )
172 pAngleAdd = pAngle + pAngleAdd - target;
178 float pitch = pAngle + pAngleAdd;
179 float downLimit, upLimit, leftLimit, rightLimit;
180 player.GetLookLimits(downLimit, upLimit, leftLimit, rightLimit);
182 if (pitch < (upLimit + 1) && pitch > (downLimit - 1))
190 pMin =
Math.
SmoothCD(pitch, downLimit, velMin, 0.2, 1000, pDt);
193 pMax =
Math.
SmoothCD(pitch, upLimit, velMax, 0.2, 1000, pDt);
206 pAngle =
Limit(pAngle, pMin, pMax);
207 pAngleAdd =
Limit(pAngle + pAngleAdd, pMin, pMax) - pAngle;
209 return pAngle + pAngleAdd;
227 pAngleAdd = pAngle + pAngleAdd - target;
242 pAngleAdd = pAngleAdd + pAngle;
245 pAngle =
Limit(pAngle, pMin, pMax);
246 pAngleAdd =
Limit(pAngle + pAngleAdd, pMin, pMax) - pAngle;
248 return pAngle + pAngleAdd;
251 float UpdateUDAngle(out
float pAngle, out
float pAngleAdd,
float pMin,
float pMax,
float pDt)
261 pAngleAdd = pAngle + pAngleAdd - aimingUDAngle;
262 pAngle = aimingUDAngle;
271 pAngleAdd =
Limit(pAngleAdd, pMin, pMax);
280 pAngleAdd =
Limit(pAngleAdd, pMin, pMax);
288 pAngle =
Limit(pAngle, pMin, pMax);
300 return Limit(pAngle + pAngleAdd, pMin, pMax);
310 pAngle =
Limit(pAngle, pMin, pMax);
320 pAngle =
Limit(-pAngle, pMin, pMax);
348 pOutResult.m_fShootFromCamera = 0.0;
361 Debug.
Log(
"DayZPlayerCameraBase | OnUpdate | no player!");
371 super.OnUpdate(pDt, pOutResult);
384 PPERequesterBank.GetRequester(PPERequesterBank.REQ_CAMERANV).Start(
new Param1<int>(PPERequester_CameraNV.NV_TRANSITIVE) );
402 return "DayZPlayerCameraBase";
442 if ( nvStateChanged || envChanged )
453 PPERequesterBank.GetRequester(PPERequester_CameraADS).Stop();
502 mission.GetEffectWidgets().RemoveActiveEffects({EffectWidgetsTypes.NVG_OCCLUDER,EffectWidgetsTypes.PUMPKIN_OCCLUDER});
508 PPERequesterBank.GetRequester(PPERequester_CameraNV).Stop();
513 case NVTypes.NV_OPTICS_KAZUAR_NIGHT:
514 case NVTypes.NV_OPTICS_STARLIGHT_NIGHT:
517 PPERequesterBank.GetRequester(PPERequesterBank.REQ_CAMERANV).Start(
new Param1<int>(PPERequester_CameraNV.NV_DEFAULT_OPTICS) );
522 case NVTypes.NV_OPTICS_KAZUAR_DAY:
523 case NVTypes.NV_OPTICS_STARLIGHT_DAY:
524 case NVTypes.NV_OPTICS_SANDSTORM_DAY:
526 PPERequesterBank.GetRequester(PPERequesterBank.REQ_CAMERANV).Start(
new Param1<int>(PPERequester_CameraNV.NV_DAYTIME_OPTICS) );
533 PPERequesterBank.GetRequester(PPERequesterBank.REQ_CAMERANV).Start(
new Param1<int>(PPERequester_CameraNV.NV_NO_BATTERY) );
539 PPERequesterBank.GetRequester(PPERequesterBank.REQ_CAMERANV).Start(
new Param1<int>(PPERequester_CameraNV.NV_DEFAULT_GLASSES) );
541 mission.GetEffectWidgets().AddActiveEffects({EffectWidgetsTypes.NVG_OCCLUDER});
547 PPERequesterBank.GetRequester(PPERequesterBank.REQ_CAMERANV).Start(
new Param1<int>(PPERequester_CameraNV.NV_DEFAULT_GLASSES) );
549 mission.GetEffectWidgets().AddActiveEffects({EffectWidgetsTypes.NVG_OCCLUDER});
555 PPERequesterBank.GetRequester(PPERequesterBank.REQ_CAMERANV).Start(
new Param1<int>(PPERequester_CameraNV.NV_PUMPKIN) );
557 mission.GetEffectWidgets().AddActiveEffects({EffectWidgetsTypes.PUMPKIN_OCCLUDER});
562 case NVTypes.NV_OPTICS_UNDERGROUND:
564 PPERequesterBank.GetRequester(PPERequesterBank.REQ_CAMERANV).Start(
new Param1<int>(PPERequester_CameraNV.NV_UNDERGROUND_OPTICS) );
568 case NVTypes.NV_OPTICS_SANDSTORM_NIGHT:
570 PPERequesterBank.GetRequester(PPERequesterBank.REQ_CAMERANV).Start(
new Param1<int>(PPERequester_CameraNV.NV_SANDSTORM_OPTICS) );
574 case NVTypes.NV_OPTICS_UNDERGROUND_SANDSTORM:
576 PPERequesterBank.GetRequester(PPERequesterBank.REQ_CAMERANV).Start(
new Param1<int>(PPERequester_CameraNV.NV_UNDERGROUND_SANDSTORM_OPTICS) );
583 PPERequesterBank.GetRequester(PPERequesterBank.REQ_CAMERANV).Start(
new Param1<int>(PPERequester_CameraNV.NV_DAYTIME_GLASSES) );
585 mission.GetEffectWidgets().AddActiveEffects({EffectWidgetsTypes.NVG_OCCLUDER});
589 case NVTypes.NV_GOGGLES_UNDERGROUND:
591 PPERequesterBank.GetRequester(PPERequesterBank.REQ_CAMERANV).Start(
new Param1<int>(PPERequester_CameraNV.NV_UNDERGROUND_GLASSES) );
593 mission.GetEffectWidgets().AddActiveEffects({EffectWidgetsTypes.NVG_OCCLUDER});
597 case NVTypes.NV_GOGGLES_SANDSTORM:
599 PPERequesterBank.GetRequester(PPERequesterBank.REQ_CAMERANV).Start(
new Param1<int>(PPERequester_CameraNV.NV_SANDSTORM_GLASSES) );
601 mission.GetEffectWidgets().AddActiveEffects({EffectWidgetsTypes.NVG_OCCLUDER});
605 case NVTypes.NV_GOGGLES_UNDERGROUND_SANDSTORM:
607 PPERequesterBank.GetRequester(PPERequesterBank.REQ_CAMERANV).Start(
new Param1<int>(PPERequester_CameraNV.NV_UNDERGROUND_SANDSTORM_GLASSES) );
609 mission.GetEffectWidgets().AddActiveEffects({EffectWidgetsTypes.NVG_OCCLUDER});
616 PPERequesterBank.GetRequester(PPERequesterBank.REQ_CAMERANV).Start(
new Param1<int>(PPERequester_CameraNV.NV_DAYTIME_PUMPKIN) );
618 mission.GetEffectWidgets().AddActiveEffects({EffectWidgetsTypes.PUMPKIN_OCCLUDER});
622 case NVTypes.NV_PUMPKIN_UNDERGROUND:
624 PPERequesterBank.GetRequester(PPERequesterBank.REQ_CAMERANV).Start(
new Param1<int>(PPERequester_CameraNV.NV_UNDERGROUND_PUMPKIN) );
626 mission.GetEffectWidgets().AddActiveEffects({EffectWidgetsTypes.PUMPKIN_OCCLUDER});
630 case NVTypes.NV_PUMPKIN_SANDSTORM:
632 PPERequesterBank.GetRequester(PPERequesterBank.REQ_CAMERANV).Start(
new Param1<int>(PPERequester_CameraNV.NV_SANDSTORM_PUMPKIN) );
634 mission.GetEffectWidgets().AddActiveEffects({EffectWidgetsTypes.PUMPKIN_OCCLUDER});
638 case NVTypes.NV_PUMPKIN_UNDERGROUND_SANDSTORM:
640 PPERequesterBank.GetRequester(PPERequesterBank.REQ_CAMERANV).Start(
new Param1<int>(PPERequester_CameraNV.NV_UNDERGROUND_SANDSTORM_PUMPKIN) );
642 mission.GetEffectWidgets().AddActiveEffects({EffectWidgetsTypes.PUMPKIN_OCCLUDER});
649 PlayerBaseClient.Cast(
m_pPlayer).SwitchPersonalLight(NVtype < 1);
656 if (!player.GetCurrentPlayerCamera() || (force && player.GetCurrentPlayerCamera() !=
this))
658 player.OnCameraChanged(
this);
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);
673 if (!isOpticsOn && !isGogglesOn && !isPumpkinOn)
681 if (!underground && !sandstorm)
686 bool isNight = (rawType ==
NVTypes.NV_OPTICS_ON || rawType ==
NVTypes.NV_OPTICS_KAZUAR_NIGHT || rawType ==
NVTypes.NV_OPTICS_STARLIGHT_NIGHT);
687 if (underground && sandstorm)
689 return NVTypes.NV_OPTICS_UNDERGROUND_SANDSTORM;
694 return NVTypes.NV_OPTICS_UNDERGROUND;
698 return NVTypes.NV_OPTICS_SANDSTORM_NIGHT;
699 return NVTypes.NV_OPTICS_SANDSTORM_DAY;
704 if (underground && sandstorm)
705 return NVTypes.NV_GOGGLES_UNDERGROUND_SANDSTORM;
707 return NVTypes.NV_GOGGLES_UNDERGROUND;
708 return NVTypes.NV_GOGGLES_SANDSTORM;
712 if (underground && sandstorm)
713 return NVTypes.NV_PUMPKIN_UNDERGROUND_SANDSTORM;
715 return NVTypes.NV_PUMPKIN_UNDERGROUND;
716 return NVTypes.NV_PUMPKIN_SANDSTORM;
745 if (!sandstorm || !sandstorm.
IsActive())
748 float intensity = sandstorm.
GetIntensity(player.GetPosition());
float UpdateLRAngleUnlocked(out float pAngle, out float pAngleAdd, float pMin, float pMax, float pDt)
ref CameraShake m_CameraShake
bool IsSandstormActiveForPlayer(PlayerBase player)
const float SANDSTORM_NVG_THRESHOLD
float m_CurrentCameraPitch
float UpdateUDAngleUnlocked(out float pAngle, out float pAngleAdd, float pMin, float pMax, float pDt)
void StdFovUpdate(float pDt, out DayZPlayerCameraResult pOutResult)
@ NV_OPTICS_UNDERGROUND_SANDSTORM
@ NV_OPTICS_SANDSTORM_NIGHT
@ NV_PUMPKIN_UNDERGROUND_SANDSTORM
@ NV_GOGGLES_UNDERGROUND_SANDSTORM
@ NV_OPTICS_STARLIGHT_DAY
@ NV_OPTICS_STARLIGHT_NIGHT
@ NV_OPTICS_SANDSTORM_DAY
float m_CurrentCameraRoll
float fixAngle_PI_PI(float pAngle)
float UpdateLRAngle(float pAngle, float pMin, float pMax, float pDt)
int ResolveNVType(int rawType, PlayerBase player)
float GetWeaponSwayModifier()
void DayZPlayerCameraBase(DayZPlayer pPlayer, HumanInputController pInput)
constructor must be same
void SetNVPostprocess(int NVtype)
DayZPlayerCameraOptics handles this separately, otherwise it takes active NVType from PlayerBase::Get...
void InitCameraOnPlayer(bool force=false)
void HandleShoulderCameraOverride(HumanInputController pInput)
void SetCameraPP(bool state, DayZPlayerCamera launchedFrom)
by default sets camera PP to zero, regardless of parameter. Override if needed.
float fixAngle_180_180(float pAngle)
void SetCameraNV(bool nightvision)
float m_WeaponSwayModifier
enum NVTypes CONST_NEARPLANE_OPTICS_MIN
bool IsPlayerUnderground(PlayerBase player)
void UpdateCameraNV(PlayerBase player)
void SetCameraNVType(int type)
void ForceFreelook(bool state)
float UpdateUDAngle(out float pAngle, out float pAngleAdd, float pMin, float pMax, float pDt)
HumanCommandWeapons m_CommandWeapons
void ProcessCameraShake(float delta, out float leftRight, out float upDown)
void DayZPlayerCameraOptics(DayZPlayer pPlayer, HumanInputController pInput)
override void Init()
single position related to each particular attachment group
override void SetCameraPP(bool state, DayZPlayerCamera launchedFrom)
override void SetCameraPPDelay(DayZPlayerCamera pPrevCamera)
override string GetCameraName()
this is main camera class
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.
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.
proto native Sandstorm GetSandstorm()
Returns the sandstorm phenomenon weather controller.
void SpawnCameraShakeProper(float strength, float radius, float smoothness, float radius_decay_speed)
HumanInputController m_pInput
human input
class DayZPlayerCameraResult DayZPlayerCamera(DayZPlayer pPlayer, HumanInputController pInput)
float m_fFovAbsolute
fov absolute value override - -1.0 default, if set - overrides absolute fov setting
static const float RAD2DEG
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.
@ NONE
body is not in simulation, nor in collision world
HumanInputControllerOverrideType