Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
CharacterCamera3rdPersonTurret.c
Go to the documentation of this file.
1// *************************************************************************************
2// ! CharacterCamera3rdPersonTurret - 3rd person camera when character is controlling turret
3// *************************************************************************************
4
6{
11 protected vector m_vLastCameraAngles; //< Does not update in freelook
12
13 //-----------------------------------------------------------------------------
15 {
16 m_bLRAngleNoLimit = true;
17 m_bViewBob = false;
18 }
19
20 override void InitCameraData()
21 {
22 CompartmentAccessComponent compartmentAccess = m_OwnerCharacter.GetCompartmentAccessComponent();
23 if (compartmentAccess && compartmentAccess.IsInCompartment())
24 {
25 IEntity turret;
26 TurretCompartmentSlot compartment = TurretCompartmentSlot.Cast(compartmentAccess.GetCompartment());
27 if (compartment)
28 {
29 m_OwnerVehicle = compartment.GetVehicle();
30 turret = compartment.GetOwner();
31 }
32 else
33 {
34 m_OwnerVehicle = compartmentAccess.GetCompartment().GetVehicle();
35 turret = compartmentAccess.GetCompartment().GetAttachedTurret().GetOwner();
36 }
37
38 if (turret)
39 {
40 bool bUsingVehicleCameraData;
41
42 SCR_VehicleCameraDataComponent vehicleCamDataComp = SCR_VehicleCameraDataComponent.Cast(turret.FindComponent(SCR_VehicleCameraDataComponent));
43 if (!vehicleCamDataComp)
44 {
45 vehicleCamDataComp = SCR_VehicleCameraDataComponent.Cast(m_OwnerVehicle.FindComponent(SCR_VehicleCameraDataComponent));
46 bUsingVehicleCameraData = true;
47 }
48
50 if (bUsingVehicleCameraData)
51 vehicleCamData = SCR_VehicleCameraDataComponentClass.Cast(vehicleCamDataComp.GetComponentData(m_OwnerVehicle));
52 else
53 vehicleCamData = SCR_VehicleCameraDataComponentClass.Cast(vehicleCamDataComp.GetComponentData(turret));
54
55 if (vehicleCamData)
56 {
57 m_fHeight = vehicleCamData.m_fHeight;
58 m_fDist_Desired = vehicleCamData.m_fDist_Desired;
59 m_fDist_Min = vehicleCamData.m_fDist_Min;
60 m_fDist_Max = vehicleCamData.m_fDist_Max;
61 m_fSpeedMax = vehicleCamData.m_fSpeedMax;
62 m_fFOV = vehicleCamData.m_fFOV;
63 m_fRollFactor = vehicleCamData.m_fRollFactor;
64 m_fPitchFactor = vehicleCamData.m_fPitchFactor;
65 m_fAngleThirdPerson = vehicleCamData.m_fAngleThirdPerson * Math.DEG2RAD;
66
67 // Get camera center
68 vector matrix[4];
69 PointInfo pCameraPivot = vehicleCamData.m_pPivot;
70 if (pCameraPivot)
71 {
72 pCameraPivot.GetLocalTransform(matrix);
73 m_vCameraCenter = matrix[3]; // Use pivot position
74 }
75 else
76 {
77 vector mins, maxs;
78 if(bUsingVehicleCameraData)
79 m_OwnerVehicle.GetBounds(mins, maxs);
80 else
81 turret.GetBounds(mins, maxs);
82
83 if (bUsingVehicleCameraData)
84 {
85 Physics physics = m_OwnerVehicle.GetPhysics();
86 if (physics)
87 m_vCameraCenter = physics.GetCenterOfMass(); // Use COM
88 else
89 m_vCameraCenter = (maxs - mins) * 0.5 + mins; // Use vehicles bounds center
90 }
91 else
92 m_vCameraCenter = (maxs - mins) * 0.5 + mins; // Use turret bounds center
93 }
94 if(!bUsingVehicleCameraData && turret != m_OwnerVehicle)
95 {
96 turret.GetLocalTransform(matrix);
97 m_vCameraCenter = m_vCameraCenter.Multiply4(matrix); // 'm_vCameraCenter' should be in vehicle space
98 }
99 }
100
101 // If we'll have multiple turrets, don't cache turret
102 if (compartment)
103 m_pTurretController = TurretControllerComponent.Cast(compartment.GetController());
104 else
105 m_pTurretController = compartmentAccess.GetCompartment().GetAttachedTurret();
106
108 return;
109
110 m_pControlledTurret = m_pTurretController.GetTurretComponent();
112 return;
113
115 m_vVertAimLimits[0] = CONST_UD_MIN;
116 m_vVertAimLimits[1] = CONST_UD_MAX;
117 }
118 }
119 }
120
121 override void CalculateLookAngles(vector vehicleAngles, vector characterAngles, out ScriptedCameraItemResult pOutResult)
122 {
123 vector lookAngles = m_CharacterHeadAimingComponent.GetLookAngles();
124
125 CharacterControllerComponent charController = m_OwnerCharacter.GetCharacterController();
126
128 m_vLastCameraAngles = m_pControlledTurret.GetAimingDirectionWorld().VectorToAngles();
129 if (charController.IsFreeLookEnabled() || m_pTurretController.GetCanAimOnlyInADS())
130 {
131 // Do not let gun elevation change view direction in freelook
132 m_vLastCameraAngles[1] = 0;
133
134 m_vLastCameraAngles += lookAngles;
135 }
136 Math3D.AnglesToMatrix(m_vLastCameraAngles - characterAngles, pOutResult.m_CameraTM);
137 }
138}
float m_fHeight
void CharacterCamera3rdPersonTurret(CameraHandlerComponent pCameraHandler)
override void CalculateLookAngles(vector vehicleAngles, vector characterAngles, out ScriptedCameraItemResult pOutResult)
proto external Managed FindComponent(typename typeName)
proto external void GetBounds(out vector mins, out vector maxs)
proto external void GetLocalTransform(out vector mat[])
See IEntity::GetTransform.
Definition Math.c:13
PointInfo - allows to define position.
Definition PointInfo.c:9