dayzplayercameras.c 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. class DayZPlayerCameras
  2. {
  3. static const int DAYZCAMERA_1ST = 1; //!< 1st person camera
  4. static const int DAYZCAMERA_3RD_ERC = 2; //!< 3rd - standing
  5. static const int DAYZCAMERA_3RD_ERC_SPR = 3; //!< 3rd - standing sprint
  6. static const int DAYZCAMERA_3RD_ERC_RAISED = 4; //!< 3rd - standing raised
  7. static const int DAYZCAMERA_3RD_CRO = 5; //!< 3rd - crouch
  8. static const int DAYZCAMERA_3RD_CRO_RAISED = 6; //!< 3rd - crouch
  9. static const int DAYZCAMERA_3RD_PRO = 7; //!< 3rd - laying
  10. static const int DAYZCAMERA_3RD_PRO_RAISED = 8; //!< 3rd - laying raised
  11. static const int DAYZCAMERA_3RD_ERC_RAISED_MELEE = 9; //!< 3rd - laying raised
  12. static const int DAYZCAMERA_IRONSIGHTS = 10; //!< ironsights camera
  13. static const int DAYZCAMERA_OPTICS = 11; //!< optics
  14. static const int DAYZCAMERA_1ST_UNCONSCIOUS = 12; //!< unconscious
  15. static const int DAYZCAMERA_3RD_JUMP = 13; //!< jump
  16. static const int DAYZCAMERA_3RD_CLIMB = 14; //!< climb / vault
  17. static const int DAYZCAMERA_1ST_VEHICLE = 30; //!< vehicle 1st person
  18. static const int DAYZCAMERA_3RD_VEHICLE = 31; //!< generic vehicle 3rd person
  19. static const int PERITEMUD_INVALID = -1; //! uninitialized / invalid per item camera user data
  20. static const int PERITEMUD_EMPTYHANDED = 20; //! for empty hands
  21. static const int PERITEMUD_ONEHANDED = 25; //! for empty hands
  22. static const int PERITEMUD_TWOHANDED = 30; //! for two handed items
  23. // some times for camera changes
  24. static const float TIME_CAMERACHANGE_01 = 0.1;
  25. static const float TIME_CAMERACHANGE_02 = 0.2;
  26. static const float TIME_CAMERACHANGE_03 = 0.3;
  27. static ref map<int,float> m_TransitionTimes = new map<int,float>;
  28. //! called from DayZPlayerTypeCreate() fn
  29. // temporary moved out of the
  30. static void RegisterCameras(DayZPlayerType pType)
  31. {
  32. pType.ResetCameraCreators();
  33. //!
  34. //! this registers camera ids for camera script class implementation
  35. //! which camera is used at the time is specified by DayzPlayerImplement.CamraHandler which returns id
  36. //!
  37. pType.RegisterCameraCreator(DAYZCAMERA_1ST, DayZPlayerCamera1stPerson);
  38. pType.RegisterCameraCreator(DAYZCAMERA_3RD_ERC, DayZPlayerCamera3rdPersonErc);
  39. pType.RegisterCameraCreator(DAYZCAMERA_3RD_ERC_SPR, DayZPlayerCamera3rdPersonErcSpr);
  40. pType.RegisterCameraCreator(DAYZCAMERA_3RD_ERC_RAISED, DayZPlayerCamera3rdPersonErcRaised);
  41. pType.RegisterCameraCreator(DAYZCAMERA_3RD_CRO, DayZPlayerCamera3rdPersonCrouch);
  42. pType.RegisterCameraCreator(DAYZCAMERA_3RD_CRO_RAISED, DayZPlayerCamera3rdPersonCrouchRaised);
  43. pType.RegisterCameraCreator(DAYZCAMERA_3RD_PRO, DayZPlayerCamera3rdPersonProne);
  44. pType.RegisterCameraCreator(DAYZCAMERA_3RD_PRO_RAISED, DayZPlayerCamera3rdPersonProneRaised);
  45. pType.RegisterCameraCreator(DAYZCAMERA_IRONSIGHTS, DayZPlayerCameraIronsights);
  46. pType.RegisterCameraCreator(DAYZCAMERA_OPTICS, DayZPlayerCameraOptics);
  47. pType.RegisterCameraCreator(DAYZCAMERA_3RD_ERC_RAISED_MELEE, DayZPlayerCamera3rdPersonErcRaisedMelee);
  48. pType.RegisterCameraCreator(DAYZCAMERA_1ST_UNCONSCIOUS, DayZPlayerCamera1stPersonUnconscious);
  49. pType.RegisterCameraCreator(DAYZCAMERA_3RD_JUMP, DayZPlayerCamera3rdPersonJump);
  50. pType.RegisterCameraCreator(DAYZCAMERA_3RD_CLIMB, DayZPlayerCamera3rdPersonClimb);
  51. pType.RegisterCameraCreator(DAYZCAMERA_1ST_VEHICLE, DayZPlayerCamera1stPersonVehicle);
  52. pType.RegisterCameraCreator(DAYZCAMERA_3RD_VEHICLE, DayZPlayerCamera3rdPersonVehicle);
  53. //! Blend times when changing cameras
  54. //! 3rd person erected camera transition
  55. RegisterTransitionTime(DAYZCAMERA_3RD_ERC, DAYZCAMERA_3RD_CRO, 0.4, false);
  56. RegisterTransitionTime(DAYZCAMERA_3RD_ERC, DAYZCAMERA_3RD_PRO, 0.8, false);
  57. RegisterTransitionTime(DAYZCAMERA_3RD_ERC, DAYZCAMERA_3RD_PRO_RAISED, 0.8, false);
  58. RegisterTransitionTime(DAYZCAMERA_3RD_ERC, DAYZCAMERA_3RD_ERC_RAISED, 0.2, false);
  59. RegisterTransitionTime(DAYZCAMERA_3RD_ERC, DAYZCAMERA_3RD_ERC_RAISED_MELEE, 0.2, false);
  60. RegisterTransitionTime(DAYZCAMERA_3RD_ERC, DAYZCAMERA_3RD_ERC_SPR, 0.6, false);
  61. RegisterTransitionTime(DAYZCAMERA_3RD_ERC_RAISED, DAYZCAMERA_3RD_ERC_SPR, 0.7, false);
  62. RegisterTransitionTime(DAYZCAMERA_3RD_ERC_RAISED, DAYZCAMERA_3RD_PRO_RAISED, 0.8, false);
  63. RegisterTransitionTime(DAYZCAMERA_3RD_ERC_SPR, DAYZCAMERA_3RD_ERC, 0.3, false);
  64. RegisterTransitionTime(DAYZCAMERA_3RD_ERC_SPR, DAYZCAMERA_3RD_CRO, 0.3, false);
  65. RegisterTransitionTime(DAYZCAMERA_3RD_ERC_SPR, DAYZCAMERA_3RD_PRO, 0.5, false);
  66. RegisterTransitionTime(DAYZCAMERA_3RD_ERC_SPR, DAYZCAMERA_3RD_ERC_RAISED, 0.3, false);
  67. RegisterTransitionTime(DAYZCAMERA_3RD_ERC_SPR, DAYZCAMERA_3RD_JUMP, 0.1, false);
  68. RegisterTransitionTime(DAYZCAMERA_3RD_JUMP, DAYZCAMERA_3RD_ERC_SPR, 0.2, false);
  69. RegisterTransitionTime(DAYZCAMERA_3RD_ERC, DAYZCAMERA_3RD_JUMP, 0.05, false);
  70. RegisterTransitionTime(DAYZCAMERA_3RD_JUMP, DAYZCAMERA_3RD_ERC, 0.3, false);
  71. RegisterTransitionTime(DAYZCAMERA_3RD_ERC, DAYZCAMERA_3RD_CLIMB, 0.3, false);
  72. RegisterTransitionTime(DAYZCAMERA_3RD_CLIMB, DAYZCAMERA_3RD_ERC, 0.3, false);
  73. //! 3rd person crouch camera transitions
  74. RegisterTransitionTime(DAYZCAMERA_3RD_CRO, DAYZCAMERA_3RD_ERC, 0.4, false);
  75. RegisterTransitionTime(DAYZCAMERA_3RD_CRO, DAYZCAMERA_3RD_PRO, 0.6, true);
  76. RegisterTransitionTime(DAYZCAMERA_3RD_CRO, DAYZCAMERA_3RD_CRO_RAISED, 0.2, true);
  77. RegisterTransitionTime(DAYZCAMERA_3RD_CRO, DAYZCAMERA_3RD_ERC_SPR, 0.6, false);
  78. //! 3rd person prone camera transitions
  79. RegisterTransitionTime(DAYZCAMERA_3RD_PRO, DAYZCAMERA_3RD_ERC, 0.9, false);
  80. RegisterTransitionTime(DAYZCAMERA_3RD_PRO, DAYZCAMERA_3RD_CRO, 0.7, false);
  81. RegisterTransitionTime(DAYZCAMERA_3RD_PRO, DAYZCAMERA_3RD_PRO_RAISED, 0.2, false);
  82. RegisterTransitionTime(DAYZCAMERA_3RD_PRO, DAYZCAMERA_3RD_ERC_SPR, 0.6, false);
  83. RegisterTransitionTime(DAYZCAMERA_3RD_PRO_RAISED, DAYZCAMERA_3RD_CRO, 0.7, false);
  84. RegisterTransitionTime(DAYZCAMERA_3RD_PRO_RAISED, DAYZCAMERA_3RD_CRO_RAISED, 0.7, false);
  85. RegisterTransitionTime(DAYZCAMERA_3RD_PRO_RAISED, DAYZCAMERA_3RD_ERC, 0.9, false);
  86. RegisterTransitionTime(DAYZCAMERA_3RD_PRO_RAISED, DAYZCAMERA_3RD_ERC_RAISED, 0.9, false);
  87. RegisterTransitionTime(DAYZCAMERA_3RD_PRO_RAISED, DAYZCAMERA_3RD_ERC_RAISED_MELEE, 0.9, false);
  88. //! vehicle cameras
  89. RegisterTransitionTime(DAYZCAMERA_3RD_VEHICLE, DAYZCAMERA_3RD_ERC, 0.7, false);
  90. //! ironsights camera transitions
  91. RegisterTransitionTime(DAYZCAMERA_3RD_ERC_RAISED, DAYZCAMERA_IRONSIGHTS, TIME_CAMERACHANGE_02, true);
  92. RegisterTransitionTime(DAYZCAMERA_3RD_CRO_RAISED, DAYZCAMERA_IRONSIGHTS, TIME_CAMERACHANGE_02, true);
  93. RegisterTransitionTime(DAYZCAMERA_3RD_PRO_RAISED, DAYZCAMERA_IRONSIGHTS, TIME_CAMERACHANGE_02, true);
  94. RegisterTransitionTime(DAYZCAMERA_1ST, DAYZCAMERA_IRONSIGHTS, TIME_CAMERACHANGE_01, true);
  95. RegisterTransitionTime(DAYZCAMERA_3RD_ERC, DAYZCAMERA_IRONSIGHTS, TIME_CAMERACHANGE_02, true);
  96. RegisterTransitionTime(DAYZCAMERA_3RD_CRO, DAYZCAMERA_IRONSIGHTS, TIME_CAMERACHANGE_02, true);
  97. RegisterTransitionTime(DAYZCAMERA_3RD_PRO, DAYZCAMERA_IRONSIGHTS, TIME_CAMERACHANGE_02, true);
  98. //! optics camera transitions
  99. RegisterTransitionTime(DAYZCAMERA_IRONSIGHTS, DAYZCAMERA_OPTICS, TIME_CAMERACHANGE_02, true);
  100. RegisterTransitionTime(DAYZCAMERA_3RD_ERC_RAISED, DAYZCAMERA_OPTICS, TIME_CAMERACHANGE_03, true);
  101. RegisterTransitionTime(DAYZCAMERA_3RD_CRO_RAISED, DAYZCAMERA_OPTICS, TIME_CAMERACHANGE_03, true);
  102. RegisterTransitionTime(DAYZCAMERA_3RD_PRO_RAISED, DAYZCAMERA_OPTICS, TIME_CAMERACHANGE_03, true);
  103. RegisterTransitionTime(DAYZCAMERA_1ST, DAYZCAMERA_OPTICS, TIME_CAMERACHANGE_02, true); //handheld optics only
  104. RegisterTransitionTime(DAYZCAMERA_3RD_ERC, DAYZCAMERA_OPTICS, TIME_CAMERACHANGE_02, true); //handheld optics only
  105. RegisterTransitionTime(DAYZCAMERA_3RD_CRO, DAYZCAMERA_OPTICS, TIME_CAMERACHANGE_02, true); //handheld optics only
  106. RegisterTransitionTime(DAYZCAMERA_3RD_PRO, DAYZCAMERA_OPTICS, TIME_CAMERACHANGE_02, true); //handheld optics only
  107. //Uncon camera transitions
  108. RegisterTransitionTime(DAYZCAMERA_1ST_UNCONSCIOUS, DAYZCAMERA_3RD_PRO, 1.0, false);
  109. RegisterTransitionTime(DAYZCAMERA_1ST_UNCONSCIOUS, DAYZCAMERA_1ST, 0.1, false);
  110. RegisterTransitionTime(DAYZCAMERA_1ST_UNCONSCIOUS, DAYZCAMERA_1ST_VEHICLE, 0.5, false);
  111. RegisterTransitionTime(DAYZCAMERA_1ST_UNCONSCIOUS, DAYZCAMERA_3RD_VEHICLE, 1.0, false);
  112. //! register function to handle camera changes
  113. pType.RegisterCameraOnChangeFnStatic(DayZPlayerCameras, "OnCameraChange");
  114. }
  115. //! static function to set time to table
  116. static void RegisterTransitionTime(int pFrom, int pTo, float pTime, bool pTwoWay)
  117. {
  118. int key = (pFrom * 65536) + pTo;
  119. m_TransitionTimes.Set(key, pTime);
  120. if (pTwoWay)
  121. {
  122. RegisterTransitionTime(pTo, pFrom, pTime, false);
  123. }
  124. }
  125. //! static function to get time from table
  126. static float GetTransitionTime(int pFrom, int pTo)
  127. {
  128. int key = (pFrom * 65536) + pTo;
  129. float val;
  130. if (m_TransitionTimes.Find(key, val))
  131. {
  132. return val;
  133. }
  134. else
  135. {
  136. return 0.3;
  137. }
  138. }
  139. static float OnCameraChange(DayZPlayer pPlayer, int pFrom, int pTo)
  140. {
  141. float transTime = GetTransitionTime(pFrom, pTo);
  142. return transTime;
  143. }
  144. }