Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_HUDManagerLayoutHandler.c
Go to the documentation of this file.
3typedef ScriptInvokerBase<OnLayoutChangeMethod> OnLayoutChange;
4
5
8{
9 [Attribute()]
10 protected ref array<ref SCR_HUDLayout> m_aHUDLayouts;
11
12 [Attribute()]
13 protected string m_sMainLayout;
14
15 protected bool m_bIsEditorOpen;
16
20
22
23 //------------------------------------------------------------------------------------------------
25 {
26 m_aHUDLayouts.Insert(layout);
27 }
28
29 //------------------------------------------------------------------------------------------------
31 {
32 if (m_aHUDLayouts.Contains(layout))
33 m_aHUDLayouts.RemoveItem(layout);
34 }
35
36 //------------------------------------------------------------------------------------------------
37 array<ref SCR_HUDLayout> GetAllHUDLayouts()
38 {
39 ref array<ref SCR_HUDLayout> allLayouts = {};
40
42 {
43 allLayouts.Insert(layout);
44 }
45
46 return allLayouts;
47 }
48
49 //------------------------------------------------------------------------------------------------
57
58 //------------------------------------------------------------------------------------------------
63
64 //------------------------------------------------------------------------------------------------
65 int GetAllHudElements(notnull out array<SCR_HUDElement> hudElements)
66 {
67 hudElements.Clear();
68
69 foreach (SCR_HUDLayout hudLayout : m_aHUDLayouts)
70 {
71 hudLayout.GetHUDElements(hudElements);
72 }
73
74 return hudElements.Count();
75 }
76
77 //------------------------------------------------------------------------------------------------
78 array<string> GetAllIdentifiers()
79 {
80 array<string> allIdentifiers = {};
81 foreach (SCR_HUDLayout hudLayout : m_aHUDLayouts)
82 {
83 allIdentifiers.Insert(hudLayout.GetIdentifier());
84 }
85
86 return allIdentifiers;
87 }
88
89 //------------------------------------------------------------------------------------------------
94 Widget GetGroupByName(string groupName)
95 {
96 if (!m_ActiveLayout)
97 return null;
98
99 return m_ActiveLayout.GetGroupWidgetByName(groupName);
100 }
101
102 //------------------------------------------------------------------------------------------------
108 {
109 if (!m_ActiveLayout)
110 return null;
111
112 return m_ActiveLayout.GetGroupComponent(groupName);
113 }
114
115 //------------------------------------------------------------------------------------------------
121 {
122 if (!m_ActiveLayout)
123 return null;
124
125 return m_ActiveLayout.FindSlotComponent(slotName);
126 }
127
128 //------------------------------------------------------------------------------------------------
130 {
131 SCR_HUDSlotUIComponent slotToReturn = GetSlotComponentByName(slotName);
132 if (!slotToReturn)
133 {
135 {
136 slotToReturn = layout.FindSlotComponent(slotName);
137 if (slotToReturn)
138 {
139 foundLayout = layout;
140 return slotToReturn;
141 }
142 }
143 }
144
145 foundLayout = m_ActiveLayout;
146 return slotToReturn;
147 }
148
149 //------------------------------------------------------------------------------------------------
154 Widget FindWidgetByName(string widgetName)
155 {
156 if (!m_ActiveLayout)
157 return null;
158
159 return m_ActiveLayout.FindWidgetByName(widgetName);
160 }
161
162 //------------------------------------------------------------------------------------------------
163 Widget FindWidgetByNameFromAnyLayout(string widgetName, out SCR_HUDLayout foundLayout = null)
164 {
165 Widget foundWidget = FindWidgetByName(widgetName);
166 if (foundWidget)
167 {
168 foundLayout = m_ActiveLayout;
169 return foundWidget;
170 }
171
172 foreach (SCR_HUDLayout hudLayout : m_aHUDLayouts)
173 {
174 foundWidget = hudLayout.FindWidgetByName(widgetName);
175 if (foundWidget)
176 {
177 foundLayout = hudLayout;
178 return foundWidget;
179 }
180 }
181
182 return null;
183 }
184
185 //------------------------------------------------------------------------------------------------
186 SCR_HUDLayout FindHUDLayout(string layoutIdentifier)
187 {
188 foreach (SCR_HUDLayout hudLayout : m_aHUDLayouts)
189 {
190 if (hudLayout.GetIdentifier() == layoutIdentifier)
191 return hudLayout;
192 }
193
194 return null;
195 }
196
197 //------------------------------------------------------------------------------------------------
198 protected void InitializeHUDLayouts()
199 {
200 WorkspaceWidget workspace = GetGame().GetWorkspace();
201
202 foreach (SCR_HUDLayout hudLayout : m_aHUDLayouts)
203 {
204 Widget layoutWidget = workspace.CreateWidgets(hudLayout.GetLayout(), null);
205 if (!layoutWidget)
206 continue;
207
208 hudLayout.SetRootWidget(layoutWidget);
209
210 if (hudLayout.GetIdentifier() == m_sMainLayout)
211 {
212 m_ActiveLayout = hudLayout;
213 continue;
214 }
215
216 layoutWidget.SetVisible(false);
217 layoutWidget.SetEnabled(false);
218 }
219 }
220
221 //------------------------------------------------------------------------------------------------
222 void ChangeActiveHUDLayout(string layoutIdentifier = string.Empty)
223 {
224 if (layoutIdentifier.IsEmpty())
225 layoutIdentifier = m_sMainLayout;
226
227 SCR_HUDLayout newLayout = FindHUDLayout(layoutIdentifier);
228 if (!newLayout || newLayout == m_ActiveLayout)
229 return;
230
231 if (m_ActiveLayout)
232 SetLayoutEnabled(m_ActiveLayout.GetIdentifier(), false);
233
235 SCR_HUDLayout oldActiveLayout = m_ActiveLayout;
236
237 // If editor is open we don't change back to the Main layout
239 {
240 newLayout = m_SavedEditorLayout;
242 }
243 else
244 {
245 m_ActiveLayout = newLayout;
246 }
247
248 SetLayoutEnabled(m_ActiveLayout.GetIdentifier(), true);
249
250 array<SCR_HUDElement> allHudElements = {};
251 GetAllHudElements(allHudElements);
252
253 foreach (SCR_HUDElement element : allHudElements)
254 {
255 Widget elementWidget = element.GetWidget();
256 if (!elementWidget)
257 continue;
258
259 Widget oldParentWidget = elementWidget.GetParent();
260 Widget newParentWidget = newLayout.FindWidgetByName(element.GetParentWidgetName());
261
262 // Assign every slot back to the Main layout first to prevent them from getting destroyed
263 if (newLayout.GetIdentifier() != m_sMainLayout)
264 {
265 SCR_HUDLayout oldLayout = element.GetParentLayout();
266 if (oldLayout)
267 oldLayout.RemoveHudElement(element, true);
268
269 elementWidget.SetVisible(false);
270 elementWidget.SetEnabled(false);
271
272 if (mainLayout)
273 mainLayout.AddHudElement(element, true);
274 }
275
276 if (!newParentWidget || !newParentWidget.IsEnabled())
277 continue;
278
279 elementWidget.SetVisible(true);
280 elementWidget.SetEnabled(true);
281
282 SCR_HUDLayout oldLayout = element.GetParentLayout();
283 if (oldLayout)
284 oldLayout.RemoveHudElement(element, true);
285
286 newLayout.AddHudElement(element, true);
287 }
288
290 m_OnLayoutChange.Invoke(newLayout, oldActiveLayout, m_HUDManager);
291
292 // Resize UI 1 frame after initializing it to prevent wrong resizing when done on same frame
293 GetGame().GetCallqueue().Call(newLayout.ResizeLayout);
294 }
295
296 //------------------------------------------------------------------------------------------------
297 void SetLayoutEnabled(string layoutIdentifier, bool isEnabled)
298 {
299 SCR_HUDLayout hudLayout = FindHUDLayout(layoutIdentifier);
300 if (!hudLayout)
301 return;
302
303 Widget hudWidget = hudLayout.GetRootWidget();
304 if (!hudWidget)
305 return;
306
307 hudWidget.SetVisible(isEnabled);
308 hudWidget.SetEnabled(isEnabled);
309 }
310
311 //------------------------------------------------------------------------------------------------
312 protected void StartMainLayout()
313 {
314 if (!m_HUDManager.GetHUDElements().IsEmpty())
315 return;
316
318 m_HUDManager.RemoveHandlerFromUpdatableHandlers(this);
319
322
323 // Wait until the main layout is initialized to prevent changing to editor layouts before the HudLayout are fully initialized
324 SCR_EditorManagerEntity editorManager = SCR_EditorManagerEntity.GetInstance();
325 if (!editorManager)
326 return;
327
328 editorManager.GetOnOpened().Insert(OnEditorOpen);
329 editorManager.GetOnClosed().Insert(OnEditorClose);
330 editorManager.GetOnModeChange().Insert(OnEditorChange);
331 }
332
333 //------------------------------------------------------------------------------------------------
334 override void OnInit(notnull SCR_HUDManagerComponent owner)
335 {
336 super.OnInit(owner);
337
339 }
340
341 //------------------------------------------------------------------------------------------------
342 override void OnUpdate(notnull SCR_HUDManagerComponent owner)
343 {
345 }
346
347 //------------------------------------------------------------------------------------------------
355
356 //------------------------------------------------------------------------------------------------
358 protected void OnEditorOpen()
359 {
360 m_bIsEditorOpen = true;
362 }
363
364 //------------------------------------------------------------------------------------------------
366 protected void OnEditorClose()
367 {
368 m_bIsEditorOpen = false;
369 m_SavedEditorLayout = null;
370 }
371
372 //------------------------------------------------------------------------------------------------
374 protected void OnEditorChange()
375 {
376 if (m_bIsEditorOpen)
378 }
379}
ArmaReforgerScripted GetGame()
Definition game.c:1398
SCR_AIAnimation_Loitering BaseContainerProps
Commanding menu commanding element class.
void SCR_EditorManagerEntity(IEntitySource src, IEntity parent)
UI layouts Menus CleanSweep CleanSweepAreaSelection layout
func OnLayoutChangeMethod
ScriptInvokerBase< OnLayoutChangeMethod > OnLayoutChange
ScriptInvokerBase< ScriptInvokerVoidMethod > ScriptInvokerVoid
void RemoveHudElement(notnull SCR_HUDElement element, bool replaceParent=false)
void AddHudElement(notnull SCR_HUDElement element, bool replaceParent=false)
Widget GetRootWidget()
Widget FindWidgetByName(string widgetName)
string GetIdentifier()
SCR_HUDManagerComponent m_HUDManager
void AddHUDLayout(notnull SCR_HUDLayout layout)
override void OnUpdate(notnull SCR_HUDManagerComponent owner)
ref ScriptInvokerVoid m_OnMainLayoutInitialize
SCR_HUDSlotUIComponent FindSlotComponentFromAnyLayout(string slotName, out SCR_HUDLayout foundLayout=null)
SCR_HUDSlotUIComponent GetSlotComponentByName(string slotName)
int GetAllHudElements(notnull out array< SCR_HUDElement > hudElements)
override void OnInit(notnull SCR_HUDManagerComponent owner)
SCR_HUDLayout FindHUDLayout(string layoutIdentifier)
SCR_HUDGroupUIComponent GetGroupComponent(string groupName)
void OnEditorChange()
when chaning Editor modes store the HudLayout of the newly opened mode
Widget GetGroupByName(string groupName)
ref array< ref SCR_HUDLayout > m_aHUDLayouts
void OnEditorClose()
When editor gets closed allow the change back to the main layout again.
void OnEditorOpen()
When editor gets opened save the editor HudLayout.
Widget FindWidgetByName(string widgetName)
array< ref SCR_HUDLayout > GetAllHUDLayouts()
void SetLayoutEnabled(string layoutIdentifier, bool isEnabled)
Widget FindWidgetByNameFromAnyLayout(string widgetName, out SCR_HUDLayout foundLayout=null)
void ChangeActiveHUDLayout(string layoutIdentifier=string.Empty)
void RemoveHUDLayout(notnull SCR_HUDLayout layout)
SCR_FieldOfViewSettings Attribute