123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- // *************************************************************************************
- // ! DayZPlayerCamera1stPerson - 1st person camera
- // *************************************************************************************
- class DayZPlayerCamera1stPerson extends DayZPlayerCameraBase
- {
- static const float CONST_UD_MIN = -85.0; //!< down limit
- static const float CONST_UD_MAX = 85.0; //!< up limit
- static const float CONST_LR_MIN = -160.0; //!< down limit
- static const float CONST_LR_MAX = 160.0; //!< up limit
- void DayZPlayerCamera1stPerson(DayZPlayer pPlayer, HumanInputController pInput)
- {
- m_iBoneIndex = pPlayer.GetBoneIndexByName("Head");
- if (m_iBoneIndex == -1)
- {
- Print("DayZPlayerCamera1stPerson: main bone not found");
- }
-
- m_OffsetLS = "0.04 0.04 0"; //x - up, y - forward
- }
-
- //
- override void OnActivate(DayZPlayerCamera pPrevCamera, DayZPlayerCameraResult pPrevCameraResult)
- {
- super.OnActivate(pPrevCamera, pPrevCameraResult);
- if (pPrevCamera)
- {
- vector baseAngles = pPrevCamera.GetBaseAngles();
- m_fUpDownAngle = baseAngles[0];
- m_fLeftRightAngle = baseAngles[1];
- vector addAngles = pPrevCamera.GetAdditiveAngles();
- m_fUpDownAngleAdd = addAngles[0];
- m_fLeftRightAngleAdd = addAngles[1];
- }
- }
- //
- override void OnUpdate(float pDt, out DayZPlayerCameraResult pOutResult)
- {
- //! update angles from input
- m_CurrentCameraYaw = UpdateLRAngleUnlocked(m_fLeftRightAngle, m_fLeftRightAngleAdd, CONST_LR_MIN, CONST_LR_MAX, pDt);
- m_CurrentCameraPitch = UpdateUDAngleUnlocked(m_fUpDownAngle, m_fUpDownAngleAdd, CONST_UD_MIN, CONST_UD_MAX, pDt);
-
- //!
- Math3D.YawPitchRollMatrix(GetCurrentOrientation(), pOutResult.m_CameraTM);
- pOutResult.m_CameraTM[3] = m_OffsetLS;
- pOutResult.m_iDirectBone = m_iBoneIndex;
- pOutResult.m_iDirectBoneMode = 1;
- pOutResult.m_fUseHeading = 1.0;
- pOutResult.m_fInsideCamera = 1.0;
- pOutResult.m_fNearPlane = 0.04; //0.07 default
-
- ProcessCameraShake(pDt, m_fLeftRightAngle, m_fUpDownAngleAdd);
-
- InitCameraOnPlayer();
- StdFovUpdate(pDt, pOutResult);
- UpdateCameraNV(PlayerBase.Cast(m_pPlayer));
- }
- override vector GetBaseAngles()
- {
- vector a;
- a[0] = m_fUpDownAngle;
- a[1] = m_fLeftRightAngle;
- a[2] = 0;
- return a;
- }
- override vector GetAdditiveAngles()
- {
- vector a;
- a[0] = m_fUpDownAngleAdd;
- a[1] = m_fLeftRightAngleAdd;
- a[2] = 0;
- return a;
- }
-
- override string GetCameraName()
- {
- return "DayZPlayerCamera1stPerson";
- }
-
- protected int m_iBoneIndex; //!< main bone
- protected vector m_OffsetLS; //!< position offset
- protected float m_fUpDownAngle; //!< up down angle in rad
- protected float m_fUpDownAngleAdd; //!< up down angle in rad
- protected float m_fLeftRightAngle; //!< left right angle in rad (in freelook only)
- protected float m_fLeftRightAngleAdd; //!< left right angle in rad (in freelook only)
- }
- // *************************************************************************************
- // ! DayZPlayerCamera1stPersonUnconscious - first person only unconscious
- // *************************************************************************************
- class DayZPlayerCamera1stPersonUnconscious extends DayZPlayerCamera1stPerson
- {
- void DayZPlayerCamera1stPersonUnconscious(DayZPlayer pPlayer, HumanInputController pInput)
- {
- m_iBoneIndex = pPlayer.GetBoneIndexByName ("Head");
- }
-
- override void OnUpdate(float pDt, out DayZPlayerCameraResult pOutResult)
- {
- super.OnUpdate(pDt, pOutResult);
- pOutResult.m_iDirectBone = m_iBoneIndex;
- pOutResult.m_iDirectBoneMode = 4;
- pOutResult.m_fUseHeading = 0.0;
-
- vector rot;
- rot[0] = 0;
- rot[1] = 90;
- rot[2] = 0;
-
- Math3D.YawPitchRollMatrix(rot, pOutResult.m_CameraTM);
- }
- }
|