Dayz Explorer 1.28.160049
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 = GetGame().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 = GetGame().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
vector m_CameraOffsetMS
model space offset
float m_fLeftRightAngleAdd
left right angle in rad (in freelook only)
float m_fDistance
distance from start
float m_fUpDownAngleAdd
up down angle in rad
float m_fLeftRightAngle
left right angle in rad (in freelook only)
float m_fUpDownAngle
up down angle in rad
Definition enmath.c:7
Native class for boats - handles physics simulation.
Definition boat.c:28
vector GetAdditiveAngles()
Definition dayzplayer.c:87
vector GetBaseAngles()
Definition dayzplayer.c:82
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]
class DayZPlayerCamera1stPersonVehicle extends DayZPlayerCamera1stPerson CONST_UD_MIN
down limit
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 CGame GetGame()
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 OnActivate()