Dayz Explorer 1.29.162510
Loading...
Searching...
No Matches
dayzplayercameravehicles.c
Go to the documentation of this file.
1// *************************************************************************************
2// ! DayZPlayerCamera1stPersonVehicle - first person in vehicle
3// *************************************************************************************
4class DayZPlayerCamera1stPersonVehicle extends DayZPlayerCamera1stPerson
5{
6 override void OnUpdate(float pDt, out DayZPlayerCameraResult pOutResult)
7 {
8 super.OnUpdate(pDt, pOutResult);
9
10 pOutResult.m_fUseHeading = 0.0;
11 pOutResult.m_bUpdateEveryFrame = g_Game.IsPhysicsExtrapolationEnabled();
12 }
13}
14
15// *************************************************************************************
16// ! DayZPlayerCamera3rdPersonVehicle - 3rd person in vehicle (generic)
17// *************************************************************************************
19{
20 static const float CONST_UD_MIN = -85.0;
21 static const float CONST_UD_MAX = 85.0;
22 const float UP_ANGLE_CAP = 10; // max up angle, doesnt require gamecode sync
23
24 static const float CONST_LR_MIN = -160.0;
25 static const float CONST_LR_MAX = 160.0;
26
27 const float CONST_LINEAR_VELOCITY_STRENGTH = 0.025;
29
33
35 {
36 //Print("new camera: DayZPlayerCamera3rdPersonVehicle");
37
38 m_fDistance = 4.0;
39 m_CameraOffsetMS = "0.0 1.3 0.0";
40
41 HumanCommandVehicle vehicleCommand = pPlayer.GetCommand_Vehicle();
42 if ( vehicleCommand )
43 {
44 Transport transport = vehicleCommand.GetTransport();
45 if ( transport )
46 {
47 m_Transport = transport;
48 m_fDistance = transport.GetTransportCameraDistance();
49 m_CameraOffsetMS = transport.GetTransportCameraOffset();
50 }
51 }
52 }
53
54 override void OnActivate( DayZPlayerCamera pPrevCamera, DayZPlayerCameraResult pPrevCameraResult )
55 {
56 if (pPrevCamera)
57 {
58 vector baseAngles = pPrevCamera.GetBaseAngles();
59 m_fUpDownAngle = baseAngles[0];
60 m_fLeftRightAngle = baseAngles[1];
61
62 vector addAngles = pPrevCamera.GetAdditiveAngles();
63 m_fUpDownAngleAdd = addAngles[0];
64 m_fLeftRightAngleAdd = addAngles[1];
65 }
66
71
75
79
80 if (m_pPlayer)
81 {
82 vector rotDiffLS = m_pPlayer.GetOrientation() * Math.DEG2RAD;
83 m_LagOffsetOrientation[0] = rotDiffLS[0];
84 m_LagOffsetOrientation[1] = rotDiffLS[1];
85 m_LagOffsetOrientation[2] = rotDiffLS[2];
86 }
87 }
88
89 override void OnUpdate( float pDt, out DayZPlayerCameraResult pOutResult )
90 {
92 vector playerTransformWS[4];
93 m_pPlayer.GetTransform(playerTransformWS);
94
96 IEntity vehicle = m_Transport;
97 pOutResult.m_CollisionIgnoreEntity = vehicle;
98
100 vector cameraPosition = vector.Zero;
101 if ( vehicle )
102 {
103 vector vehiclePositionWS = vehicle.GetOrigin();
104 vector vehiclePositionMS = vehiclePositionWS.InvMultiply4(playerTransformWS);
105 cameraPosition = vehiclePositionMS + m_CameraOffsetMS;
106 }
107
112
114 vector posDiffLS = vector.Zero;
115 vector rotDiffLS = vector.Zero;
116
117 vector rotWS = m_pPlayer.GetOrientation();
118 float maxRoll = 10;
119 rotWS[2] = Math.Clamp(rotWS[2], -maxRoll, maxRoll) / maxRoll;
120 rotWS[2] = rotWS[2] * rotWS[2] * rotWS[2];
121 rotWS[2] = rotWS[2] * maxRoll;
122 rotWS[2] = 0;
123
124 rotWS = rotWS * Math.DEG2RAD;
125
126 vector velocity = GetVelocity(vehicle);
127
128 if (vehicle)
129 {
130 vector posDiffWS = velocity * CONST_LINEAR_VELOCITY_STRENGTH;
131 posDiffLS = posDiffLS + posDiffWS.InvMultiply3(playerTransformWS);
132
134 rotDiffLS = rotDiffLS + rotDiffWS.InvMultiply3(playerTransformWS);
135
136 vector tempRot1 = rotDiffLS;
137 rotDiffLS[0] = tempRot1[1];
138 rotDiffLS[1] = tempRot1[2];
139 rotDiffLS[2] = tempRot1[0];
140
141 rotWS[0] = rotWS[0] + rotDiffLS[0];
142 rotWS[1] = rotWS[1] + rotDiffLS[1];
143 rotWS[2] = rotWS[2] + rotDiffLS[2];
144 }
145
147 m_LagOffsetPosition[0] = Math.SmoothCD(m_LagOffsetPosition[0], posDiffLS[0], m_fLagOffsetVelocityX, 0.3, 1000, pDt);
148 m_LagOffsetPosition[1] = Math.SmoothCD(m_LagOffsetPosition[1], posDiffLS[1], m_fLagOffsetVelocityY, 0.3, 1000, pDt);
149 m_LagOffsetPosition[2] = Math.SmoothCD(m_LagOffsetPosition[2], posDiffLS[2], m_fLagOffsetVelocityZ, 0.3, 1000, pDt);
150
151 m_LagOffsetOrientation[0] = Math.SmoothCDPI2PI(m_LagOffsetOrientation[0], rotWS[0], m_fLagOffsetVelocityYaw, 0.3, 1000, pDt);
152 m_LagOffsetOrientation[1] = Math.SmoothCDPI2PI(m_LagOffsetOrientation[1], rotWS[1], m_fLagOffsetVelocityPitch, 0.3, 1000, pDt);
153 m_LagOffsetOrientation[2] = Math.SmoothCDPI2PI(m_LagOffsetOrientation[2], rotWS[2], m_fLagOffsetVelocityRoll, 0.3, 1000, pDt);
154
156 vector rot = m_LagOffsetOrientation * Math.RAD2DEG;
157 if (vehicle)
158 {
159 vector rotTM[3];
160 Math3D.YawPitchRollMatrix(rot, rotTM);
161
162 Math3D.MatrixInvMultiply3(playerTransformWS, rotTM, rotTM);
163
164 // because we don't have m_fIgnoreParentYaw set
165 vector tempRot = Math3D.MatrixToAngles(rotTM);
166 rot[0] = tempRot[0];
167 }
168
169 rot[0] = rot[0] * (1.0 + (Math.InverseLerp(0.0, 1.0 + CONST_ANGULAR_LAG_YAW_STRENGTH, Math.AbsFloat(rotDiffLS[0])) * CONST_ANGULAR_LAG_YAW_STRENGTH));
170 rot[1] = rot[1] * (1.0 + (Math.InverseLerp(0.0, 1.0 + CONST_ANGULAR_LAG_PITCH_STRENGTH, Math.AbsFloat(rotDiffLS[1])) * CONST_ANGULAR_LAG_PITCH_STRENGTH));
171 rot[2] = rot[2] * (1.0 + (Math.InverseLerp(0.0, 1.0 + CONST_ANGULAR_LAG_ROLL_STRENGTH, Math.AbsFloat(rotDiffLS[2])) * CONST_ANGULAR_LAG_ROLL_STRENGTH));
172
173 rot = GetCurrentOrientation() + rot;
174
175 float distance = m_fDistance;
176 distance -= (2 * Math.Clamp(Math.InverseLerp(UP_ANGLE_CAP * 0.5, CONST_UD_MAX, rot[1]), 0, 1));
177
178 if (rot[1] > UP_ANGLE_CAP)
179 {
180 rot[1] = UP_ANGLE_CAP;
181 }
182
183 Math3D.YawPitchRollMatrix(rot, pOutResult.m_CameraTM);
184
186 pOutResult.m_CameraTM[3] = cameraPosition - m_LagOffsetPosition;
187
189 pOutResult.m_fDistance = distance;
190 pOutResult.m_fUseHeading = 0.0;
191 pOutResult.m_fInsideCamera = 0.0;
192 pOutResult.m_fIgnoreParentRoll = 1.0;
193 pOutResult.m_fIgnoreParentPitch = 1.0;
194 //pOutResult.m_fIgnoreParentYaw = 1.0;
195 pOutResult.m_bUpdateEveryFrame = g_Game.IsPhysicsExtrapolationEnabled();
196
197 StdFovUpdate(pDt, pOutResult);
198
199 super.OnUpdate(pDt, pOutResult);
200 }
201
203 {
204 vector a;
205 a[0] = m_fUpDownAngle;
206 a[1] = m_fLeftRightAngle;
207 a[2] = 0;
208 return a;
209 }
210
212 {
213 vector a;
214 a[0] = m_fUpDownAngleAdd;
216 a[2] = 0;
217 return a;
218 }
219
222 protected float m_fDistance;
223
225 protected float m_fUpDownAngle;
226 protected float m_fUpDownAngleAdd;
227 protected float m_fLeftRightAngle;
228 protected float m_fLeftRightAngleAdd;
229
233 protected float m_fLagOffsetVelocityX[1];
234 protected float m_fLagOffsetVelocityY[1];
235 protected float m_fLagOffsetVelocityZ[1];
236 protected float m_fLagOffsetVelocityYaw[1];
237 protected float m_fLagOffsetVelocityPitch[1];
238 protected float m_fLagOffsetVelocityRoll[1];
239
242}
this is main camera class
Definition enmath.c:7
Native class for boats - handles physics simulation.
Definition boat.c:32
DayZGame g_Game
Definition dayzgame.c:3942
float m_fDistance
camera distance (external cameras only)
Definition dayzplayer.c:63
DayZPlayer m_pPlayer
data
Definition dayzplayer.c:135
class DayZPlayerCameraResult DayZPlayerCamera(DayZPlayer pPlayer, HumanInputController pInput)
Definition dayzplayer.c:56
vector GetCurrentOrientation()
Definition dayzplayer.c:112
float m_fLeftRightAngle
left right angle in rad (in freelook only)
float m_fUpDownAngle
up down angle in rad
float m_fLeftRightAngleAdd
left right angle in rad (in freelook only)
float m_fUpDownAngleAdd
up down angle in rad
vector m_CameraOffsetMS
model space offset
float UpdateLRAngleUnlocked(out float pAngle, out float pAngleAdd, float pMin, float pMax, float pDt)
float m_CurrentCameraYaw
float m_CurrentCameraPitch
float UpdateUDAngleUnlocked(out float pAngle, out float pAngleAdd, float pMin, float pMax, float pDt)
void StdFovUpdate(float pDt, out DayZPlayerCameraResult pOutResult)
float m_CurrentCameraRoll
vector m_LagOffsetOrientation
void DayZPlayerCamera3rdPersonVehicle(DayZPlayer pPlayer, HumanInputController pInput)
const float CONST_ANGULAR_LAG_ROLL_STRENGTH
const float CONST_ANGULAR_VELOCITY_STRENGTH
float m_fLagOffsetVelocityYaw[1]
const float UP_ANGLE_CAP
const float CONST_ANGULAR_LAG_PITCH_STRENGTH
vector m_LagOffsetPosition
lag offsets
float m_fLagOffsetVelocityPitch[1]
float m_fLagOffsetVelocityY[1]
float m_fLagOffsetVelocityRoll[1]
float m_fLagOffsetVelocityX[1]
const float CONST_ANGULAR_LAG_YAW_STRENGTH
Transport m_Transport
cache
float m_fLagOffsetVelocityZ[1]
const float CONST_LINEAR_VELOCITY_STRENGTH
proto native external vector GetOrigin()
Returns origin of Entity.
proto native vector GetVelocity(notnull IEntity ent)
Returns linear velocity.
proto vector dBodyGetAngularVelocity(notnull IEntity body)
Gets angular velocity for a rigidbody.
void OnUpdate()
Definition tools.c:349
void OnActivate()