DayZ Scripts
v1.21.156300 ยท Jun 20, 2023
 
Loading...
Searching...
No Matches
DayZPlayerCamera3rdPerson.c
Go to the documentation of this file.
1// *************************************************************************************
2// ! DayZPlayerCamera3rdPerson - base for 3rd person cameras
3// *************************************************************************************
5{
6 static const float CONST_UD_MIN = -85.0;
7 static const float CONST_UD_MAX = 85.0;
8
9 static const float CONST_LR_MIN = -160.0;
10 static const float CONST_LR_MAX = 160.0;
11
13 {
14 if (pInput.Camera3rdIsRightShoulder())
15 {
17 }
18 else
19 {
21 }
22
26 m_fLeanDistance = 0.3;
28 }
29
30
31 //
32 override void OnActivate(DayZPlayerCamera pPrevCamera, DayZPlayerCameraResult pPrevCameraResult)
33 {
34 super.OnActivate(pPrevCamera, pPrevCameraResult);
35
36 if (pPrevCamera)
37 {
38 vector baseAngles = pPrevCamera.GetBaseAngles();
39 m_fUpDownAngle = baseAngles[0];
40 m_fLeftRightAngle = baseAngles[1];
41
42 vector addAngles = pPrevCamera.GetAdditiveAngles();
43 m_fUpDownAngleAdd = addAngles[0];
44 m_fLeftRightAngleAdd = addAngles[1];
45 }
46 }
47
48 //
49 override void OnUpdate(float pDt, out DayZPlayerCameraResult pOutResult)
50 {
51 m_pPlayer.GetMovementState(m_MovementState);
52
56
58
59 // update l/r offsets and set it as
61 {
63 }
64 else
65 {
67 }
68
70
72 Math3D.YawPitchRollMatrix(GetCurrentOrientation(), pOutResult.m_CameraTM);
73
75 if (m_iBoneIndex != -1)
76 {
77 pOutResult.m_CameraTM[3] = m_pPlayer.GetBonePositionMS(m_iBoneIndex);
78 }
79 else
80 {
81 pOutResult.m_CameraTM[3] = "0 0 0";
82 }
83
85 vector msOffset = m_CameraOffsetMS;
86 vector lsOffset = m_CameraOffsetLS;
87
89 {
90 lsOffset[0] = lsOffset[0] + shoulderDist;
91 }
92 else
93 {
94 msOffset[0] = msOffset[0] + shoulderDist;
95 }
96
97 // ls offset + ms offset + shoulder width
98 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;
99
101 pOutResult.m_fDistance = m_fDistance;
102 pOutResult.m_fUseHeading = 1.0;
103 pOutResult.m_fInsideCamera = 0.0;
104 pOutResult.m_fPredictCollisionRadius = m_fPredictCollisionRadius;
105
107 StdFovUpdate(pDt, pOutResult);
109 }
110
112 {
113 vector a;
114 a[0] = m_fUpDownAngle;
115 a[1] = m_fLeftRightAngle;
116 a[2] = 0;
117 return a;
118 }
119
121 {
122 vector a;
123 a[0] = m_fUpDownAngleAdd;
125 a[2] = 0;
126 return a;
127 }
128
129 override string GetCameraName()
130 {
131 return "DayZPlayerCamera3rdPerson";
132 }
133
135 protected int m_iBoneIndex = -1;
138 protected float m_fDistance;
139 protected float m_fShoulderWidth;
140 protected bool m_bShoulderInLS;
141 protected float m_fRoll;
142 protected float m_fLeanDistance;
143
144
146 protected float m_fUpDownAngle;
147 protected float m_fUpDownAngleAdd;
148 protected float m_fLeftRightAngle;
149 protected float m_fLeftRightAngleAdd;
150
152 protected float m_fCameraLRShoulder; // -1..1 shoulderness :)
153 protected float m_fCameraLRShoulderVel[1]; // 0
154
157
160}
161
162
163
164
165// *************************************************************************************
166// ! DayZPlayerCamera3rdPersonErc - 3rd person erected
167// *************************************************************************************
169{
172 //Print("new camera: DayZPlayerCamera3rdPersonErc");
173
175 m_CameraOffsetMS = "0.0 1.4 0.0";
176 m_CameraOffsetLS = "0.0 0.3 0.0";
179 }
180}
181
182
183// *************************************************************************************
184// ! DayZPlayerCamera3rdPersonJump - 3rd person jump
185// *************************************************************************************
187{
189 {
190 //Print("new camera: DayZPlayerCamera3rdPersonJump");
191
193 m_fDelay = 0.15;
194 m_fDamping = 0.25;
195
197 m_fJumpStartY = pPlayer.GetOrigin()[1];
198 m_fJumpOffset = 0;
199 m_fDelayTimer = 0;
200 }
201
202 //
203 override void OnUpdate(float pDt, out DayZPlayerCameraResult pOutResult)
204 {
205 super.OnUpdate(pDt, pOutResult);
206
207 float yPos = m_pPlayer.GetOrigin()[1];
208 float yDiff = yPos - m_fJumpStartY;
209 yDiff = Math.Clamp(yDiff, 0.0, 2.0);
210
211 if( m_fDelayTimer < m_fDelay )
212 {
213 m_fDelayTimer += pDt;
215 }
216 else
217 {
219 }
220
221 float newY = pOutResult.m_CameraTM[3][1] - m_fJumpOffset;
222 pOutResult.m_CameraTM[3][1] = newY;
223 }
224
226 float m_fDelay;
228
234}
235
236// *************************************************************************************
237// ! DayZPlayerCamera3rdPersonJump - 3rd person jump
238// *************************************************************************************
240{
243 //Print("new camera: DayZPlayerCamera3rdPersonClimb");
244 m_fDistance = 1.0;
245 m_CameraOffsetMS = "0.0 0.3 -0.6";
246 m_iBoneIndex = pPlayer.GetBoneIndexByName("Spine");
248 }
249}
250
251// *************************************************************************************
252// ! DayZPlayerCamera3rdPersonErc - 3rd person erected sprint
253// *************************************************************************************
255{
257 {
258 //Print("new camera: DayZPlayerCamera3rdPersonErcSpr");
259
260 m_fDistance = 2.0;
261 m_CameraOffsetMS = "0.0 1.3 0.0";
262 m_CameraOffsetLS = "0.0 0.3 0.0";
263 m_fShoulderWidth = 0.15;
264
265 m_iPelvisBone = pPlayer.GetBoneIndexByName("Pelvis");
266 if (m_iPelvisBone == -1)
267 {
268 Print("DayZPlayerCamera3rdPersonErcSpr: hips bone not found");
269 }
270
271 m_fTime = 0.0;
272 }
273
274
275
276 //
277 override void OnUpdate(float pDt, out DayZPlayerCameraResult pOutResult)
278 {
279 m_fTime += pDt * 5;
281 vector tm[4];
282
283 m_pPlayer.GetBoneTransformLS(m_iPelvisBone, tm);
285 float xShift = tm[1][0];
286 m_CurrentCameraRoll = xShift * 3.0; // 3 is just made up value i like :)
288 // m_CurrentCameraRoll = (sin(1.5 * m_fTime)); // + 0.3 * sin(3.6 * m_fTime) + 0.2 * sin(0.7 * m_fTime)) / 1.3 * 3;
289
291 super.OnUpdate(pDt, pOutResult);
292
293 //pOutResult.m_fFovMultiplier = 1.2;
295
296
297 protected int m_iPelvisBone;
298 protected float m_fTime;
299
303// *************************************************************************************
304// ! DayZPlayerCamera3rdPersonErcRaised - 3rd person erected raised
305// *************************************************************************************
310 //Print("new camera: DayZPlayerCamera3rdPersonErcRaised");
313 if ( pPlayer.GetCurrentPerItemCameraUD () == DayZPlayerCameras.PERITEMUD_EMPTYHANDED )
315 // no item in hands
316 m_fDistance = 1.2;
318 m_CameraOffsetMS = "0.0 1.3 0.2";
319 m_CameraOffsetLS = "0.0 0.3 0.0";
320
321 }
322 else if ( pPlayer.GetCurrentPerItemCameraUD () == DayZPlayerCameras.PERITEMUD_TWOHANDED )
323 {
324 // two handed
325 m_fDistance = 1.2;
326 m_fShoulderWidth = 0.4;
327 m_CameraOffsetMS = "0.0 1.3 0.2";
328 m_CameraOffsetLS = "0.0 0.3 0.0";
329 }
330 else if ( pPlayer.GetCurrentPerItemCameraUD () == DayZPlayerCameras.PERITEMUD_ONEHANDED )
331 {
332 // one handed
333 m_fDistance = 1.2;
334 m_fShoulderWidth = 0.4;
335 m_CameraOffsetMS = "0.0 1.3 0.2";
336 m_CameraOffsetLS = "0.0 0.3 0.0";
337 }
338 else
339 {
340 // weapons in hands
341 m_fDistance = 0.8;
342 m_CameraOffsetMS = "0.0 1.3 0.2";
343 m_CameraOffsetLS = "0.0 0.3 0.0";
344 m_fShoulderWidth = 0.5;
345 }
346 }
347
348 override bool IsCamera3rdRaised()
349 {
350 return true;
352}
353
354
355// *************************************************************************************
356// ! DayZPlayerCamera3rdPersonErcRaised - 3rd person erected raised
357// *************************************************************************************
358class DayZPlayerCamera3rdPersonErcRaisedMelee extends DayZPlayerCamera3rdPersonErcRaised
359{
361 {
362 //Print("new camera: DayZPlayerCamera3rdPersonErcRaisedMelee");
363
366 }
367
369 {
372 }
373}
374
375
376// *************************************************************************************
377// ! DayZPlayerCamera3rdPersonCrouch - 3rd person crouch
378// *************************************************************************************
380{
381 static const float CONST_CAMERAMOVEMENTHEIGH = 0.4; // 0 idle, 0.15 walk 0.3 run/sprint
382
384 {
385 //Print("new camera: DayZPlayerCamera3rdPersonCrouch");
386
387 m_fDistance = 1.4;
388 m_CameraOffsetMS = "0.0 0.7 0.1";
389 m_CameraOffsetLS = "0.0 0.3 0.0";
390 m_fShoulderWidth = 0.3;
391 }
392
393 //
394 override void OnUpdate(float pDt, out DayZPlayerCameraResult pOutResult)
395 {
396 m_pPlayer.GetMovementState(m_MovementState);
397
399 float movement = (Limit(m_MovementState.m_iMovement, 1, 3) - 1.0) * 0.5;
400 movement *= CONST_CAMERAMOVEMENTHEIGH;
401 m_fCameraHeight = Math.SmoothCD(m_fCameraHeight, movement, m_fCameraHeightVel, 0.2, 1000, pDt);
403
405 super.OnUpdate(pDt, pOutResult);
406 }
407
408 protected float m_fCameraHeight; // -1..1 shoulderness :)
409 protected float m_fCameraHeightVel[1]; // 0
410}
411
412
413// *************************************************************************************
414// ! DayZPlayerCamera3rdPersonCrouchRaised- 3rd person crouch raised
415// *************************************************************************************
416class DayZPlayerCamera3rdPersonCrouchRaised extends DayZPlayerCamera3rdPersonCrouch
417{
419 {
420 //Print("new camera: DayZPlayerCamera3rdPersonCrouchRaised");
421
422 m_fDistance = 0.8;
423 m_CameraOffsetMS = "0.0 0.8 0.1"; // being overwritten by m_CameraOffsetMS[1] from DayZPlayerCamera3rdPersonCrouch
424 m_CameraOffsetLS = "0.0 0.3 0.0";
425 m_fShoulderWidth = 0.5;
426 }
427
428 override bool IsCamera3rdRaised()
429 {
430 return true;
431 }
432}
433
434
435// *************************************************************************************
436// ! DayZPlayerCamera3rdPersonProneRaised - 3rd person prone raised
437// *************************************************************************************
439{
440 protected float m_LookAtLRAngle;
441
442 float UpdateLRAngleLookAt(float pMin, float pMax, float pDt)
443 {
446 {
449
450 m_fLRAngleVel[0] = 0; // reset filter
451 }
452 else
453 {
454 // smooth value back to 0
456 // m_fLeftRightAngle = 0.9 * (1.0 - pDt);
457 }
458
459 return m_LookAtLRAngle;
460 }
461
462
463 //
464 override void OnUpdate(float pDt, out DayZPlayerCameraResult pOutResult)
465 {
468
469 float orientYaw = m_pPlayer.GetOrientation()[0];
470 float headYaw = m_pInput.GetHeadingAngle() * Math.RAD2DEG;
471 m_CurrentCameraYaw = -fixAngle_180_180(orientYaw + headYaw);
472
473 // Print("OY: " + orientYaw.ToString() + " HY: " + headYaw.ToString());
474
475 // update l/r offsets and set it as
476
478
480 {
482 }
483 else
484 {
486 }
487
488 float shoulderDist = m_fCameraLRShoulder * m_fShoulderWidth;
489
491 Math3D.YawPitchRollMatrix(GetCurrentOrientation(), pOutResult.m_CameraTM);
492
494 if (m_iBoneIndex != -1)
495 {
496 pOutResult.m_CameraTM[3] = m_pPlayer.GetBonePositionMS(m_iBoneIndex);
497 }
498 else
499 {
500 pOutResult.m_CameraTM[3] = "0 0 0";
501 }
502
504 vector msOffset = m_CameraOffsetMS;
505 vector lsOffset = m_CameraOffsetLS;
506
507 lsOffset[0] = lsOffset[0] + shoulderDist;
508
509 // ls offset + ms offset + shoulder width
510 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;
511
512 m_CurrentCameraYaw = UpdateLRAngleLookAt(-180, 180, pDt);
513 Math3D.YawPitchRollMatrix(GetCurrentOrientation(), pOutResult.m_CameraTM);
514
516 pOutResult.m_fDistance = m_fDistance;
517 pOutResult.m_fUseHeading = 1.0;
518 pOutResult.m_fInsideCamera = 0.0;
519 pOutResult.m_fPositionModelSpace = 1.0;
520 pOutResult.m_bUpdateWhenBlendOut = false;
521
523 StdFovUpdate(pDt, pOutResult);
525 }
526}
527
528// *************************************************************************************
529// ! DayZPlayerCamera3rdPersonProne - 3rd person prone
530// *************************************************************************************
532{
534 {
535 //Print("new camera: DayZPlayerCamera3rdPersonProne");
536 m_iBoneIndex = pPlayer.GetBoneIndexByName ("Camera3rd_Helper");
537 m_fDistance = 1.0;
538 m_CameraOffsetMS = "0.0 0.4 0.0";
539 m_CameraOffsetLS = "0.0 0.2 0.0";
540 m_fShoulderWidth = 0.5;
541 }
542
543}
544
545// *************************************************************************************
546// ! DayZPlayerCamera3rdPersonProneRaised - 3rd person prone raised
547// *************************************************************************************
549{
552 //Print("new camera: DayZPlayerCamera3rdPersonProneRaised");
553 m_iBoneIndex = pPlayer.GetBoneIndexByName ("Camera3rd_Helper");
554 m_fDistance = 1.0;
555 m_CameraOffsetMS = "0.0 0.4 0.0";
556 m_CameraOffsetLS = "0.0 0.2 0.0";
557 m_fShoulderWidth = 0.5;
558 }
559
560 override bool IsCamera3rdRaised()
561 {
562 return true;
563 }
564}
static const float CONST_UD_MAX
up limit
protected float m_fUpDownAngleAdd
up down angle in rad
static const float CONST_LR_MIN
down limit
protected float m_fLeftRightAngle
left right angle in rad (in freelook only)
static const float CONST_LR_MAX
up limit
protected float m_fUpDownAngle
up down angle in rad
protected float m_fLeftRightAngleAdd
left right angle in rad (in freelook only)
protected int m_iBoneIndex
main bone
static const float CONST_UD_MIN
down limit
protected float m_fCameraHeightVel[1]
void DayZPlayerCamera3rdPersonProne(DayZPlayer pPlayer, HumanInputController pInput)
protected float m_fCameraLRShoulder
shoulder offsets
float m_jumpOffsetVelocity[1]
protected vector m_CameraOffsetLS
local space offset
void DayZPlayerCamera3rdPersonJump(DayZPlayer pPlayer, HumanInputController pInput)
static const float CONST_UD_MAX
up limit
class DayZPlayerCamera3rdPersonJump extends DayZPlayerCamera3rdPersonErc DayZPlayerCamera3rdPersonClimb(DayZPlayer pPlayer, HumanInputController pInput)
protected float m_fUpDownAngleAdd
up down angle in rad
float m_fDelay
runtime config
protected float m_fCameraHeight
class DayZPlayerCamera3rdPersonProne extends DayZPlayerCamera3rdPersonProneBase DayZPlayerCamera3rdPersonProneRaised(DayZPlayer pPlayer, HumanInputController pInput)
override bool IsCamera3rdRaised()
protected float m_fLeftRightAngle
left right angle in rad (in freelook only)
protected float m_fLeanDistance
shift on leaning
class DayZPlayerCamera3rdPersonCrouchRaised extends DayZPlayerCamera3rdPersonCrouch m_LookAtLRAngle
protected float m_fCameraLRShoulderVel[1]
protected float m_fUpDownAngle
runtime values
void DayZPlayerCamera3rdPersonErcSpr(DayZPlayer pPlayer, HumanInputController pInput)
void DayZPlayerCamera3rdPerson(DayZPlayer pPlayer, HumanInputController pInput)
float m_fDelayTimer
runtime values
protected float m_fPredictCollisionRadius
collision prediction
ref HumanMovementState m_MovementState
movement state
protected int m_iBoneIndex
runtime config
float UpdateLRAngleLookAt(float pMin, float pMax, float pDt)
static const float CONST_UD_MIN
down limit
float m_fJumpStartY
protected bool m_bShoulderInLS
true - shoulder is in local space
protected float m_fShoulderWidth
shoulder camera widths
protected vector m_CameraOffsetMS
model space offset
float m_fJumpOffset
class DayZPlayerCamera3rdPersonErcRaisedMelee extends DayZPlayerCamera3rdPersonErcRaised CONST_CAMERAMOVEMENTHEIGH
protected float m_fTime
protected float m_fDistance
distance from start
protected int m_iPelvisBone
protected float m_WeaponSwayModifier
float UpdateLRAngleUnlocked(out float pAngle, out float pAngleAdd, float pMin, float pMax, float pDt)
protected float m_fLRAngleVel[1]
protected float m_CurrentCameraPitch
float UpdateUDAngleUnlocked(out float pAngle, out float pAngleAdd, float pMin, float pMax, float pDt)
float Limit(float pV, float pMin, float pMax)
limit function
void StdFovUpdate(float pDt, out DayZPlayerCameraResult pOutResult)
protected bool m_bForceFreeLook
void InitCameraOnPlayer(bool force=false)
float fixAngle_180_180(float pAngle)
protected float m_CurrentCameraYaw
void UpdateCameraNV(PlayerBase player)
void ProcessCameraShake(float delta, out float leftRight, out float upDown)
protected float m_CurrentCameraRoll
void DayZPlayerCamera3rdPersonCrouchRaised(DayZPlayer pPlayer, HumanInputController pInput)
override void OnUpdate(float pDt, out DayZPlayerCameraResult pOutResult)
void DayZPlayerCamera3rdPersonJump(DayZPlayer pPlayer, HumanInputController pInput)
void DayZPlayerCamera3rdPersonErcSpr(DayZPlayer pPlayer, HumanInputController pInput)
void DayZPlayerCamera3rdPersonErcRaisedMelee(DayZPlayer pPlayer, HumanInputController pInput)
void DayZPlayerCamera3rdPersonProne(DayZPlayer pPlayer, HumanInputController pInput)
this is main camera class
override void OnActivate(DayZPlayerCamera pPrevCamera, DayZPlayerCameraResult pPrevCameraResult)
protected float m_fCameraLRShoulder
shoulder offsets
override void OnUpdate(float pDt, out DayZPlayerCameraResult pOutResult)
protected vector m_CameraOffsetLS
local space offset
protected float m_fUpDownAngleAdd
up down angle in rad
protected float m_fLeftRightAngle
left right angle in rad (in freelook only)
protected float m_fLeanDistance
shift on leaning
protected float m_fRoll
camera roll (deprecated)
protected float m_fUpDownAngle
up down angle in rad
void DayZPlayerCamera3rdPerson(DayZPlayer pPlayer, HumanInputController pInput)
protected float m_fLeftRightAngleAdd
left right angle in rad (in freelook only)
protected float m_fPredictCollisionRadius
collision prediction
protected bool m_bShoulderInLS
true - shoulder is in local space
protected float m_fShoulderWidth
shoulder camera widths
protected vector m_CameraOffsetMS
model space offset
protected float m_fDistance
distance from start
static const int PERITEMUD_EMPTYHANDED
uninitialized / invalid per item camera user data
static const int PERITEMUD_TWOHANDED
for empty hands
static const int PERITEMUD_ONEHANDED
for empty hands
proto native float GetHeadingAngle()
returns main heading angle (in radians) -PI .. PI (this is world Y angle player is actualy pointing t...
proto native vector GetAimChange()
returns per tick aim change (in radians)
proto native bool Camera3rdIsRightShoulder()
returns true if camera is on right/ false-left shoulder
proto native void Override3rdIsRightShoulder(bool pOverride, bool pValue)
proto native bool CameraIsFreeLook()
returns true if freelook is active
int m_iMovement
current stance (DayZPlayerConstants.STANCEIDX_ERECT, ...), only if the command has a stance
Definition human.c:1118
float m_fLeaning
current movement (0 idle, 1 walk, 2-run, 3-sprint), only if the command has a movement
Definition human.c:1119
Definition EnMath.c:7
float m_fDistance
camera distance (external cameras only)
Definition dayzplayer.c:63
float m_fPredictCollisionRadius
sphere radius used for collision prediction
Definition dayzplayer.c:65
protected DayZPlayer m_pPlayer
data
Definition dayzplayer.c:135
protected HumanInputController m_pInput
human input
Definition dayzplayer.c:136
class DayZPlayerCameraResult DayZPlayerCamera(DayZPlayer pPlayer, HumanInputController pInput)
Definition dayzplayer.c:56
vector GetCurrentOrientation()
Definition dayzplayer.c:112
proto void Print(void var)
Prints content of variable to console/log.
static proto void YawPitchRollMatrix(vector ang, out vector mat[3])
Creates rotation matrix from angles.
static proto float Clamp(float value, float min, float max)
Clamps 'value' to 'min' if it is lower than 'min', or to 'max' if it is higher than 'max'.
static proto float SmoothCD(float val, float target, inout float velocity[], float smoothTime, float maxVelocity, float dt)
Does the CD smoothing function - easy in | easy out / S shaped smoothing.
static const float RAD2DEG
Definition EnMath.c:16
proto native void OnUpdate()
Definition tools.c:338