dayzplayercamera3rdperson.c 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571
  1. // *************************************************************************************
  2. // ! DayZPlayerCamera3rdPerson - base for 3rd person cameras
  3. // *************************************************************************************
  4. class DayZPlayerCamera3rdPerson 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 DayZPlayerCamera3rdPerson(DayZPlayer pPlayer, HumanInputController pInput)
  11. {
  12. if (pInput.Camera3rdIsRightShoulder())
  13. {
  14. m_fCameraLRShoulder = 1.0;
  15. }
  16. else
  17. {
  18. m_fCameraLRShoulder = -1.0;
  19. }
  20. m_fCameraLRShoulderVel[0] = 0.0;
  21. m_CurrentCameraRoll = 0.0;
  22. m_WeaponSwayModifier = 1;
  23. m_fLeanDistance = 0.3;
  24. m_fPredictCollisionRadius = 0.5;
  25. }
  26. //
  27. override void OnActivate(DayZPlayerCamera pPrevCamera, DayZPlayerCameraResult pPrevCameraResult)
  28. {
  29. super.OnActivate(pPrevCamera, pPrevCameraResult);
  30. if (pPrevCamera)
  31. {
  32. vector baseAngles = pPrevCamera.GetBaseAngles();
  33. m_fUpDownAngle = baseAngles[0];
  34. m_fLeftRightAngle = baseAngles[1];
  35. vector addAngles = pPrevCamera.GetAdditiveAngles();
  36. m_fUpDownAngleAdd = addAngles[0];
  37. m_fLeftRightAngleAdd = addAngles[1];
  38. }
  39. }
  40. //
  41. override void OnUpdate(float pDt, out DayZPlayerCameraResult pOutResult)
  42. {
  43. m_pPlayer.GetMovementState(m_MovementState);
  44. //! update angles from input
  45. m_CurrentCameraYaw = UpdateLRAngleUnlocked(m_fLeftRightAngle, m_fLeftRightAngleAdd, CONST_LR_MIN, CONST_LR_MAX, pDt);
  46. m_CurrentCameraPitch = UpdateUDAngleUnlocked(m_fUpDownAngle, m_fUpDownAngleAdd, CONST_UD_MIN, CONST_UD_MAX, pDt);
  47. ProcessCameraShake(pDt, m_fLeftRightAngle, m_fUpDownAngleAdd);
  48. // update l/r offsets and set it as
  49. if (m_pInput.Camera3rdIsRightShoulder())
  50. {
  51. m_fCameraLRShoulder = Math.SmoothCD(m_fCameraLRShoulder, 1.0, m_fCameraLRShoulderVel, 0.14, 1000, pDt);
  52. }
  53. else
  54. {
  55. m_fCameraLRShoulder = Math.SmoothCD(m_fCameraLRShoulder, -1.0, m_fCameraLRShoulderVel, 0.14, 1000, pDt);
  56. }
  57. float shoulderDist = m_fCameraLRShoulder * m_fShoulderWidth + m_MovementState.m_fLeaning * m_fLeanDistance;
  58. //!
  59. Math3D.YawPitchRollMatrix(GetCurrentOrientation(), pOutResult.m_CameraTM);
  60. //! base bone pos
  61. if (m_iBoneIndex != -1)
  62. {
  63. pOutResult.m_CameraTM[3] = m_pPlayer.GetBonePositionMS(m_iBoneIndex);
  64. }
  65. else
  66. {
  67. pOutResult.m_CameraTM[3] = "0 0 0";
  68. }
  69. //! apply shoulder dist
  70. vector msOffset = m_CameraOffsetMS;
  71. vector lsOffset = m_CameraOffsetLS;
  72. if (m_bShoulderInLS)
  73. {
  74. lsOffset[0] = lsOffset[0] + shoulderDist;
  75. }
  76. else
  77. {
  78. msOffset[0] = msOffset[0] + shoulderDist;
  79. }
  80. // ls offset + ms offset + shoulder width
  81. pOutResult.m_CameraTM[3] = pOutResult.m_CameraTM[3] + pOutResult.m_CameraTM[0] * lsOffset[0] + pOutResult.m_CameraTM[1] * lsOffset[1] + pOutResult.m_CameraTM[2] * lsOffset[2] + msOffset;
  82. //! store distance
  83. pOutResult.m_fDistance = m_fDistance;
  84. pOutResult.m_fUseHeading = 1.0;
  85. pOutResult.m_fInsideCamera = 0.0;
  86. pOutResult.m_fPredictCollisionRadius = m_fPredictCollisionRadius;
  87. InitCameraOnPlayer();
  88. StdFovUpdate(pDt, pOutResult);
  89. UpdateCameraNV(PlayerBase.Cast(m_pPlayer));
  90. }
  91. override vector GetBaseAngles()
  92. {
  93. vector a;
  94. a[0] = m_fUpDownAngle;
  95. a[1] = m_fLeftRightAngle;
  96. a[2] = 0;
  97. return a;
  98. }
  99. override vector GetAdditiveAngles()
  100. {
  101. vector a;
  102. a[0] = m_fUpDownAngleAdd;
  103. a[1] = m_fLeftRightAngleAdd;
  104. a[2] = 0;
  105. return a;
  106. }
  107. override string GetCameraName()
  108. {
  109. return "DayZPlayerCamera3rdPerson";
  110. }
  111. //! runtime config
  112. protected int m_iBoneIndex = -1; //!< main bone
  113. protected vector m_CameraOffsetMS; //!< model space offset
  114. protected vector m_CameraOffsetLS; //!< local space offset
  115. protected float m_fDistance; //!< distance from start
  116. protected float m_fShoulderWidth; //!< shoulder camera widths
  117. protected bool m_bShoulderInLS; //!< true - shoulder is in local space
  118. protected float m_fRoll; //!< camera roll (deprecated)
  119. protected float m_fLeanDistance; //!< shift on leaning
  120. //! runtime values
  121. protected float m_fUpDownAngle; //!< up down angle in rad
  122. protected float m_fUpDownAngleAdd; //!< up down angle in rad
  123. protected float m_fLeftRightAngle; //!< left right angle in rad (in freelook only)
  124. protected float m_fLeftRightAngleAdd; //!< left right angle in rad (in freelook only)
  125. //! shoulder offsets
  126. protected float m_fCameraLRShoulder; // -1..1 shoulderness :)
  127. protected float m_fCameraLRShoulderVel[1]; // 0
  128. //! collision prediction
  129. protected float m_fPredictCollisionRadius;
  130. //! movement state
  131. ref HumanMovementState m_MovementState = new HumanMovementState();
  132. }
  133. // *************************************************************************************
  134. // ! DayZPlayerCamera3rdPersonErc - 3rd person erected
  135. // *************************************************************************************
  136. class DayZPlayerCamera3rdPersonErc extends DayZPlayerCamera3rdPerson
  137. {
  138. void DayZPlayerCamera3rdPersonErc(DayZPlayer pPlayer, HumanInputController pInput)
  139. {
  140. //Print("new camera: DayZPlayerCamera3rdPersonErc");
  141. m_fDistance = 1.6;
  142. m_CameraOffsetMS = "0.0 1.4 0.0";
  143. m_CameraOffsetLS = "0.0 0.3 0.0";
  144. m_fShoulderWidth = 0.3;
  145. m_fPredictCollisionRadius = 1.2;
  146. }
  147. }
  148. // *************************************************************************************
  149. // ! DayZPlayerCamera3rdPersonJump - 3rd person jump
  150. // *************************************************************************************
  151. class DayZPlayerCamera3rdPersonJump extends DayZPlayerCamera3rdPersonErc
  152. {
  153. void DayZPlayerCamera3rdPersonJump(DayZPlayer pPlayer, HumanInputController pInput)
  154. {
  155. //Print("new camera: DayZPlayerCamera3rdPersonJump");
  156. //! runtime config
  157. m_fDelay = 0.15;
  158. m_fDamping = 0.25;
  159. //! runtime values
  160. m_fJumpStartY = pPlayer.GetOrigin()[1];
  161. m_fJumpOffset = 0;
  162. m_fDelayTimer = 0;
  163. }
  164. //
  165. override void OnUpdate(float pDt, out DayZPlayerCameraResult pOutResult)
  166. {
  167. super.OnUpdate(pDt, pOutResult);
  168. float yPos = m_pPlayer.GetOrigin()[1];
  169. float yDiff = yPos - m_fJumpStartY;
  170. yDiff = Math.Clamp(yDiff, 0.0, 2.0);
  171. if( m_fDelayTimer < m_fDelay )
  172. {
  173. m_fDelayTimer += pDt;
  174. m_fJumpOffset = yDiff;
  175. }
  176. else
  177. {
  178. m_fJumpOffset = Math.SmoothCD(m_fJumpOffset, -(m_fDamping * yDiff), m_jumpOffsetVelocity, 0.3, 1000, pDt);
  179. }
  180. float newY = pOutResult.m_CameraTM[3][1] - m_fJumpOffset;
  181. pOutResult.m_CameraTM[3][1] = newY;
  182. }
  183. //! runtime config
  184. float m_fDelay;
  185. float m_fDamping;
  186. //! runtime values
  187. float m_fDelayTimer;
  188. float m_fJumpStartY;
  189. float m_fJumpOffset;
  190. float m_jumpOffsetVelocity[1];
  191. }
  192. // *************************************************************************************
  193. // ! DayZPlayerCamera3rdPersonJump - 3rd person jump
  194. // *************************************************************************************
  195. class DayZPlayerCamera3rdPersonClimb extends DayZPlayerCamera3rdPersonErc
  196. {
  197. void DayZPlayerCamera3rdPersonClimb(DayZPlayer pPlayer, HumanInputController pInput)
  198. {
  199. //Print("new camera: DayZPlayerCamera3rdPersonClimb");
  200. m_fDistance = 1.0;
  201. m_CameraOffsetMS = "0.0 0.3 -0.6";
  202. m_iBoneIndex = pPlayer.GetBoneIndexByName("Spine");
  203. m_fPredictCollisionRadius = 0.5;
  204. }
  205. }
  206. // *************************************************************************************
  207. // ! DayZPlayerCamera3rdPersonErc - 3rd person erected sprint
  208. // *************************************************************************************
  209. class DayZPlayerCamera3rdPersonErcSpr extends DayZPlayerCamera3rdPersonErc
  210. {
  211. void DayZPlayerCamera3rdPersonErcSpr(DayZPlayer pPlayer, HumanInputController pInput)
  212. {
  213. //Print("new camera: DayZPlayerCamera3rdPersonErcSpr");
  214. m_fDistance = 2.0;
  215. m_CameraOffsetMS = "0.0 1.3 0.0";
  216. m_CameraOffsetLS = "0.0 0.3 0.0";
  217. m_fShoulderWidth = 0.15;
  218. m_iPelvisBone = pPlayer.GetBoneIndexByName("Pelvis");
  219. if (m_iPelvisBone == -1)
  220. {
  221. Print("DayZPlayerCamera3rdPersonErcSpr: hips bone not found");
  222. }
  223. m_fTime = 0.0;
  224. }
  225. //
  226. override void OnUpdate(float pDt, out DayZPlayerCameraResult pOutResult)
  227. {
  228. m_fTime += pDt * 5;
  229. vector tm[4];
  230. m_pPlayer.GetBoneTransformLS(m_iPelvisBone, tm);
  231. //! basically -> transform up vector (0,1,0) and read x coord -> and set is as roll
  232. float xShift = tm[1][0];
  233. m_CurrentCameraRoll = xShift * 3.0; // 3 is just made up value i like :)
  234. // m_CurrentCameraRoll = (sin(1.5 * m_fTime)); // + 0.3 * sin(3.6 * m_fTime) + 0.2 * sin(0.7 * m_fTime)) / 1.3 * 3;
  235. //! prev update
  236. super.OnUpdate(pDt, pOutResult);
  237. //pOutResult.m_fFovMultiplier = 1.2;
  238. }
  239. protected int m_iPelvisBone;
  240. protected float m_fTime;
  241. }
  242. // *************************************************************************************
  243. // ! DayZPlayerCamera3rdPersonErcRaised - 3rd person erected raised
  244. // *************************************************************************************
  245. class DayZPlayerCamera3rdPersonErcRaised extends DayZPlayerCamera3rdPersonErc
  246. {
  247. void DayZPlayerCamera3rdPersonErcRaised(DayZPlayer pPlayer, HumanInputController pInput)
  248. {
  249. //Print("new camera: DayZPlayerCamera3rdPersonErcRaised");
  250. m_fPredictCollisionRadius = 0.2;
  251. if ( pPlayer.GetCurrentPerItemCameraUD () == DayZPlayerCameras.PERITEMUD_EMPTYHANDED )
  252. {
  253. // no item in hands
  254. m_fDistance = 1.2;
  255. m_fShoulderWidth = 0.4;
  256. m_CameraOffsetMS = "0.0 1.3 0.2";
  257. m_CameraOffsetLS = "0.0 0.3 0.0";
  258. }
  259. else if ( pPlayer.GetCurrentPerItemCameraUD () == DayZPlayerCameras.PERITEMUD_TWOHANDED )
  260. {
  261. // two handed
  262. m_fDistance = 1.2;
  263. m_fShoulderWidth = 0.4;
  264. m_CameraOffsetMS = "0.0 1.3 0.2";
  265. m_CameraOffsetLS = "0.0 0.3 0.0";
  266. }
  267. else if ( pPlayer.GetCurrentPerItemCameraUD () == DayZPlayerCameras.PERITEMUD_ONEHANDED )
  268. {
  269. // one handed
  270. m_fDistance = 1.2;
  271. m_fShoulderWidth = 0.4;
  272. m_CameraOffsetMS = "0.0 1.3 0.2";
  273. m_CameraOffsetLS = "0.0 0.3 0.0";
  274. }
  275. else
  276. {
  277. // weapons in hands
  278. m_fDistance = 0.8;
  279. m_CameraOffsetMS = "0.0 1.3 0.2";
  280. m_CameraOffsetLS = "0.0 0.3 0.0";
  281. m_fShoulderWidth = 0.5;
  282. }
  283. }
  284. override bool IsCamera3rdRaised()
  285. {
  286. return true;
  287. }
  288. }
  289. // *************************************************************************************
  290. // ! DayZPlayerCamera3rdPersonErcRaised - 3rd person erected raised
  291. // *************************************************************************************
  292. class DayZPlayerCamera3rdPersonErcRaisedMelee extends DayZPlayerCamera3rdPersonErcRaised
  293. {
  294. override void HandleShoulderCameraOverride(HumanInputController pInput)
  295. {
  296. //! override - stay at current state
  297. pInput.Override3rdIsRightShoulder(HumanInputControllerOverrideType.ENABLED, pInput.Camera3rdIsRightShoulder());
  298. }
  299. }
  300. // *************************************************************************************
  301. // ! DayZPlayerCamera3rdPersonCrouch - 3rd person crouch
  302. // *************************************************************************************
  303. class DayZPlayerCamera3rdPersonCrouch extends DayZPlayerCamera3rdPerson
  304. {
  305. static const float CONST_CAMERAMOVEMENTHEIGH = 0.4; // 0 idle, 0.15 walk 0.3 run/sprint
  306. void DayZPlayerCamera3rdPersonCrouch (DayZPlayer pPlayer, HumanInputController pInput)
  307. {
  308. //Print("new camera: DayZPlayerCamera3rdPersonCrouch");
  309. m_fDistance = 1.4;
  310. m_CameraOffsetMS = "0.0 0.7 0.1";
  311. m_CameraOffsetLS = "0.0 0.3 0.0";
  312. m_fShoulderWidth = 0.3;
  313. }
  314. //
  315. override void OnUpdate(float pDt, out DayZPlayerCameraResult pOutResult)
  316. {
  317. m_pPlayer.GetMovementState(m_MovementState);
  318. //! movement height
  319. float movement = (Limit(m_MovementState.m_iMovement, 1, 3) - 1.0) * 0.5;
  320. movement *= CONST_CAMERAMOVEMENTHEIGH;
  321. m_fCameraHeight = Math.SmoothCD(m_fCameraHeight, movement, m_fCameraHeightVel, 0.2, 1000, pDt);
  322. m_CameraOffsetMS[1] = 0.7 + m_fCameraHeight;
  323. //! prev update
  324. super.OnUpdate(pDt, pOutResult);
  325. }
  326. protected float m_fCameraHeight; // -1..1 shoulderness :)
  327. protected float m_fCameraHeightVel[1]; // 0
  328. }
  329. // *************************************************************************************
  330. // ! DayZPlayerCamera3rdPersonCrouchRaised- 3rd person crouch raised
  331. // *************************************************************************************
  332. class DayZPlayerCamera3rdPersonCrouchRaised extends DayZPlayerCamera3rdPersonCrouch
  333. {
  334. void DayZPlayerCamera3rdPersonCrouchRaised(DayZPlayer pPlayer, HumanInputController pInput)
  335. {
  336. //Print("new camera: DayZPlayerCamera3rdPersonCrouchRaised");
  337. m_fDistance = 0.8;
  338. m_CameraOffsetMS = "0.0 0.8 0.1"; // being overwritten by m_CameraOffsetMS[1] from DayZPlayerCamera3rdPersonCrouch
  339. m_CameraOffsetLS = "0.0 0.3 0.0";
  340. m_fShoulderWidth = 0.5;
  341. }
  342. override bool IsCamera3rdRaised()
  343. {
  344. return true;
  345. }
  346. }
  347. // *************************************************************************************
  348. // ! DayZPlayerCamera3rdPersonProneRaised - 3rd person prone raised
  349. // *************************************************************************************
  350. class DayZPlayerCamera3rdPersonProneBase extends DayZPlayerCamera3rdPerson
  351. {
  352. protected vector m_BaseOffset
  353. protected float m_BaseOffsetVelX[1], m_BaseOffsetVelY[1], m_BaseOffsetVelZ[1];
  354. protected float m_LookAtLRAngle;
  355. float UpdateLRAngleLookAt(float pMin, float pMax, float pDt)
  356. {
  357. //! lr angle
  358. if (m_pInput.CameraIsFreeLook() || m_bForceFreeLook)
  359. {
  360. m_LookAtLRAngle += m_pInput.GetAimChange()[0] * Math.RAD2DEG;
  361. m_LookAtLRAngle = Limit(m_LookAtLRAngle, pMin, pMax);
  362. m_fLRAngleVel[0] = 0; // reset filter
  363. }
  364. else
  365. {
  366. // smooth value back to 0
  367. m_LookAtLRAngle = Math.SmoothCD(m_LookAtLRAngle, 0, m_fLRAngleVel, 0.14, 1000, pDt);
  368. // m_fLeftRightAngle = 0.9 * (1.0 - pDt);
  369. }
  370. return m_LookAtLRAngle;
  371. }
  372. override void OnActivate(DayZPlayerCamera pPrevCamera, DayZPlayerCameraResult pPrevCameraResult)
  373. {
  374. super.OnActivate(pPrevCamera, pPrevCameraResult);
  375. if (m_iBoneIndex != -1)
  376. {
  377. m_BaseOffset = m_pPlayer.GetBonePositionMS(m_iBoneIndex);
  378. }
  379. else
  380. {
  381. m_BaseOffset = "0 0 0";
  382. }
  383. }
  384. //
  385. override void OnUpdate(float pDt, out DayZPlayerCameraResult pOutResult)
  386. {
  387. //! update angles from input
  388. m_CurrentCameraPitch = UpdateUDAngleUnlocked(m_fUpDownAngle, m_fUpDownAngleAdd, CONST_UD_MIN, CONST_UD_MAX, pDt);
  389. float orientYaw = m_pPlayer.GetOrientation()[0];
  390. float headYaw = m_pInput.GetHeadingAngle() * Math.RAD2DEG; //! this is actually negative to yaw
  391. m_CurrentCameraYaw = -fixAngle_180_180(orientYaw + headYaw);
  392. // Print("OY: " + orientYaw.ToString() + " HY: " + headYaw.ToString());
  393. // update l/r offsets and set it as
  394. ProcessCameraShake(pDt, m_fLeftRightAngle, m_fUpDownAngleAdd);
  395. if (m_pInput.Camera3rdIsRightShoulder())
  396. {
  397. m_fCameraLRShoulder = Math.SmoothCD(m_fCameraLRShoulder, 1.0, m_fCameraLRShoulderVel, 0.14, 1000, pDt);
  398. }
  399. else
  400. {
  401. m_fCameraLRShoulder = Math.SmoothCD(m_fCameraLRShoulder, -1.0, m_fCameraLRShoulderVel, 0.14, 1000, pDt);
  402. }
  403. float shoulderDist = m_fCameraLRShoulder * m_fShoulderWidth;
  404. //!
  405. Math3D.YawPitchRollMatrix(GetCurrentOrientation(), pOutResult.m_CameraTM);
  406. //! base bone pos
  407. if (m_iBoneIndex != -1)
  408. {
  409. vector bonePos = m_pPlayer.GetBonePositionMS(m_iBoneIndex);
  410. m_BaseOffset[0] = Math.SmoothCD(m_BaseOffset[0], bonePos[0], m_BaseOffsetVelX, 0.14, 1000, pDt);
  411. m_BaseOffset[1] = Math.SmoothCD(m_BaseOffset[1], bonePos[1], m_BaseOffsetVelY, 0.14, 1000, pDt);
  412. m_BaseOffset[2] = Math.SmoothCD(m_BaseOffset[2], bonePos[2], m_BaseOffsetVelZ, 0.14, 1000, pDt);
  413. }
  414. //! apply shoulder dist
  415. vector msOffset = m_CameraOffsetMS;
  416. vector lsOffset = m_CameraOffsetLS;
  417. lsOffset[0] = lsOffset[0] + shoulderDist;
  418. // ls offset + ms offset + shoulder width
  419. pOutResult.m_CameraTM[3] = m_BaseOffset + pOutResult.m_CameraTM[0] * lsOffset[0] + pOutResult.m_CameraTM[1] * lsOffset[1] + pOutResult.m_CameraTM[2] * lsOffset[2] + msOffset;
  420. m_CurrentCameraYaw = UpdateLRAngleLookAt(-180, 180, pDt);
  421. Math3D.YawPitchRollMatrix(GetCurrentOrientation(), pOutResult.m_CameraTM);
  422. //! store distance
  423. pOutResult.m_fDistance = m_fDistance;
  424. pOutResult.m_fUseHeading = 1.0;
  425. pOutResult.m_fInsideCamera = 0.0;
  426. pOutResult.m_fPositionModelSpace = 1.0;
  427. pOutResult.m_bUpdateWhenBlendOut = false;
  428. InitCameraOnPlayer();
  429. StdFovUpdate(pDt, pOutResult);
  430. UpdateCameraNV(PlayerBase.Cast(m_pPlayer));
  431. }
  432. }
  433. // *************************************************************************************
  434. // ! DayZPlayerCamera3rdPersonProne - 3rd person prone
  435. // *************************************************************************************
  436. class DayZPlayerCamera3rdPersonProne extends DayZPlayerCamera3rdPersonProneBase
  437. {
  438. void DayZPlayerCamera3rdPersonProne(DayZPlayer pPlayer, HumanInputController pInput)
  439. {
  440. //Print("new camera: DayZPlayerCamera3rdPersonProne");
  441. m_iBoneIndex = pPlayer.GetBoneIndexByName ("Camera3rd_Helper");
  442. m_fDistance = 1.0;
  443. m_CameraOffsetMS = "0.0 0.4 0.0";
  444. m_CameraOffsetLS = "0.0 0.2 0.0";
  445. m_fShoulderWidth = 0.5;
  446. }
  447. }
  448. // *************************************************************************************
  449. // ! DayZPlayerCamera3rdPersonProneRaised - 3rd person prone raised
  450. // *************************************************************************************
  451. class DayZPlayerCamera3rdPersonProneRaised extends DayZPlayerCamera3rdPersonProneBase
  452. {
  453. void DayZPlayerCamera3rdPersonProneRaised(DayZPlayer pPlayer, HumanInputController pInput)
  454. {
  455. //Print("new camera: DayZPlayerCamera3rdPersonProneRaised");
  456. m_iBoneIndex = pPlayer.GetBoneIndexByName ("Camera3rd_Helper");
  457. m_fDistance = 1.0;
  458. m_CameraOffsetMS = "0.0 0.4 0.0";
  459. m_CameraOffsetLS = "0.0 0.2 0.0";
  460. m_fShoulderWidth = 0.5;
  461. }
  462. override bool IsCamera3rdRaised()
  463. {
  464. return true;
  465. }
  466. }