DayZPlayerCamera1stPerson.c
// *************************************************************************************
// ! 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);
}
}