Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
CharacterCamera1stPerson.c
Go to the documentation of this file.
1// *************************************************************************************
2// ! CharacterCamera1stPerson - 1st person camera
3// *************************************************************************************
5{
6 //-----------------------------------------------------------------------------
7 static const float CONST_UD_MIN = -89.0;
8 static const float CONST_UD_MAX = 89.0;
9
10 static const float CONST_LR_MIN = -160.0;
11 static const float CONST_LR_MAX = 160.0;
12
13 //-----------------------------------------------------------------------------
14 void CharacterCamera1stPerson(CameraHandlerComponent pCameraHandler)
15 {
16 m_pCompartmentAccess = m_OwnerCharacter.GetCompartmentAccessComponent();
17 // in head bone space
18 m_OffsetLS = "0.0 0.03 -0.07";
19 m_ApplyHeadBob = true;
20 }
21
22 //-----------------------------------------------------------------------------
23 override void OnActivate(ScriptedCameraItem pPrevCamera, ScriptedCameraItemResult pPrevCameraResult)
24 {
25 super.OnActivate(pPrevCamera, pPrevCameraResult);
26 m_bCameraTransition = false;
27 }
28
29 //-----------------------------------------------------------------------------
30 override void OnUpdate(float pDt, out ScriptedCameraItemResult pOutResult)
31 {
32 //Print("m_fLeftRightAngle : " + m_fLeftRightAngle);
33
34 pOutResult.m_vBaseAngles = m_CharacterHeadAimingComponent.GetLookAngles();
35 pOutResult.m_fUseHeading = 1.0;
36 pOutResult.m_iDirectBoneMode = EDirectBoneMode.RelativePosition;
37 pOutResult.m_iDirectBone = GetCameraBoneIndex();
38
39 if (m_OverrideDirectBoneMode)
40 pOutResult.m_iDirectBoneMode = m_OverrideDirectBoneMode;
41
43 m_fFOV = GetBaseFOV();
44 if (m_bCameraTransition)
45 {
46 pOutResult.m_fUseHeading = 0.0;
47 pOutResult.m_iDirectBoneMode = EDirectBoneMode.RelativePosition;
48
49 // Currently the 1pv camera bone in getin/getout needs to be investigated,
50 // so as a workaround, we use head bone directly with position only
51 if (sm_iHeadBoneIndex != -1)
52 pOutResult.m_iDirectBone = sm_iHeadBoneIndex;
53 }
54
55 vector additiveRotation = "0 0 0";
56 m_CharacterHeadAimingComponent.GetLookTransformationLS(pOutResult.m_iDirectBone, pOutResult.m_iDirectBoneMode, m_OffsetLS, additiveRotation, pOutResult.m_CameraTM);
57
58 if (m_CharacterAnimationComponent.PhysicsIsLinked())
59 {
60 pOutResult.m_fUseHeading = 0.0; // Do not use heading after so that we can calculate it ourselves here
61
62 vector headingMat[3];
63 vector angles = Vector(m_OwnerCharacter.GetAimRotationModel()[0] * Math.RAD2DEG, 0.0, 0.0);
64
65 if (IsProneStance())
66 {
67 angles = angles - Vector(0, m_OwnerCharacter.GetYawPitchRoll()[1], m_OwnerCharacter.GetYawPitchRoll()[2]);
68 }
69
70 Math3D.AnglesToMatrix(angles, headingMat); // Get head yaw
71 Math3D.MatrixMultiply3(headingMat, pOutResult.m_CameraTM, pOutResult.m_CameraTM); // Add head yaw to camera matrix
72 }
73
74 vector vYPR = "0 0 0";
75 if (!m_bIgnoreCharacterPitch)
76 vYPR[1] = m_OwnerCharacter.GetLocalYawPitchRoll()[1];
77 vector mat[4];
78 Math3D.AnglesToMatrix(vYPR, mat);
79 Math3D.MatrixMultiply4(mat, pOutResult.m_CameraTM, pOutResult.m_CameraTM);
80
81 if (m_UseLookPositionOverrideLS)
82 pOutResult.m_CameraTM[3] = m_LookPositionOverrideLS;
83
84 if( m_ApplyHeadBob )
85 m_CharacterCameraHandler.AddViewBobToTransform(pOutResult.m_CameraTM, 1, false);
86
87 pOutResult.m_fFOV = m_fFOV;
88 pOutResult.m_fNearPlane = 0.0125;
89 pOutResult.m_bUpdateWhenBlendOut = true;
90 pOutResult.m_fPositionModelSpace = 0.0;
91 pOutResult.m_bAllowInterpolation = true;
92 pOutResult.m_pOwner = m_OwnerCharacter;
93 pOutResult.m_pWSAttachmentReference = null;
94
95 // Apply shake
96 if (m_CharacterCameraHandler)
97 m_CharacterCameraHandler.AddShakeToToTransform(pOutResult.m_CameraTM, pOutResult.m_fFOV);
98 }
99
100 //-----------------------------------------------------------------------------
101 override float GetBaseFOV()
102 {
103 CameraManager cameraManager = GetGame().GetCameraManager();
104 if (!cameraManager)
105 return 0;
106
107 return cameraManager.GetFirstPersonFOV();
108 }
109
110 bool IsProneStance()
111 {
112 CharacterAnimationComponent animComponent = m_ControllerComponent.GetAnimationComponent();
113 if (animComponent)
114 {
115 CharacterMovementState charMovementState = new CharacterMovementState();
116 animComponent.GetMovementState(charMovementState);
117 return charMovementState.m_iStanceIdx == ECharacterStance.PRONE;
118 }
119
120 return false;
121 }
122
123 //-----------------------------------------------------------------------------
124 protected vector m_OffsetLS;
125
126 protected bool m_ApplyHeadBob;
127
128 protected bool m_bCameraTransition = false;
129 protected CompartmentAccessComponent m_pCompartmentAccess;
130
131 protected bool m_UseLookPositionOverrideLS = false;
133};
134
135class CharacterCamera1stPersonBoneTransform extends CharacterCamera1stPerson
136{
137 override void OnUpdate(float pDt, out ScriptedCameraItemResult pOutResult)
138 {
139 super.OnUpdate(pDt, pOutResult);
140 pOutResult.m_fUseHeading = 0.0;
141 pOutResult.m_iDirectBoneMode = EDirectBoneMode.RelativeTransform;
142 vector additiveRotation = "0 0 0";
143 m_CharacterHeadAimingComponent.GetLookTransformationLS(pOutResult.m_iDirectBone, pOutResult.m_iDirectBoneMode, m_OffsetLS, additiveRotation, pOutResult.m_CameraTM);
144 }
145}
ArmaReforgerScripted GetGame()
Definition game.c:1398
ref array< string > angles
override void OnActivate()
override void OnUpdate()
EDirectBoneMode
CompartmentAccessComponent m_pCompartmentAccess
vector m_OffsetLS
position offset
ECharacterStance
proto native vector Vector(float x, float y, float z)