Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SightsComponent.c
Go to the documentation of this file.
1
3{
4 vector m_Angles;
5 vector m_Offset;
6};
7
9{
10 [Attribute( defvalue: "-1", uiwidget: UIWidgets.Slider, desc: "Distance from eye to the nearby DOF", "-1 500 1")]
11 int m_iOpticDOFDistanceScale;
12
13 [Attribute( defvalue: "0", uiwidget: UIWidgets.CheckBox, desc: "Nearby DOF is forced to be simple, not bokeh DOF. Essential for weapon elements extremely close to camera")]
14 bool m_bForceSimpleDOF;
15};
16
18{
19 // TODO@AS:
20 // Move this black magic into cpp
21 // And add messages to user when something fails!
22 const string EYE_BONE = "eye";
23
24 //------------------------------------------------------------------------------------------------
27 void ApplyRecoilToCamera(inout vector pOutCameraTransform[4], vector aimModAngles);
28
29 //------------------------------------------------------------------------------------------------
30 bool CanFreelook()
31 {
32 return true;
33 }
34
35 //------------------------------------------------------------------------------------------------
37 bool GetDOFRelatedPrefabData(out int opticDOFDistanceScale = -1, out bool forceSimpleDOF = false)
38 {
40 if (!prefabData)
41 return false;
42
43 opticDOFDistanceScale = prefabData.m_iOpticDOFDistanceScale;
44 forceSimpleDOF = prefabData.m_bForceSimpleDOF;
45
46 return true;
47 }
48
49 #ifdef WORKBENCH
50
51 //------------------------------------------------------------------------------------------------
55 protected override bool WB_GetZeroingData(IEntity owner, BaseSightsComponent sights, float weaponAngle, out vector offset, out vector angles)
56 {
57 if (!sights)
58 return false;
59
61 IEntity parent = owner.GetParent();
62 if (parent)
63 data = CalculateDataWithParent(sights, owner, parent, weaponAngle);
64 else
65 data = CalculateDataWithParent(sights, owner, owner, weaponAngle); // if owner==parent.. its ok
66
67 offset = data.m_Offset;
68 angles = data.m_Angles;
69 return true;
70 }
71
72 //------------------------------------------------------------------------------------------------
73 protected bool FindParent(IEntity owner, string eyeBoneName, out IEntity parentWeapon, out int boneIndex)
74 {
75 IEntity parent = owner;
76 while (parent)
77 {
79 if (weapon)
80 {
81 int eye = parent.GetAnimation().GetBoneIndex(EYE_BONE);
82 if (eye != -1)
83 {
84 boneIndex = eye;
85 parentWeapon = parent;
86 return true;
87 }
88 }
89 parent = parent.GetParent();
90 }
91
92 return false;
93 }
94
95 //------------------------------------------------------------------------------------------------
101 static ZeroingGeneratedData CalculateDataWithParent(BaseSightsComponent sights, IEntity owner, IEntity parent, float desiredAngle)
102 {
104 vector originalParentTransformWS[4];
105 parent.GetWorldTransform(originalParentTransformWS);
106 vector originalChildTransformLS[4];
107 owner.GetLocalTransform(originalChildTransformLS);
108
110 vector parentTransformWS[4];
111 Math3D.MatrixIdentity4(parentTransformWS);
112 parent.SetWorldTransform(parentTransformWS);
113 vector childTransformWS[4]; // transform sights into parent space
114 if (parent == owner) // unless we are in that space already
115 Math3D.MatrixCopy(parentTransformWS, childTransformWS);
116 else
117 Math3D.MatrixMultiply4(originalChildTransformLS, parentTransformWS, childTransformWS);
118
119 owner.SetWorldTransform(childTransformWS);
120
122 vector pivotPointWS = sights.GetSightsFrontPosition(false);
123
125 float angle = -desiredAngle * Math.DEG2RAD;
126 vector axis = vector.Right;
127 vector newParentTransformWS[4];
128 SCR_Math3D.RotateAround(parentTransformWS, pivotPointWS, axis, angle, newParentTransformWS);
129 vector newChildTransformWS[4];
130 SCR_Math3D.RotateAround(childTransformWS, pivotPointWS, axis, angle, newChildTransformWS);
131
133 parent.SetWorldTransform(newParentTransformWS);
134 owner.SetWorldTransform(newChildTransformWS);
135
136
138 data.m_Offset = newParentTransformWS[3];
139 data.m_Offset[2] = -data.m_Offset[2];
140 vector yawPitchRoll = Math3D.MatrixToAngles(newParentTransformWS);
141 data.m_Angles = Vector(yawPitchRoll[1], yawPitchRoll[0], yawPitchRoll[2]);
142 return data;
143 }
144 #endif
145};
ref array< string > angles
override bool CanFreelook()
SCR_CharacterSoundComponentClass GetComponentData()
Get all prefabs that have the spawner data
UI Textures DeployMenu Briefing conflict_HintBanner_1_UI desc
bool WB_GetZeroingData(IEntity owner, BaseSightsComponent sights, float weaponAngle, out vector offset, out vector angles)
proto external Managed FindComponent(typename typeName)
proto external void GetWorldTransform(out vector mat[])
See IEntity::GetTransform.
proto external Animation GetAnimation()
proto external bool SetWorldTransform(vector mat[4])
See IEntity::SetTransform. Returns false, if there is no change in transformation.
proto external IEntity GetParent()
proto external void GetLocalTransform(out vector mat[])
See IEntity::GetTransform.
Definition Math.c:13
Contains various scripted 3D math functions.
Definition SCR_Math3D.c:3
Temporary dummy container for generated data.
IEntity GetOwner()
Owner entity of the fuel tank.
SCR_FieldOfViewSettings Attribute
proto native vector Vector(float x, float y, float z)