Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_WeaponInfoVehicle.c
Go to the documentation of this file.
2{
3 [Attribute(desc: "Name of the compartment for which this element should be enabled.\nLeave empty if it is meant for all compartments in this entity")]
4 protected string m_sCompartmentName;
5
8
9 //------------------------------------------------------------------------------------------------
10 override protected void DisplayUpdate(IEntity owner, float timeSlice)
11 {
12 if (!m_wRoot || !m_WeaponState)
13 return;
14
15 if (m_WeaponState.m_bReloading)
16 {
17 // Set weapon state change flag
18 m_eWeaponStateEvent |= EWeaponFeature.RELOADING;
19
21 }
22
23 super.DisplayUpdate(owner, timeSlice);
24 }
25
26 //------------------------------------------------------------------------------------------------
27 override protected void OnMuzzleChanged(BaseWeaponComponent weapon, BaseMuzzleComponent muzzle, BaseMuzzleComponent prevMuzzle)
28 {
29 super.OnMuzzleChanged(weapon, muzzle, prevMuzzle);
30
31 // Auto-trigger child events
32 #ifndef WEAPON_INFO_BLOCK_WATERFALL_EVENTS
33 OnTurretReload_init(weapon);
34 #endif
35 }
36
37 //------------------------------------------------------------------------------------------------
39 {
40 float rldTime = m_TurretController.GetReloadTime();
41
42 if (rldTime == 0)
43 return;
44
45 #ifdef WEAPON_INFO_DEBUG_WATERFALL_EVENTS
46 Print("OnTurretReload_init");
47 Print(string.Format(" weapon: %1", weapon));
48 Print(string.Format(" finished: %1", false));
49 #endif
50
51 OnTurretReload(weapon, false, m_TurretController);
52 }
53
54 //------------------------------------------------------------------------------------------------
55 protected void OnTurretReload(BaseWeaponComponent weapon, bool finished, TurretControllerComponent turretController)
56 {
57 if (!m_WeaponState || !weapon)
58 return;
59
60 #ifdef WEAPON_INFO_DEBUG
61 _print("OnTurretReload");
62 _print(string.Format(" weapon: %1", weapon));
63 _print(string.Format(" finished: %1", finished));
64 _print(string.Format(" turretController: %1", turretController));
65 #endif
66
67 if (m_TurretController != turretController)
68 return;
69
70 if (!IsCurrentlyUsingWeapon(weapon))
71 return;
72
73 m_WeaponState.m_bReloading = !finished;
74
76 }
77
78 //------------------------------------------------------------------------------------------------
79 protected void UpdateMagazineIndicator_Reloading(bool finished)
80 {
81 float rldProgress = 0;
82
83 if (!finished)
84 {
85 float rldTime = m_TurretController.GetReloadTime();
86 float rldDuration = m_TurretController.GetReloadDuration();
87
88 if (rldDuration > 0)
89 rldProgress = Math.Clamp((rldDuration - rldTime) / rldDuration, 0, 1);
90 }
91
92 m_Widgets.m_wReloadOutline.SetMaskProgress(rldProgress);
93 m_Widgets.m_wReloadOutline.SetVisible(rldProgress > 0);
94
95 m_Widgets.m_wReloadBackground.SetMaskProgress(rldProgress);
96 m_Widgets.m_wReloadBackground.SetVisible(rldProgress > 0);
97 }
98
99 //------------------------------------------------------------------------------------------------
100 override protected bool DisplayStartDrawInit(IEntity owner)
101 {
102 if(!owner)
103 return false;
104
106
109 return false;
110
111 // Detect and store weapon manager
112 m_WeaponManager = m_TurretController.GetWeaponManager();
113 if (!m_WeaponManager)
114 return false;
115
116 m_MenuManager = GetGame().GetMenuManager();
117 if (!m_MenuManager)
118 return false;
119
120 AddEventHandlers(owner);
121
122 return true;
123 }
124
125 //------------------------------------------------------------------------------------------------
126 override protected void DisplayStartDraw(IEntity owner)
127 {
128 super.DisplayStartDraw(owner);
129
131 if (!character)
132 return;
133
134 m_CompartmentAccess = SCR_CompartmentAccessComponent.Cast(character.GetCompartmentAccessComponent());
136 return;
137
138 BaseCompartmentSlot compartment = m_CompartmentAccess.GetCompartment();
139 if (!compartment)
140 return;
141
142 m_CompartmentAccess.GetOnCompartmentEntered().Insert(OnCompartmentEntered); // watch if player has switched to a different compartment in this entity
143 EvaluateCurrentCompartment(compartment);
144 }
145
146 //------------------------------------------------------------------------------------------------
147 override protected void DisplayStopDraw(IEntity owner)
148 {
149 super.DisplayStopDraw(owner);
150
152 return;
153
154 m_CompartmentAccess.GetOnCompartmentEntered().Remove(OnCompartmentEntered);
155 m_CompartmentAccess = null;
156 }
157
158 //------------------------------------------------------------------------------------------------
161 protected void EvaluateCurrentCompartment(notnull BaseCompartmentSlot currentCompartment)
162 {
163 if (m_sCompartmentName.IsEmpty())
164 return;
165
166 if (m_sCompartmentName == currentCompartment.GetCompartmentName())
167 {
168 Show(true);
169 if (m_eWeaponStateEvent == 0)
170 m_eWeaponStateEvent = EWeaponFeature.WEAPON; // we just took control of a weapon thus we need to show HUD for it
171
172 return;
173 }
174
175 Show(false);
176 }
177
178 //------------------------------------------------------------------------------------------------
179 protected void OnCompartmentEntered(IEntity targetEntity, BaseCompartmentManagerComponent manager, int mgrID, int slotID, bool move)
180 {
181 BaseCompartmentSlot compartment = m_CompartmentAccess.GetCompartment();
182 if (compartment)
183 EvaluateCurrentCompartment(compartment);
184 }
185
186 //------------------------------------------------------------------------------------------------
187 override protected void DisplayControlledEntityChanged(IEntity from, IEntity to)
188 {
189 super.DisplayControlledEntityChanged(from, to);
190
192 return;
193
194 if (m_CompartmentAccess.GetOwner() != from)
195 return;
196
197 m_CompartmentAccess.GetOnCompartmentEntered().Remove(OnCompartmentEntered);
198 m_CompartmentAccess = null;
199 }
200
201 //------------------------------------------------------------------------------------------------
202 override protected void AddEventHandlers(IEntity owner)
203 {
205 {
206 m_EventHandlerManager.RegisterScriptHandler("OnWeaponChanged", this, OnWeaponChanged);
207 m_EventHandlerManager.RegisterScriptHandler("OnMuzzleChanged", this, OnMuzzleChanged);
208 m_EventHandlerManager.RegisterScriptHandler("OnMagazineChanged", this, OnMagazineChanged);
209 m_EventHandlerManager.RegisterScriptHandler("OnMagazineCountChanged", this, OnMagazineCountChanged);
210 m_EventHandlerManager.RegisterScriptHandler("OnAmmoCountChanged", this, OnAmmoCountChanged);
211 m_EventHandlerManager.RegisterScriptHandler("OnFiremodeChanged", this, OnFiremodeChanged);
212 m_EventHandlerManager.RegisterScriptHandler("OnZeroingChanged", this, OnZeroingChanged);
213 m_EventHandlerManager.RegisterScriptHandler("OnADSChanged", this, OnADSChanged);
214 m_EventHandlerManager.RegisterScriptHandler("OnTurretReload", this, OnTurretReload);
215 }
216 }
217
218 //------------------------------------------------------------------------------------------------
219 override protected void RemoveEventHandlers(IEntity owner)
220 {
222 {
223 m_EventHandlerManager.RemoveScriptHandler("OnWeaponChanged", this, OnWeaponChanged);
224 m_EventHandlerManager.RemoveScriptHandler("OnMuzzleChanged", this, OnMuzzleChanged);
225 m_EventHandlerManager.RemoveScriptHandler("OnMagazineChanged", this, OnMagazineChanged);
226 m_EventHandlerManager.RemoveScriptHandler("OnMagazineCountChanged", this, OnMagazineCountChanged);
227 m_EventHandlerManager.RemoveScriptHandler("OnAmmoCountChanged", this, OnAmmoCountChanged);
228 m_EventHandlerManager.RemoveScriptHandler("OnFiremodeChanged", this, OnFiremodeChanged);
229 m_EventHandlerManager.RemoveScriptHandler("OnZeroingChanged", this, OnZeroingChanged);
230 m_EventHandlerManager.RemoveScriptHandler("OnADSChanged", this, OnADSChanged);
231 m_EventHandlerManager.RemoveScriptHandler("OnTurretReload", this, OnTurretReload);
232 }
233 m_EventHandlerManager = null;
234 }
235
236 //------------------------------------------------------------------------------------------------
237 override SCR_2DSightsComponent GetSights()
238 {
239 if (!m_Turret)
240 return null;
241
242 SCR_2DSightsComponent sights = SCR_2DSightsComponent.Cast(m_Turret.FindComponent(SCR_2DSightsComponent));
243
244 return sights;
245 }
246};
ArmaReforgerScripted GetGame()
Definition game.c:1398
Widget m_wRoot
EventHandlerManagerComponent m_EventHandlerManager
MenuManager m_MenuManager
void _print(string s)
UI Textures DeployMenu Briefing conflict_HintBanner_1_UI desc
proto external Managed FindComponent(typename typeName)
Definition Math.c:13
static IEntity GetLocalControlledEntity()
bool IsCurrentlyUsingWeapon(notnull BaseWeaponComponent weapon)
void OnMagazineCountChanged(BaseWeaponComponent weapon, int magazineCount, bool isGrenade)
SCR_CompartmentAccessComponent m_CompartmentAccess
void OnMagazineChanged(BaseWeaponComponent weapon, BaseMagazineComponent magazine, BaseMagazineComponent prevMagazine)
BaseWeaponManagerComponent m_WeaponManager
ref SCR_WeaponState m_WeaponState
EWeaponFeature m_eWeaponStateEvent
void OnFiremodeChanged(BaseWeaponComponent weapon, BaseMuzzleComponent muzzle, BaseFireMode firemode)
void OnZeroingChanged(BaseWeaponComponent weapon, int zeroing)
void OnWeaponChanged(BaseWeaponComponent weapon, BaseWeaponComponent prevWeapon)
void OnAmmoCountChanged(BaseWeaponComponent weapon, BaseMuzzleComponent muzzle, BaseMagazineComponent magazine, int ammoCount, bool isBarrelChambered)
ref SCR_WeaponInfoWidgets m_Widgets
void OnADSChanged(BaseWeaponComponent weapon, bool inADS)
void AddEventHandlers(IEntity owner)
override SCR_2DSightsComponent GetSights()
bool DisplayStartDrawInit(IEntity owner)
void DisplayControlledEntityChanged(IEntity from, IEntity to)
void DisplayStartDraw(IEntity owner)
TurretControllerComponent m_TurretController
void OnTurretReload(BaseWeaponComponent weapon, bool finished, TurretControllerComponent turretController)
void DisplayStopDraw(IEntity owner)
void OnMuzzleChanged(BaseWeaponComponent weapon, BaseMuzzleComponent muzzle, BaseMuzzleComponent prevMuzzle)
void EvaluateCurrentCompartment(notnull BaseCompartmentSlot currentCompartment)
void RemoveEventHandlers(IEntity owner)
void DisplayUpdate(IEntity owner, float timeSlice)
void OnTurretReload_init(BaseWeaponComponent weapon)
void UpdateMagazineIndicator_Reloading(bool finished)
void OnCompartmentEntered(IEntity targetEntity, BaseCompartmentManagerComponent manager, int mgrID, int slotID, bool move)
override void Show()
Definition gameLib.c:262
proto void Print(void var, LogLevel level=LogLevel.NORMAL)
Prints content of variable to console/log.
SCR_FieldOfViewSettings Attribute