6 void CharacterCamera1stPersonUnconscious(CameraHandlerComponent pCameraHandler)
10 void PrintMatrix(
string Name,
const vector InMatrix[4])
13 Print(
string.Format(
"%1 %2 %3 %4 %5", Name, InMatrix[0], InMatrix[1], InMatrix[2], InMatrix[3]),
LogLevel.ERROR);
16 override void OnUpdate(
float pDt, out ScriptedCameraItemResult pOutResult)
19 super.OnUpdate(pDt, pOutResult);
21 pOutResult.m_vBaseAngles =
"0 0 0";
22 pOutResult.m_fUseHeading = 0.0;
27 pOutResult.m_iDirectBone = sm_iCameraBoneIndex;
29 vector animationBoneWorldTM [4];
30 int headBoneIndex = m_OwnerCharacter.GetAnimation().GetBoneIndex(
"Head");
31 m_OwnerCharacter.GetAnimation().GetBoneMatrix(headBoneIndex, animationBoneWorldTM);
34 m_OwnerCharacter.GetWorldTransform(charMat);
36 Math3D.MatrixMultiply4(charMat, animationBoneWorldTM, animationBoneWorldTM);
40 vector lookAngles = m_CharacterHeadAimingComponent.GetLookAngles();
41 float y = lookAngles[0] - 180.0;
50 if (m_OwnerCharacter.GetAnimationComponent().IsRagdollActive())
53 Math3D.AnglesToMatrix(lookAngles, pOutResult.m_CameraTM);
56 m_OwnerCharacter.GetAnimation().GetBoneMatrix(headBoneIndex, m_ragdollHeadWorldTR);
58 Math3D.MatrixMultiply3(m_ragdollHeadWorldTR, pOutResult.m_CameraTM, m_ragdollHeadWorldTR);
61 pOutResult.m_CameraTM[3] =
"0 0 0";
63 Math3D.MatrixMultiply4(charMat, m_ragdollHeadWorldTR, m_ragdollHeadWorldTR);
64 Math3D.MatrixToQuat(m_ragdollHeadWorldTR, m_ragdollHeadQuatWS);
66 m_fCurrentEaseOutRagdollSmoothTime = m_fEaseOutRagdollSmoothTime;
68 else if (m_fCurrentEaseOutRagdollSmoothTime > 0.0 && m_ragdollHeadWorldTR[0] != vector.Zero && m_ragdollHeadWorldTR[1] != vector.Zero && m_ragdollHeadWorldTR[2] != vector.Zero)
70 Math3D.AnglesToMatrix(lookAngles, pOutResult.m_CameraTM);
73 m_fCurrentEaseOutRagdollSmoothTime -= pDt;
74 float step = 1.0 - (m_fCurrentEaseOutRagdollSmoothTime / m_fEaseOutRagdollSmoothTime);
75 step = Math.Clamp(step, 0.0, 1.0);
78 vector cameraWorldTM[4];
79 Math3D.MatrixMultiply4(animationBoneWorldTM, pOutResult.m_CameraTM, cameraWorldTM);
82 float targetQuatWS[4];
83 Math3D.MatrixToQuat(cameraWorldTM, targetQuatWS);
84 Math3D.QuatLerp(targetQuatWS, m_ragdollHeadQuatWS, targetQuatWS, step);
85 Math3D.QuatNorm(targetQuatWS);
86 Math3D.QuatToMatrix(targetQuatWS, pOutResult.m_CameraTM);
87 pOutResult.m_CameraTM[3] = cameraWorldTM[3];
90 vector invertedAnimationBoneWorldTM[4];
91 Math3D.MatrixGetInverse4(animationBoneWorldTM, invertedAnimationBoneWorldTM);
92 Math3D.MatrixMultiply4(invertedAnimationBoneWorldTM, pOutResult.m_CameraTM, pOutResult.m_CameraTM);
95 pOutResult.m_CameraTM[3] = m_OffsetLS;
99 Math3D.AnglesToMatrix(lookAngles, pOutResult.m_CameraTM);
100 pOutResult.m_CameraTM[3] = m_OffsetLS;
104 if (m_CharacterCameraHandler)
105 m_CharacterCameraHandler.AddShakeToToTransform(pOutResult.m_CameraTM, pOutResult.m_fFOV);
float m_fCurrentEaseOutRagdollSmoothTime
float m_ragdollHeadQuatWS[4]
vector m_ragdollHeadWorldTR[4]
float m_fEaseOutRagdollSmoothTime
proto void Print(void var, LogLevel level=LogLevel.NORMAL)
Prints content of variable to console/log.
LogLevel
Enum with severity of the logging message.