Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
CharacterCamera3rdPersonProne.c
Go to the documentation of this file.
1// *************************************************************************************
2// ! CharacterCamera3rdPersonProne - 3rd person camera in prone stance
3// *************************************************************************************
4class CharacterCamera3rdPersonProne extends CharacterCamera3rdPersonBase
5{
6 static private const float FREELOOK_FADE_SPEED = 4.0;
7 static private const float SLOPE_FACTOR = 1.0 / 90.0;
8
9 private float m_fFreelookBlend;
10
11 //------------------------------------------------------------------------------------------------
12 void CharacterCamera3rdPersonProne(CameraHandlerComponent pCameraHandler)
13 {
14 m_fDistance = 1.4;
15 m_CameraOffsetMS = "0.0 0.3 0.0";
16 m_CameraOffsetLS = "0.0 0.2 0.0";
17 m_fShoulderWidth = 0.4;
18 }
19
20 //------------------------------------------------------------------------------------------------
21 override void OnUpdate(float pDt, out ScriptedCameraItemResult pOutResult)
22 {
23 pOutResult.m_fFOV = m_fFOV;
24 bool sprinting = m_ControllerComponent.IsSprinting();
25 if( sprinting )
26 pOutResult.m_fFOV = m_fFOV + 2 * m_fBobScale;
27
28 HandleFreelook(pDt, pOutResult);
29
30 super.OnUpdate(pDt, pOutResult);
31
32 // Apply shake
33 if (m_CharacterCameraHandler)
34 m_CharacterCameraHandler.AddShakeToToTransform(pOutResult.m_CameraTM, pOutResult.m_fFOV);
35 }
36
37 //------------------------------------------------------------------------------------------------
38 void HandleFreelook(float pDt, inout ScriptedCameraItemResult pOutResult)
39 {
40 vector charaRot = m_OwnerCharacter.GetLocalYawPitchRoll();
41
42 float tSlope = Math.Clamp(charaRot[1] * SLOPE_FACTOR, -1.0, 1.0); // [-1, 1]
43 float tSlopeUp = Math.Clamp(tSlope, 0.0, 1.0); // [0, 1]
44 float tSlopeDn = Math.Clamp(tSlope, -1.0, 0.0) * -1.0; // [0, 1]
45
46 if (m_ControllerComponent.IsFreeLookEnabled())
47 {
48 // Override angle limits based on terrain slope
49 float downLimit = Math.Lerp(-60.0, 0.0, tSlopeDn);
50 float upLimit = Math.Lerp(89.9, 40.0, tSlope);
51 float leftLimit = Math.Lerp(-160.0, -40.0, tSlope);
52 float rightLimit = Math.Lerp(160.0, 80.0, tSlope);
53 m_CharacterHeadAimingComponent.SetLimitAnglesOverride(downLimit, upLimit, leftLimit, rightLimit);
54 }
55 else
56 {
57 m_CharacterHeadAimingComponent.ResetLimitAnglesOverride();
58 }
59
60 vector lookAngles = m_CharacterHeadAimingComponent.GetLookAngles();
61
62 // Limit yaw on slopes.
63 float yawMax = Math.Lerp(160.0, 40.0, Math.Max(0.0, tSlope));
64 lookAngles[0] = Math.Clamp(lookAngles[0], -yawMax, yawMax); // Clamp backtrace direction's Yaw
65 float tYaw = Math.InverseLerp(0.0, 160.0, Math.AbsFloat(lookAngles[0]));
66
67 float lookPitch = lookAngles[1] + charaRot[1]; // Save current pitch to be used later
68 lookAngles[1] = Math.Lerp(charaRot[1], -charaRot[1], tYaw); // Calc. backtrace direction's Pitch
69
70 pOutResult.m_vBacktraceDir = lookAngles.AnglesToVector(); // Custom backtrace direction
71
72 // Additionally, tweak the PitchLimitReduction curve multiplier
73 float pitchReductionMultiplier = 1.0;
74 pitchReductionMultiplier = Math.Lerp(1.0, 0.7, tSlopeUp);
75 m_CharacterHeadAimingComponent.SetPitchLimitReductionMultiplier(Math.Lerp(1.0, pitchReductionMultiplier, m_fFreelookBlend));
76 }
77}
float m_fDistance
override void OnUpdate()