Arma Reforger Explorer
1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Toggle main menu visibility
Loading...
Searching...
No Matches
CharacterCameraBase.c
Go to the documentation of this file.
1
class
CharacterCameraBase : ScriptedCameraItem
2
{
3
//------------------------------------------------------------------------------------------------
5
void
CharacterCameraBase(
CameraHandlerComponent
pCameraHandler)
6
{
7
m_fLRAngleVel
= 0;
8
m_fUDAngleVel
= 0;
9
m_fFOV
= GetBaseFOV();
10
11
m_CharacterCameraHandler
= SCR_CharacterCameraHandlerComponent.Cast(
m_CameraHandler
);
12
m_OwnerCharacter
=
ChimeraCharacter
.Cast(pCameraHandler.
GetOwner
());
13
m_ControllerComponent
=
SCR_CharacterControllerComponent
.Cast(
m_OwnerCharacter
.FindComponent(
SCR_CharacterControllerComponent
));
14
m_Input
=
m_ControllerComponent
.GetInputContext();
15
if
(
sm_TagFPCamera
== -1)
16
{
17
sm_TagFPCamera
=
GameAnimationUtils
.RegisterAnimationTag(
"TagFPCamera"
);
18
}
19
if
(
sm_TagADSTransitionIn
== -1)
20
{
21
sm_TagADSTransitionIn
=
GameAnimationUtils
.RegisterAnimationTag(
"TagTransitionADSIn"
);
22
}
23
if
(
sm_TagADSTransitionOut
== -1)
24
{
25
sm_TagADSTransitionOut
=
GameAnimationUtils
.RegisterAnimationTag(
"TagTransitionADSOut"
);
26
}
27
if
(
sm_TagLyingCamera
== -1)
28
{
29
sm_TagLyingCamera
=
GameAnimationUtils
.RegisterAnimationTag(
"TagLyingCamera"
);
30
}
31
if
(
sm_TagItemUpdateCols
== -1)
32
{
33
sm_TagItemUpdateCols
=
GameAnimationUtils
.RegisterAnimationTag(
"TagItemUpdateColliders"
);
34
}
35
if
(
sm_iCameraBoneIndex
== -1)
36
{
37
Animation
anim =
m_OwnerCharacter
.GetAnimation();
38
sm_iHeadBoneIndex
= anim.GetBoneIndex(
"Head"
);
39
sm_iCameraBoneIndex
= anim.GetBoneIndex(
"Camera"
);
40
s_iNeckBoneIndex
= anim.GetBoneIndex(
"Neck1"
);
41
}
42
m_CharacterAnimationComponent
=
CharacterAnimationComponent
.Cast(
m_OwnerCharacter
.FindComponent(
CharacterAnimationComponent
));
43
CharacterCommandHandlerComponent
cmdHandler =
CharacterCommandHandlerComponent
.Cast(
m_CharacterAnimationComponent
.FindComponent(
CharacterCommandHandlerComponent
));
44
m_CharacterHeadAimingComponent
= CharacterHeadAimingComponent.Cast(
m_OwnerCharacter
.FindComponent(CharacterHeadAimingComponent));
45
m_CommandWeapons
= cmdHandler.GetCommandModifier_Weapon();
46
m_CompartmentAccessComponent
=
m_OwnerCharacter
.GetCompartmentAccessComponent();
47
m_CmdHandler
= cmdHandler;
48
}
49
50
//------------------------------------------------------------------------------------------------
51
float
UpdateUDAngle(out
float
pAngle,
float
pMin,
float
pMax,
float
pDt)
52
{
53
pAngle =
Math
.Clamp(
m_CharacterHeadAimingComponent
.GetAimingRotation()[1], pMin, pMax);
54
55
//On Foot
56
if
(
m_CompartmentAccessComponent
&& !
m_CompartmentAccessComponent
.IsInCompartment())
57
pAngle +=
m_ControllerComponent
.GetInputContext().GetAimingAngles()[1];
58
59
return
pAngle;
60
}
61
62
//------------------------------------------------------------------------------------------------
63
float
UpdateLRAngle(
float
pAngle,
float
pMin,
float
pMax,
float
pDt)
64
{
65
bool
bCompartmentForcesFreeLook =
false
;
66
if
(
m_CompartmentAccessComponent
&&
m_CompartmentAccessComponent
.IsInCompartment())
67
bCompartmentForcesFreeLook =
m_CompartmentAccessComponent
.GetCompartment().GetForceFreeLook();
68
70
if
(
m_ControllerComponent
.IsFreeLookEnabled() ||
m_ControllerComponent
.IsTrackIREnabled() ||
m_bForceFreeLook
|| bCompartmentForcesFreeLook)
71
{
72
pAngle =
m_CharacterHeadAimingComponent
.GetAimingRotation()[0];
73
74
if
(!
m_bLRAngleNoLimit
)
75
{
76
pAngle =
Math
.Clamp(pAngle, pMin, pMax);
77
}
78
else
79
{
80
pAngle =
SCR_Math
.
FixAngle
(pAngle, 180);
81
}
82
83
m_fLRAngleVel
= 0;
// reset filter
84
}
85
else
86
{
87
pAngle =
Math
.SmoothCD(pAngle, 0,
m_fLRAngleVel
, 0.14, 1000, pDt);
88
}
89
90
return
pAngle;
91
}
92
93
//------------------------------------------------------------------------------------------------
94
override
void
OnUpdate
(
float
pDt, out
ScriptedCameraItemResult
pOutResult);
95
96
//------------------------------------------------------------------------------------------------
97
override
void
OnActivate
(ScriptedCameraItem pPrevCamera,
ScriptedCameraItemResult
pPrevCameraResult)
98
{
99
// Save shoulder state if camera was 3rd person or pass on last state
100
if
(pPrevCamera)
101
{
102
if
( pPrevCamera.IsInherited(CharacterCamera3rdPersonBase) )
103
{
104
m_fShoulderLastActive
= CharacterCamera3rdPersonBase.Cast(pPrevCamera).GetActiveShoulder();
105
}
106
else
if
( pPrevCamera.IsInherited(CharacterCameraBase) )
107
{
108
m_fShoulderLastActive
= CharacterCameraBase.Cast(pPrevCamera).GetShoulderLastActive();
109
}
110
}
111
if
(
IsInherited
(CharacterCamera3rdPersonBase) ||
IsInherited
(
CharacterCamera3rdPersonVehicle
))
112
{
113
m_CameraHandler
.SetLensFlareSet(
CameraLensFlareSetType
.ThirdPerson,
""
);
114
}
115
else
116
{
117
m_CameraHandler
.SetLensFlareSet(
CameraLensFlareSetType
.FirstPerson,
""
);
118
}
119
120
CharacterCameraBase prevCameraBase = CharacterCameraBase.Cast(pPrevCamera);
121
if
(prevCameraBase)
122
{
123
m_fPitchSmooth
= prevCameraBase.
m_fPitchSmooth
;
124
m_fPitchSmoothVel
= prevCameraBase.
m_fPitchSmoothVel
;
125
m_fRollSmooth
= prevCameraBase.
m_fRollSmooth
;
126
m_fRollSmoothVel
= prevCameraBase.
m_fRollSmoothVel
;
127
}
128
129
m_CharacterHeadAimingComponent
.SetPitchLimitReductionMultiplier(1.0);
130
m_CharacterHeadAimingComponent
.ResetLimitAnglesOverride();
131
}
132
133
//------------------------------------------------------------------------------------------------
134
void
ForceFreelook(
bool
state)
135
{
136
m_bForceFreeLook
= state;
137
}
138
139
//-----------------------------------------------------------------------------
142
int
GetShoulderLastActive()
143
{
144
return
m_fShoulderLastActive
;
145
}
146
147
//------------------------------------------------------------------------------------------------
150
float
GetShoulderDistance()
151
{
152
return
0.0;
153
}
154
155
//------------------------------------------------------------------------------------------------
158
float
GetInterpolatedUDTransformAngle(
float
pDt)
159
{
160
vector
physTransform[4];
161
m_OwnerCharacter
.GetLocalTransform(physTransform);
162
m_fTransformUDAngle
=
Math
.SmoothCD(
m_fTransformUDAngle
, physTransform[2][1],
m_fTransformUDAngleVel
, 0.14, 1000, pDt);
163
return
m_fTransformUDAngle
*
Math
.RAD2DEG;
164
}
165
166
//------------------------------------------------------------------------------------------------
172
void
AddPitchRoll(
vector
yawPitchRoll,
float
pitchFactor,
float
rollFactor, inout
vector
transformMS[4])
173
{
174
// Get camera forward, without height
175
vector
cameraForward = transformMS[2];
176
cameraForward[1] = 0.0;
177
cameraForward.Normalize();
178
179
// Get camera right, without height
180
vector
cameraAside = transformMS[0];
181
cameraAside[1] = 0;
182
cameraAside.Normalize();
183
184
// See how much of individual components to apply
185
float
rollAmount =
vector
.Dot(cameraForward,
vector
.Forward);
186
float
pitchAmount =
vector
.Dot(cameraAside,
vector
.Forward);
187
188
float
pitch = yawPitchRoll[1];
189
float
roll = yawPitchRoll[2];
190
191
float
newPitch = pitchFactor * (pitch * rollAmount - roll * pitchAmount);
192
float
newRoll = rollFactor * (roll * rollAmount - pitch * pitchAmount);
193
194
// Create rotation matrix
195
vector
newPitchRoll =
Vector
(0, newPitch, newRoll);
196
vector
rotMat[3];
197
Math3D
.AnglesToMatrix(newPitchRoll, rotMat);
198
199
// Apply matrix to final transformation
200
Math3D
.MatrixMultiply3(transformMS, rotMat, transformMS);
201
}
202
203
//------------------------------------------------------------------------------------------------
204
protected
void
AddVehiclePitchRoll
(
IEntity
vehicle,
float
pDt, inout
vector
transformMS[4])
205
{
206
if
(!vehicle)
207
return
;
208
209
vector
vehMat[4];
210
vehicle.
GetTransform
(vehMat);
211
212
// Compensate for roll after camera is updated
213
vector
yawPitchRoll =
Math3D
.MatrixToAngles(vehMat);
214
m_fPitchSmooth
=
Math
.SmoothCD(
m_fPitchSmooth
, -yawPitchRoll[1],
m_fPitchSmoothVel
, 0.14, 1000, pDt);
215
m_fRollSmooth
=
Math
.SmoothCD(
m_fRollSmooth
, -yawPitchRoll[2],
m_fRollSmoothVel
, 0.14, 1000, pDt);
216
yawPitchRoll[0] = 0;
217
yawPitchRoll[1] =
m_fPitchSmooth
;
218
yawPitchRoll[2] =
m_fRollSmooth
;
219
220
float
rollMask =
Math
.Max(0, vehMat[1][1]);
// Do not apply roll factor when the vehicle is upside-down.
221
AddPitchRoll(yawPitchRoll,
m_fPitchFactor
, rollMask *
m_fRollFactor
, transformMS);
222
}
223
225
protected
float
m_fUpDownAngle
;
226
protected
float
m_fUpDownAngleAdd
;
227
protected
float
m_fLeftRightAngle
= 0.0;
228
229
//-----------------------------------------------------------------------------
230
override
void
SetBaseAngles
(out
vector
angles
)
231
{
232
m_fUpDownAngle
=
SCR_Math
.
FixAngle
(
angles
[0], 180);
233
m_fLeftRightAngle
=
SCR_Math
.
FixAngle
(
angles
[1], 180);
234
}
235
236
//-----------------------------------------------------------------------------
237
override
vector
GetBaseAngles
()
238
{
239
return
m_CharacterHeadAimingComponent
.GetLookAngles();
240
}
241
242
//------------------------------------------------------------------------------------------------
246
protected
TNodeId
GetCameraBoneIndex
()
247
{
248
if
(
m_CharacterAnimationComponent
.IsPrimaryTag(
sm_TagFPCamera
))
249
{
250
return
sm_iCameraBoneIndex
;
251
}
252
return
sm_iHeadBoneIndex
;
253
}
254
255
protected
float
m_fFOV
;
256
257
protected
float
m_fLRAngleVel
;
258
protected
float
m_fUDAngleVel
;
259
protected
float
m_fTransformUDAngleVel
;
260
protected
float
m_fTransformUDAngle
;
261
protected
bool
m_bForceFreeLook
;
262
protected
bool
m_bLRAngleNoLimit
;
263
264
protected
bool
m_bIgnoreCharacterPitch
;
265
266
protected
float
m_fFOVFilter
;
267
protected
float
m_fFOVFilterVel
;
268
269
protected
int
m_fShoulderLastActive
= 1;
270
271
protected
float
m_fRollFactor
;
272
protected
float
m_fRollSmooth
;
273
protected
float
m_fRollSmoothVel
;
274
protected
float
m_fPitchFactor
;
275
protected
float
m_fPitchSmooth
;
276
protected
float
m_fPitchSmoothVel
;
277
278
protected
ChimeraCharacter
m_OwnerCharacter
;
279
protected
SCR_CharacterControllerComponent
m_ControllerComponent
;
280
protected
CharacterInputContext
m_Input
;
281
protected
SCR_CharacterCameraHandlerComponent
m_CharacterCameraHandler
;
282
protected
CharacterAnimationComponent
m_CharacterAnimationComponent
;
283
protected
CharacterHeadAimingComponent
m_CharacterHeadAimingComponent
;
284
protected
CharacterCommandWeapon
m_CommandWeapons
;
285
protected
CompartmentAccessComponent
m_CompartmentAccessComponent
;
286
protected
CharacterCommandHandlerComponent
m_CmdHandler
;
287
protected
float
m_fShakeProgress
;
288
protected
float
m_fShakeVelocity
;
289
protected
static
TNodeId
sm_iCameraBoneIndex
= -1;
290
protected
static
TNodeId
sm_iHeadBoneIndex
= -1;
291
protected
static
TNodeId
s_iNeckBoneIndex
= -1;
292
protected
static
AnimationTagID
sm_TagFPCamera
= -1;
293
protected
static
AnimationTagID
sm_TagLyingCamera
= -1;
// beware: very deceitful!
294
protected
static
AnimationTagID
sm_TagItemUpdateCols
= -1;
// beware: very deceitful!
295
protected
static
AnimationTagID
sm_TagADSTransitionOut
= -1;
296
protected
static
AnimationTagID
sm_TagADSTransitionIn
= -1;
297
}
AnimationTagID
int AnimationTagID
Definition
AnimationStringTypes.c:2
angles
ref array< string > angles
Definition
PrefabImporter.c:22
OnActivate
override void OnActivate()
Definition
SCR_CharacterCommandLoiter.c:31
OnUpdate
override void OnUpdate()
Definition
SCR_MapMarkerSquadLeader.c:333
IsInherited
proto native external bool IsInherited(typename type)
Animation
Definition
Animation.c:13
CameraHandlerComponent
Definition
CameraHandlerComponent.c:13
CharacterAnimationComponent
Definition
CharacterAnimationComponent.c:13
CharacterCameraBase::m_fFOVFilterVel
float m_fFOVFilterVel
Definition
CharacterCameraBase.c:267
CharacterCameraBase::sm_TagADSTransitionIn
static AnimationTagID sm_TagADSTransitionIn
Definition
CharacterCameraBase.c:296
CharacterCameraBase::m_bLRAngleNoLimit
bool m_bLRAngleNoLimit
Definition
CharacterCameraBase.c:262
CharacterCameraBase::sm_TagFPCamera
static AnimationTagID sm_TagFPCamera
Definition
CharacterCameraBase.c:292
CharacterCameraBase::m_fUpDownAngleAdd
float m_fUpDownAngleAdd
up down angle in rad
Definition
CharacterCameraBase.c:226
CharacterCameraBase::m_fFOVFilter
float m_fFOVFilter
Definition
CharacterCameraBase.c:266
CharacterCameraBase::m_fUpDownAngle
float m_fUpDownAngle
runtime values
Definition
CharacterCameraBase.c:225
CharacterCameraBase::GetCameraBoneIndex
TNodeId GetCameraBoneIndex()
Definition
CharacterCameraBase.c:246
CharacterCameraBase::m_CommandWeapons
CharacterCommandWeapon m_CommandWeapons
Definition
CharacterCameraBase.c:284
CharacterCameraBase::m_fShoulderLastActive
int m_fShoulderLastActive
saved active shoulder for 3rd person cam (1 - right, -1 left)
Definition
CharacterCameraBase.c:269
CharacterCameraBase::m_ControllerComponent
SCR_CharacterControllerComponent m_ControllerComponent
Definition
CharacterCameraBase.c:279
CharacterCameraBase::m_fShakeVelocity
float m_fShakeVelocity
Definition
CharacterCameraBase.c:288
CharacterCameraBase::m_fLeftRightAngle
float m_fLeftRightAngle
left right angle in rad
Definition
CharacterCameraBase.c:227
CharacterCameraBase::m_Input
CharacterInputContext m_Input
Definition
CharacterCameraBase.c:280
CharacterCameraBase::sm_iHeadBoneIndex
static TNodeId sm_iHeadBoneIndex
Definition
CharacterCameraBase.c:290
CharacterCameraBase::m_CharacterAnimationComponent
CharacterAnimationComponent m_CharacterAnimationComponent
Definition
CharacterCameraBase.c:282
CharacterCameraBase::s_iNeckBoneIndex
static TNodeId s_iNeckBoneIndex
Definition
CharacterCameraBase.c:291
CharacterCameraBase::m_bForceFreeLook
bool m_bForceFreeLook
Definition
CharacterCameraBase.c:261
CharacterCameraBase::m_fRollSmoothVel
float m_fRollSmoothVel
Definition
CharacterCameraBase.c:273
CharacterCameraBase::m_CompartmentAccessComponent
CompartmentAccessComponent m_CompartmentAccessComponent
Definition
CharacterCameraBase.c:285
CharacterCameraBase::m_fPitchFactor
float m_fPitchFactor
Definition
CharacterCameraBase.c:274
CharacterCameraBase::m_CharacterHeadAimingComponent
CharacterHeadAimingComponent m_CharacterHeadAimingComponent
Definition
CharacterCameraBase.c:283
CharacterCameraBase::m_fTransformUDAngle
float m_fTransformUDAngle
Definition
CharacterCameraBase.c:260
CharacterCameraBase::SetBaseAngles
override void SetBaseAngles(out vector angles)
Definition
CharacterCameraBase.c:230
CharacterCameraBase::CharacterCamera3rdPersonVehicle
void CharacterCamera3rdPersonVehicle(CameraHandlerComponent pCameraHandler)
Definition
CharacterCamera3rdPersonVehicle.c:71
CharacterCameraBase::m_OwnerCharacter
ChimeraCharacter m_OwnerCharacter
Definition
CharacterCameraBase.c:278
CharacterCameraBase::m_fLRAngleVel
float m_fLRAngleVel
Definition
CharacterCameraBase.c:257
CharacterCameraBase::sm_TagItemUpdateCols
static AnimationTagID sm_TagItemUpdateCols
Definition
CharacterCameraBase.c:294
CharacterCameraBase::m_bIgnoreCharacterPitch
bool m_bIgnoreCharacterPitch
Definition
CharacterCameraBase.c:264
CharacterCameraBase::m_CharacterCameraHandler
SCR_CharacterCameraHandlerComponent m_CharacterCameraHandler
Definition
CharacterCameraBase.c:281
CharacterCameraBase::m_CmdHandler
CharacterCommandHandlerComponent m_CmdHandler
Definition
CharacterCameraBase.c:286
CharacterCameraBase::GetBaseAngles
override vector GetBaseAngles()
Definition
CharacterCameraBase.c:237
CharacterCameraBase::m_fRollFactor
float m_fRollFactor
Definition
CharacterCameraBase.c:271
CharacterCameraBase::m_fRollSmooth
float m_fRollSmooth
Definition
CharacterCameraBase.c:272
CharacterCameraBase::sm_TagLyingCamera
static AnimationTagID sm_TagLyingCamera
Definition
CharacterCameraBase.c:293
CharacterCameraBase::m_fTransformUDAngleVel
float m_fTransformUDAngleVel
Definition
CharacterCameraBase.c:259
CharacterCameraBase::sm_TagADSTransitionOut
static AnimationTagID sm_TagADSTransitionOut
Definition
CharacterCameraBase.c:295
CharacterCameraBase::m_fUDAngleVel
float m_fUDAngleVel
Definition
CharacterCameraBase.c:258
CharacterCameraBase::m_fFOV
float m_fFOV
Definition
CharacterCameraBase.c:255
CharacterCameraBase::sm_iCameraBoneIndex
static TNodeId sm_iCameraBoneIndex
Definition
CharacterCameraBase.c:289
CharacterCameraBase::m_fShakeProgress
float m_fShakeProgress
Definition
CharacterCameraBase.c:287
CharacterCameraBase::m_fPitchSmoothVel
float m_fPitchSmoothVel
Definition
CharacterCameraBase.c:276
CharacterCameraBase::AddVehiclePitchRoll
void AddVehiclePitchRoll(IEntity vehicle, float pDt, inout vector transformMS[4])
Definition
CharacterCameraBase.c:204
CharacterCameraBase::m_fPitchSmooth
float m_fPitchSmooth
Definition
CharacterCameraBase.c:275
CharacterCommandHandlerComponent
Definition
CharacterCommandHandlerComponent.c:13
CharacterCommandWeapon
Definition
CharacterCommandWeapon.c:13
CharacterInputContext
Definition
CharacterInputContext.c:13
ChimeraCharacter
Definition
ChimeraCharacter.c:13
GameAnimationUtils
Definition
GameAnimationUtils.c:8
IEntity
Definition
IEntity.c:13
IEntity::GetTransform
proto external void GetTransform(out vector mat[])
Math3D
Definition
Math3D.c:13
Math
Definition
Math.c:13
SCR_CharacterControllerComponent
Definition
SCR_CharacterControllerComponent.c:36
SCR_Math
Definition
SCR_Math.c:2
SCR_Math::FixAngle
static float FixAngle(float angle, float units=Math.PI)
Definition
SCR_Math.c:280
ScriptComponent::GetOwner
proto external GenericEntity GetOwner()
Get owner entity.
ScriptedCameraItem::m_CameraHandler
CameraHandlerComponent m_CameraHandler
data
Definition
ScriptedCameraSet.c:61
ScriptedCameraItemResult
Definition
ScriptedCameraSet.c:120
vector
Definition
vector.c:13
TNodeId
int TNodeId
Node global id is a hash of name of the node.
Definition
EnEntity.c:18
Vector
proto native vector Vector(float x, float y, float z)
CameraLensFlareSetType
CameraLensFlareSetType
Type of the camera lens flare set.
Definition
CameraLensFlareSetType.c:14
scripts
Game
Character
Cameras
CharacterCameraBase.c
Generated by
1.17.0