6 static private const float FREELOOK_FADE_SPEED = 4.0;
7 static private const float SLOPE_FACTOR = 1.0 / 90.0;
9 private float m_fFreelookBlend;
12 void CharacterCamera3rdPersonProne(CameraHandlerComponent pCameraHandler)
15 m_CameraOffsetMS =
"0.0 0.3 0.0";
16 m_CameraOffsetLS =
"0.0 0.2 0.0";
17 m_fShoulderWidth = 0.4;
21 override void OnUpdate(
float pDt, out ScriptedCameraItemResult pOutResult)
23 pOutResult.m_fFOV = m_fFOV;
24 bool sprinting = m_ControllerComponent.IsSprinting();
26 pOutResult.m_fFOV = m_fFOV + 2 * m_fBobScale;
28 HandleFreelook(pDt, pOutResult);
30 super.OnUpdate(pDt, pOutResult);
33 if (m_CharacterCameraHandler)
34 m_CharacterCameraHandler.AddShakeToToTransform(pOutResult.m_CameraTM, pOutResult.m_fFOV);
38 void HandleFreelook(
float pDt, inout ScriptedCameraItemResult pOutResult)
40 vector charaRot = m_OwnerCharacter.GetLocalYawPitchRoll();
42 float tSlope = Math.Clamp(charaRot[1] * SLOPE_FACTOR, -1.0, 1.0);
43 float tSlopeUp = Math.Clamp(tSlope, 0.0, 1.0);
44 float tSlopeDn = Math.Clamp(tSlope, -1.0, 0.0) * -1.0;
46 if (m_ControllerComponent.IsFreeLookEnabled())
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);
57 m_CharacterHeadAimingComponent.ResetLimitAnglesOverride();
60 vector lookAngles = m_CharacterHeadAimingComponent.GetLookAngles();
63 float yawMax = Math.Lerp(160.0, 40.0, Math.Max(0.0, tSlope));
64 lookAngles[0] = Math.Clamp(lookAngles[0], -yawMax, yawMax);
65 float tYaw = Math.InverseLerp(0.0, 160.0, Math.AbsFloat(lookAngles[0]));
67 float lookPitch = lookAngles[1] + charaRot[1];
68 lookAngles[1] = Math.Lerp(charaRot[1], -charaRot[1], tYaw);
70 pOutResult.m_vBacktraceDir = lookAngles.AnglesToVector();
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));