DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
CrossHairSelector.c
См. документацию.
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
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
120 if(m_Player && m_Player.IsPlayerSelected())
121 {
123 }
124 }
125
126 // getters
127 protected void GetPlayer()
128 {
130 }
131
132 protected void GetActionManager()
133 {
134 if( m_Player && m_Player.IsPlayerSelected() )
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
Определения _constants.c:3
void ActionManagerBase(PlayerBase player)
Определения ActionManagerBase.c:63
ActionManagerBase m_AM
Определения CrossHairSelector.c:57
void SelectCrossHair()
Определения CrossHairSelector.c:164
vector m_PreviousDirection
Floating crosshair.
Определения CrossHairSelector.c:64
void CrossHairSelector()
Определения CrossHairSelector.c:67
CrossHair GetCrossHairByName(string widgetName)
Определения CrossHairSelector.c:142
void FloatingCrossHair(Widget widget)
Highly WIP, do not use.
Определения CrossHairSelector.c:229
void ShowCrossHair(CrossHair crossHair)
Определения CrossHairSelector.c:203
CrossHair GetCurrentCrossHair()
Определения CrossHairSelector.c:153
bool m_PreviousDirectionSet
Определения CrossHairSelector.c:65
ref set< ref CrossHair > m_CrossHairs
Определения CrossHairSelector.c:61
void ~CrossHairSelector()
Определения CrossHairSelector.c:76
DayZGame g_Game
Определения DayZGame.c:3868
DayZGame GetDayZGame()
Определения DayZGame.c:3870
EDayZProfilesOptions
Определения EDayZProfilesOptions.c:2
DayZPlayer m_Player
Определения Hand_Events.c:42
Widget m_Root
Определения SizeToChild.c:91
int GetActionCategory()
Определения ActionBase.c:278
Определения ActionBase.c:53
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)
Определения DayZGame.c:1197
Super root of all classes in Enforce script.
Определения EnScript.c:11
void ~CrossHair()
Определения CrossHairSelector.c:17
Widget GetWidget()
Определения CrossHairSelector.c:48
void Hide()
Определения CrossHairSelector.c:41
bool IsShown()
Определения CrossHairSelector.c:29
bool m_Current
Определения CrossHairSelector.c:5
bool m_Shown
Определения CrossHairSelector.c:4
void Show()
Определения CrossHairSelector.c:34
string GetName()
Определения CrossHairSelector.c:19
void CrossHair(Widget w)
Определения CrossHairSelector.c:9
string m_Name
Определения CrossHairSelector.c:3
Widget m_Widget
Определения CrossHairSelector.c:7
bool IsCurrent()
Определения CrossHairSelector.c:24
Определения CrossHairSelector.c:2
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.
Определения DayZPhysics.c:124
proto native float GetBaseAimingAngleLR()
returns base aiming angle LR - without sway/offsets/...
proto native float GetBaseAimingAngleUD()
returns base aiming angle UD - without sway/offsets/...
Определения human.c:994
proto native bool CameraIsFreeLook()
returns true if freelook is active
proto native bool CameraIsTracking()
returns if camera is tracking (using IR device)
proto native float GetHeadingAngle()
returns main heading angle (in radians) -PI .. PI (this is world Y angle player is actualy pointing t...
Определения human.c:18
Определения EnMath3D.c:28
Определения EnMath.c:7
Определения PlayerBaseClient.c:2
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
void OnWidgetScriptInit(Widget w)
Определения SizeToChild.c:14
void Init()
Определения MainMenuPromo.c:48
map: item x vector(index, width, height)
Определения EnWidgets.c:651
shorthand
Определения BoltActionRifle_Base.c:6
Определения EnWidgets.c:190
proto float Normalize()
Normalizes vector. Returns length.
static const vector Up
Определения EnConvert.c:107
proto vector AnglesToVector()
Converts spherical coordinates (yaw, pitch, roll in degrees) to unit length vector.
Определения EnConvert.c:106
proto native CGame GetGame()
static proto bool CastTo(out Class to, Class from)
Try to safely down-cast base class to child class.
static proto void QuatToMatrix(float q[4], out vector mat[3])
Converts quaternion to rotation matrix.
static proto vector MatrixToAngles(vector mat[3])
Returns angles of rotation matrix.
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)
proto native vector Vector(float x, float y, float z)
Vector constructor from components.
static proto void MatrixToQuat(vector mat[3], out float d[4])
Converts rotation matrix to quaternion.
static proto void DirectionAndUpMatrix(vector dir, vector up, out vector mat[4])
Creates rotation matrix from direction and up vector.
static const float RAD2DEG
Определения EnMath.c:16
const int CALL_CATEGORY_GUI
Определения tools.c:9
const int UA_NONE
Определения constants.c:460
proto native volatile void Update()
Определения PlayerSoundManager.c:125