DayZ Scripts
v1.21.156300 ยท Jun 20, 2023
 
Loading...
Searching...
No Matches
CrossHairSelector.c
Go to the documentation of this file.
2{
3 protected string m_Name;
4 protected bool m_Shown;
5 protected bool m_Current;
6
7 protected Widget m_Widget;
8
10 {
11 m_Widget = w;
12 m_Name = w.GetName();
13 m_Shown = true;
14 m_Current = false;
15 }
16
17 void ~CrossHair() {}
18
19 string GetName()
20 {
21 return m_Name;
22 }
23
24 bool IsCurrent()
25 {
26 return m_Current;
27 }
28
29 bool IsShown()
30 {
31 return m_Shown;
32 }
33
34 void Show()
35 {
36 m_Shown = false;
37 m_Current = true;
38 m_Widget.Show(true);
39 }
40
41 void Hide()
42 {
43 m_Shown = true;
44 m_Current = false;
45 m_Widget.Show(false);
46 }
47
49 {
50 return m_Widget;
51 }
52}
53
55{
58
59 protected Widget m_Root;
60
61 protected ref set<ref CrossHair> m_CrossHairs;
62
65 protected bool m_PreviousDirectionSet;
66
68 {
69 m_Player = null;
70 m_AM = null;
71 m_CrossHairs = new set<ref CrossHair>;
72
74 }
75
77 {
79 }
80
81 protected void Init()
82 {
83 m_CrossHairs.Clear();
84
85 Widget child = m_Root.GetChildren();
86 while(child)
87 {
88 m_CrossHairs.Insert(CrossHair(child));
89 child = child.GetSibling();
90 }
91 }
92
93 protected void OnWidgetScriptInit(Widget w)
94 {
95 m_Root = w;
96 m_Root.SetHandler(this);
97 Init();
98 m_Root.Update();
99 }
100
101 protected void Update()
102 {
104 if(!g_Game.GetProfileOption(EDayZProfilesOptions.CROSSHAIR) || g_Game.GetWorld().IsCrosshairDisabled())
105 {
107 ShowCrossHair(null);
108
109 return;
110 };
111
112 if(m_Player && !m_Player.IsAlive()) // handle respawn
113 {
114 m_Player = null;
115 m_AM = null;
116 }
117 if(!m_Player) GetPlayer();
118 if(!m_AM) GetActionManager();
119
121 {
123 }
124 }
125
126 // getters
127 protected void GetPlayer()
128 {
130 }
131
132 protected void GetActionManager()
133 {
135 {
136 Class.CastTo(m_AM, m_Player.GetActionManager());
137 }
138 else
139 m_AM = null;
140 }
141
142 protected CrossHair GetCrossHairByName(string widgetName)
143 {
144 for(int i = 0; i < m_CrossHairs.Count(); i++)
145 {
146 if(m_CrossHairs.Get(i).GetName() == widgetName)
147 return m_CrossHairs.Get(i);
148 }
149
150 return null;
151 }
152
154 {
155 for(int i = 0; i < m_CrossHairs.Count(); i++)
156 {
157 if(m_CrossHairs.Get(i).IsCurrent())
158 return m_CrossHairs.Get(i);
159 }
160
161 return null;
162 }
163
164 protected void SelectCrossHair()
165 {
166 if(!m_AM) return;
167
168 HumanInputController hic = m_Player.GetInputController();
169 ActionBase action = m_AM.GetRunningAction();
170
171 bool firearmInHands = m_Player.GetItemInHands() && m_Player.GetItemInHands().IsWeapon();
172
174 if ( firearmInHands && m_Player.IsRaised() && !m_Player.IsInIronsights() && !m_Player.IsInOptics() && !hic.CameraIsFreeLook() && !m_Player.GetCommand_Melee2() )
175 {
176 ShowCrossHair(GetCrossHairByName("crossT_128x128"));
177 }
179 else if (action && action.GetActionCategory() == AC_CONTINUOUS)
180 {
181 int actionState = m_AM.GetActionState(action);
182
183 if ( actionState != UA_NONE )
184 ShowCrossHair(null);
185 }
187 else if ( m_Player.IsRaised() || m_Player.GetCommand_Melee2() || GetGame().GetUIManager().GetMenu() != null )
188 {
189 ShowCrossHair(null);
190 }
192 else if ( m_Player.GetCommand_Unconscious() )
193 {
194 ShowCrossHair(null);
195 }
197 else
198 {
200 }
201 }
202
203 protected void ShowCrossHair(CrossHair crossHair)
204 {
206 if (!crossHair)
207 {
210
211 return;
212 }
213 else
214 {
215 if (GetCurrentCrossHair() && GetCurrentCrossHair() != crossHair)
217 }
218
220 if (!crossHair.IsCurrent() && crossHair.IsShown())
221 crossHair.Show();
222
223#ifdef WIP_TRACKIR
224 FloatingCrossHair(crossHair.GetWidget());
225#endif
226 }
227
230 {
231 HumanInputController hic = m_Player.GetInputController();
232
234 if (!hic.CameraIsTracking())
235 {
236 widget.SetPos(0, 0);
237 widget.Update();
238 return;
239 }
240
241 ActionBase action = m_AM.GetRunningAction();
242
243 float dt = GetDayZGame().GetDeltaT();
244
245 HumanCommandWeapons hcw = m_Player.GetCommandModifier_Weapons();
246
247 vector transform[4];
248 m_Player.GetTransformWS(transform);
249
250 vector aimAngles = Vector(hcw.GetBaseAimingAngleLR(), hcw.GetBaseAimingAngleUD(), 0.0);
251 vector plrAngles = Math3D.MatrixToAngles(transform);
252
253 aimAngles = Vector(0.0, hcw.GetBaseAimingAngleUD(), 0.0);
254 plrAngles = Vector(hic.GetHeadingAngle() * -Math.RAD2DEG, 0, 0);
255
256 vector resAngle = aimAngles + plrAngles;
257
258 vector start;
259 MiscGameplayFunctions.GetHeadBonePos(m_Player, start);
260
261 vector direction = resAngle.AnglesToVector();
262
263 int layer = ObjIntersectView;
264 float range = 1.0;
265
266 Weapon_Base weapon;
267 if (Class.CastTo(weapon, m_Player.GetItemInHands()) && m_Player.IsRaised())
268 {
269 layer = ObjIntersectFire;
270 range = 10.0;
271
272 vector usti_hlavne_position = weapon.GetSelectionPositionMS( "usti hlavne" );
273 vector konec_hlavne_position = weapon.GetSelectionPositionMS( "konec hlavne" );
274 usti_hlavne_position = m_Player.ModelToWorld(usti_hlavne_position);
275 konec_hlavne_position = m_Player.ModelToWorld(konec_hlavne_position);
276
277 vector contact_dir;
278 int contact_component;
279
280 direction = konec_hlavne_position - usti_hlavne_position;
281 direction.Normalize();
282
283 start = konec_hlavne_position;
284
286 }
287 else
288 {
290 {
292 m_PreviousDirection = direction;
293 }
294
295 float r0[4];
296 float r1[4];
297
298 vector t[4];
299
301 Math3D.MatrixToQuat(t, r0);
302
303 Math3D.DirectionAndUpMatrix(direction, vector.Up, t);
304 Math3D.MatrixToQuat(t, r1);
305
306 Math3D.QuatLerp(r0, r0, r1, 0.1);
307
308 Math3D.QuatToMatrix(r0, t);
309
310 direction = t[2];
311
312 m_PreviousDirection = direction;
313 }
314
315 vector end = start + (direction * range);
316 vector position = end;
317
318 DayZPhysics.RaycastRV(start, end, position, contact_dir, contact_component, null, m_Player, m_Player, false, false, layer);
319
320 /*
321 vector lines[2];
322 lines[0] = start;
323 lines[1] = end;
324
325 Shape.CreateSphere(0xFFFFFF00, ShapeFlags.ONCE, usti_hlavne_position, 0.1);
326 Shape.CreateSphere(0xFFFFFF00, ShapeFlags.ONCE, konec_hlavne_position, 0.1);
327 Shape.CreateLines(0xFF00FF00, ShapeFlags.ONCE, lines, 2);
328 */
329
330 vector screenSpace = GetGame().GetScreenPos(position);
331
332 float sx, sy;
333 widget.GetScreenSize(sx, sy);
334 screenSpace[0] = screenSpace[0] - (sx * 0.5);
335 screenSpace[1] = screenSpace[1] - (sy * 0.5);
336
337 widget.SetScreenPos(screenSpace[0], screenSpace[1]);
338 widget.Update();
339 }
340}
const int AC_CONTINUOUS
Definition _constants.c:3
void ActionBase()
Definition ActionBase.c:73
void ActionManagerBase(PlayerBase player)
protected ref set< ref CrossHair > m_CrossHairs
protected void ShowCrossHair(CrossHair crossHair)
protected CrossHair GetCrossHairByName(string widgetName)
protected void SelectCrossHair()
protected ActionManagerBase m_AM
protected vector m_PreviousDirection
Floating crosshair.
void CrossHairSelector()
void FloatingCrossHair(Widget widget)
Highly WIP, do not use.
protected bool m_PreviousDirectionSet
protected CrossHair GetCurrentCrossHair()
void ~CrossHairSelector()
DayZGame g_Game
Definition DayZGame.c:3654
DayZGame GetDayZGame()
Definition DayZGame.c:3656
EDayZProfilesOptions
DayZPlayer m_Player
Definition Hand_Events.c:42
protected Widget m_Root
Definition SizeToChild.c:91
proto native vector GetScreenPos(vector world_pos)
Transforms position in world to position in screen in pixels as x, y component of vector,...
override ScriptInvoker GetPostUpdateQueue(int call_category)
Definition DayZGame.c:1163
Super root of all classes in Enforce script.
Definition EnScript.c:11
protected bool m_Current
protected bool m_Shown
void CrossHair(Widget w)
string GetName()
protected Widget m_Widget
Widget GetWidget()
protected string m_Name
static proto bool RaycastRV(vector begPos, vector endPos, out vector contactPos, out vector contactDir, out int contactComponent, set< Object > results=NULL, Object with=NULL, Object ignore=NULL, bool sorted=false, bool ground_only=false, int iType=ObjIntersectView, float radius=0.0, CollisionFlags flags=CollisionFlags.NEARESTCONTACT)
Raycasts world by given parameters.
proto native float GetBaseAimingAngleUD()
returns base aiming angle UD - without sway/offsets/...
proto native float GetBaseAimingAngleLR()
returns base aiming angle LR - without sway/offsets/...
proto native float GetHeadingAngle()
returns main heading angle (in radians) -PI .. PI (this is world Y angle player is actualy pointing t...
proto native bool CameraIsTracking()
returns if camera is tracking (using IR device)
proto native bool CameraIsFreeLook()
returns true if freelook is active
Definition EnMath.c:7
proto bool Remove(func fn, int flags=EScriptInvokerRemoveFlags.ALL)
remove specific call from list
proto bool Insert(func fn, int flags=EScriptInvokerInsertFlags.IMMEDIATE)
insert method to list
map: item x vector(index, width, height)
Definition EnWidgets.c:538
protected ActionManagerClient m_AM
protected PlayerBase m_Player
protected Widget m_Root
Definition SizeToChild.c:9
void OnWidgetScriptInit(Widget w)
Definition SizeToChild.c:14
proto float Normalize()
Normalizes vector. Returns length.
static const vector Up
Definition EnConvert.c:107
proto vector AnglesToVector()
Converts spherical coordinates (yaw, pitch, roll in degrees) to unit length vector.
proto native CGame GetGame()
static proto bool CastTo(out Class to, Class from)
Try to safely down-cast base class to child class.
proto native vector Vector(float x, float y, float z)
Vector constructor from components.
static proto vector MatrixToAngles(vector mat[3])
Returns angles of rotation matrix.
static proto void MatrixToQuat(vector mat[3], out float d[4])
Converts rotation matrix to quaternion.
static proto void QuatToMatrix(float q[4], out vector mat[3])
Converts quaternion to rotation matrix.
static proto void DirectionAndUpMatrix(vector dir, vector up, out vector mat[4])
Creates rotation matrix from direction and up vector.
static proto void QuatLerp(out float qout[4], float q1[4], float q2[4], float frac)
Linear interpolation between q1 and q2 with weight 'frac' (0...1)
static const float RAD2DEG
Definition EnMath.c:16
const int CALL_CATEGORY_GUI
Definition tools.c:9
const int UA_NONE
Definition constants.c:416
proto native volatile void Update()