dayzplayercamera1stperson.c 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. // *************************************************************************************
  2. // ! DayZPlayerCamera1stPerson - 1st person camera
  3. // *************************************************************************************
  4. class DayZPlayerCamera1stPerson extends DayZPlayerCameraBase
  5. {
  6. static const float CONST_UD_MIN = -85.0; //!< down limit
  7. static const float CONST_UD_MAX = 85.0; //!< up limit
  8. static const float CONST_LR_MIN = -160.0; //!< down limit
  9. static const float CONST_LR_MAX = 160.0; //!< up limit
  10. void DayZPlayerCamera1stPerson(DayZPlayer pPlayer, HumanInputController pInput)
  11. {
  12. m_iBoneIndex = pPlayer.GetBoneIndexByName("Head");
  13. if (m_iBoneIndex == -1)
  14. {
  15. Print("DayZPlayerCamera1stPerson: main bone not found");
  16. }
  17. m_OffsetLS = "0.04 0.04 0"; //x - up, y - forward
  18. }
  19. //
  20. override void OnActivate(DayZPlayerCamera pPrevCamera, DayZPlayerCameraResult pPrevCameraResult)
  21. {
  22. super.OnActivate(pPrevCamera, pPrevCameraResult);
  23. if (pPrevCamera)
  24. {
  25. vector baseAngles = pPrevCamera.GetBaseAngles();
  26. m_fUpDownAngle = baseAngles[0];
  27. m_fLeftRightAngle = baseAngles[1];
  28. vector addAngles = pPrevCamera.GetAdditiveAngles();
  29. m_fUpDownAngleAdd = addAngles[0];
  30. m_fLeftRightAngleAdd = addAngles[1];
  31. }
  32. }
  33. //
  34. override void OnUpdate(float pDt, out DayZPlayerCameraResult pOutResult)
  35. {
  36. //! update angles from input
  37. m_CurrentCameraYaw = UpdateLRAngleUnlocked(m_fLeftRightAngle, m_fLeftRightAngleAdd, CONST_LR_MIN, CONST_LR_MAX, pDt);
  38. m_CurrentCameraPitch = UpdateUDAngleUnlocked(m_fUpDownAngle, m_fUpDownAngleAdd, CONST_UD_MIN, CONST_UD_MAX, pDt);
  39. //!
  40. Math3D.YawPitchRollMatrix(GetCurrentOrientation(), pOutResult.m_CameraTM);
  41. pOutResult.m_CameraTM[3] = m_OffsetLS;
  42. pOutResult.m_iDirectBone = m_iBoneIndex;
  43. pOutResult.m_iDirectBoneMode = 1;
  44. pOutResult.m_fUseHeading = 1.0;
  45. pOutResult.m_fInsideCamera = 1.0;
  46. pOutResult.m_fNearPlane = 0.04; //0.07 default
  47. ProcessCameraShake(pDt, m_fLeftRightAngle, m_fUpDownAngleAdd);
  48. InitCameraOnPlayer();
  49. StdFovUpdate(pDt, pOutResult);
  50. UpdateCameraNV(PlayerBase.Cast(m_pPlayer));
  51. }
  52. override vector GetBaseAngles()
  53. {
  54. vector a;
  55. a[0] = m_fUpDownAngle;
  56. a[1] = m_fLeftRightAngle;
  57. a[2] = 0;
  58. return a;
  59. }
  60. override vector GetAdditiveAngles()
  61. {
  62. vector a;
  63. a[0] = m_fUpDownAngleAdd;
  64. a[1] = m_fLeftRightAngleAdd;
  65. a[2] = 0;
  66. return a;
  67. }
  68. override string GetCameraName()
  69. {
  70. return "DayZPlayerCamera1stPerson";
  71. }
  72. protected int m_iBoneIndex; //!< main bone
  73. protected vector m_OffsetLS; //!< position offset
  74. protected float m_fUpDownAngle; //!< up down angle in rad
  75. protected float m_fUpDownAngleAdd; //!< up down angle in rad
  76. protected float m_fLeftRightAngle; //!< left right angle in rad (in freelook only)
  77. protected float m_fLeftRightAngleAdd; //!< left right angle in rad (in freelook only)
  78. }
  79. // *************************************************************************************
  80. // ! DayZPlayerCamera1stPersonUnconscious - first person only unconscious
  81. // *************************************************************************************
  82. class DayZPlayerCamera1stPersonUnconscious extends DayZPlayerCamera1stPerson
  83. {
  84. void DayZPlayerCamera1stPersonUnconscious(DayZPlayer pPlayer, HumanInputController pInput)
  85. {
  86. m_iBoneIndex = pPlayer.GetBoneIndexByName ("Head");
  87. }
  88. override void OnUpdate(float pDt, out DayZPlayerCameraResult pOutResult)
  89. {
  90. super.OnUpdate(pDt, pOutResult);
  91. pOutResult.m_iDirectBone = m_iBoneIndex;
  92. pOutResult.m_iDirectBoneMode = 4;
  93. pOutResult.m_fUseHeading = 0.0;
  94. vector rot;
  95. rot[0] = 0;
  96. rot[1] = 90;
  97. rot[2] = 0;
  98. Math3D.YawPitchRollMatrix(rot, pOutResult.m_CameraTM);
  99. }
  100. }