Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_CampaignLogisticMapUIBase.c
Go to the documentation of this file.
2{
3 [Attribute("ActualPriority")]
4 protected string m_sPriorityTextWidgetName;
5
6 [Attribute("SupplyLimitSlider")]
7 protected string m_sSupplyLimitSliderName;
8
9 [Attribute("ExtendedInfoWrapper")]
11
12 [Attribute("PriorityButtonsWrapper")]
14
15 [Attribute("CloseButton")]
16 protected string m_sCloseButtonName;
17
18 [Attribute("SwitchPriorityButton")]
20
21 [Attribute("ButtonPriority1")]
22 protected string m_sPriorityButton1Name;
23
24 [Attribute("ButtonPriority2")]
25 protected string m_sPriorityButton2Name;
26
27 [Attribute("ButtonPriority3")]
28 protected string m_sPriorityButton3Name;
29
30 [Attribute("ReservedSupplyAmountSlider")]
32
33 [Attribute("PriorityWrapper")]
34 protected string m_sPriorityWrapperName;
35
36 const string LOGISTIC_CLOSE_ACTION_NAME = "LogisticClose";
37
40
42
45
48
49 protected ref array<SCR_ModularButtonComponent> m_aPriorityButtons = {};
50
55
56 protected static ref ScriptInvokerBool s_OnBaseSelected;
57
58 //------------------------------------------------------------------------------------------------
66
67 //------------------------------------------------------------------------------------------------
69 {
70 return m_bIsSelected;
71 }
72
73 //------------------------------------------------------------------------------------------------
74 bool IsOpened()
75 {
77 }
78
79 //------------------------------------------------------------------------------------------------
80 override protected bool CanShowOpenButton()
81 {
82 if (!super.CanShowOpenButton() || m_wExtendedInfoWrapper.IsVisible())
83 return false;
84
85 return true;
86 }
87
88 //------------------------------------------------------------------------------------------------
90 {
91 SCR_CampaignFaction faction = SCR_CampaignFaction.Cast(SCR_FactionManager.SGetLocalPlayerFaction());
92 if (faction != m_Base.GetFaction() || m_Base.GetType() == SCR_ECampaignBaseType.SOURCE_BASE)
93 return false;
94
95 return true;
96 }
97
98 //------------------------------------------------------------------------------------------------
99 protected void OpenExtendedInfoWrapper()
100 {
102 return;
103
105 {
106 m_wExtendedInfoWrapper.SetVisible(true);
107
109
110 if (m_wOpenButton)
111 m_wOpenButton.SetVisible(false);
112
114 SelectIcon();
116 m_wHighlightImg.SetVisible(false);
117
120
121 GetGame().GetInputManager().AddActionListener(LOGISTIC_CLOSE_ACTION_NAME, EActionTrigger.DOWN, OnLogisticClose);
122
124 GetGame().GetWorkspace().SetFocusedWidget(m_wSupplyLimitSliderWidget);
125 }
126 }
127
128 //------------------------------------------------------------------------------------------------
129 override protected void OnOpenButtonActivated(SCR_InputButtonComponent button, string action)
130 {
132 }
133
134 //------------------------------------------------------------------------------------------------
135 override bool OnClick(Widget w, int x, int y, int button)
136 {
137 super.OnClick(w, x, y, button);
138
140
141 return false;
142 }
143
144 //------------------------------------------------------------------------------------------------
145 override bool OnMouseEnter(Widget w, int x, int y)
146 {
147 SCR_CampaignFaction faction = SCR_CampaignFaction.Cast(SCR_FactionManager.SGetLocalPlayerFaction());
148
149 if (!m_Base || faction != m_Base.GetFaction())
150 {
151 m_wPriorityWrapper.SetVisible(false);
152 return super.OnMouseEnter(w, x, y);
153 }
154
155 if (m_Base.GetType() == SCR_ECampaignBaseType.SOURCE_BASE)
156 m_wPriorityWrapper.SetVisible(false);
157 else
158 {
159 UpdatePriorityWidgetsValues(m_Base.GetSupplyRequestExecutionPriority());
160 m_Base.GetOnSupplyRequestExecutionPriorityChanged().Insert(UpdatePriorityWidgetsValues);
161 }
162
163 return super.OnMouseEnter(w, x, y);
164 }
165
166 //------------------------------------------------------------------------------------------------
168 {
169 super.InitBase(base);
170
171 if (!base)
172 return;
173
175 return;
176
177 m_SupplyLimitSlider.SetValue(base.GetSupplyLimit());
178
179 if (!base.IsResupplyTaskCreationEnabled())
180 {
181 m_SupplyLimitSlider.SetVisible(false);
182 }
183
185 return;
186
187 m_ReservedSupplyAmountSlider.SetValue(base.GetReservedSupplyAmount());
188 }
189
190 //------------------------------------------------------------------------------------------------
191 override void Select(bool select = true)
192 {
193 super.Select(select);
194
195 if (m_Base && m_Base.GetType() == SCR_ECampaignBaseType.SOURCE_BASE)
196 m_wPriorityWrapper.SetVisible(false);
197
198 if (!select)
199 {
201
202 if (m_wOpenButton)
204
205 m_wExtendedInfoWrapper.SetVisible(false);
206 m_wPriorityTextWidget.SetVisible(true);
207
208 GetGame().GetInputManager().RemoveActionListener(LOGISTIC_CLOSE_ACTION_NAME, EActionTrigger.DOWN, OnLogisticClose);
209 }
210 else
211 {
212 m_wPriorityTextWidget.SetVisible(false);
213 }
214
216 s_OnBaseSelected.Invoke(select);
217 }
218
219 //------------------------------------------------------------------------------------------------
220 override bool OnMouseLeave(Widget w, Widget enterW, int x, int y)
221 {
222 if (m_bIsSelected)
223 return false;
224
225 return super.OnMouseLeave(w, enterW, x, y);
226 }
227
228 //------------------------------------------------------------------------------------------------
229 protected void OnLogisticClose()
230 {
231 // Add delay so Select is executed after OnClick and widget is properly closed
232 GetGame().GetCallqueue().CallLater(Select, 0, false, false);
233 }
234
235 // ------------------------------------------------------------------------------
236 protected void OnSupplyLimitChanged(SCR_SliderComponent sliderComponent, float value)
237 {
238 PlayerController playerController = GetGame().GetPlayerController();
239 if (!playerController)
240 return;
241
242 SCR_CampaignFactionCommanderPlayerComponent campaignFactionCommander = SCR_CampaignFactionCommanderPlayerComponent.Cast(playerController.FindComponent(SCR_CampaignFactionCommanderPlayerComponent));
243 if (!campaignFactionCommander)
244 return;
245
246 UpdateSliderDisplayValue(sliderComponent);
247
248 if (m_Base)
249 campaignFactionCommander.SetSuppliesLimit(m_Base, value);
250 }
251
252 // ------------------------------------------------------------------------------
253 protected void OnReservedSupplyAmountChanged(SCR_SliderComponent sliderComponent, float value)
254 {
255 PlayerController playerController = GetGame().GetPlayerController();
256 if (!playerController)
257 return;
258
259 SCR_CampaignFactionCommanderPlayerComponent campaignFactionCommander = SCR_CampaignFactionCommanderPlayerComponent.Cast(playerController.FindComponent(SCR_CampaignFactionCommanderPlayerComponent));
260 if (!campaignFactionCommander)
261 return;
262
263 UpdateSliderDisplayValue(sliderComponent);
264
265 campaignFactionCommander.SetReservedSupplyAmount(m_Base, value);
266 }
267
268 // ------------------------------------------------------------------------------
271 {
272 if (m_Base)
273 slider.SetShownValueMultiplier(m_Base.GetSuppliesMax());
274
275 slider.SetValue(slider.GetValue());
276 }
277
278 // ------------------------------------------------------------------------------
279 protected void OnPriorityButtonToggled(notnull SCR_ModularButtonComponent newPriorityButton, bool isOn)
280 {
281 if (!isOn)
282 newPriorityButton.SetToggled(true, false);
283
284 SetPriorityButtonsState(newPriorityButton);
285 }
286
287 // ------------------------------------------------------------------------------
288 protected void OnSwitchPriorityButton()
289 {
290 int currentPriority = m_Base.GetSupplyRequestExecutionPriority();
291 int minPriority, maxPriority;
292 SCR_Enum.GetRange(SCR_ESupplyRequestExecutionPriority, minPriority, maxPriority);
293
294 int newPriority = Math.Mod(currentPriority + 1, maxPriority + 1);
295 SCR_ModularButtonComponent newPriorityButton = m_aPriorityButtons.Get(newPriority);
296 if (!newPriorityButton)
297 return;
298
299 SetPriorityButtonsState(newPriorityButton);
300 }
301
302 // ------------------------------------------------------------------------------
303 protected void SetPriorityButtonsState(notnull SCR_ModularButtonComponent newPriorityButton)
304 {
305 // Set the priority based on newPriorityButton
306 // We toggle off all other priority buttons
307 foreach (int index, SCR_ModularButtonComponent currentButton : m_aPriorityButtons)
308 {
309 if (currentButton == newPriorityButton)
311 else
312 currentButton.SetToggled(false, false);
313 }
314 }
315
316 // ------------------------------------------------------------------------------
317 protected void SetSupplyRequestExecutionPriority(int priority)
318 {
319 PlayerController playerController = GetGame().GetPlayerController();
320 if (!playerController)
321 return;
322
323 SCR_CampaignFactionCommanderPlayerComponent campaignFactionCommander = SCR_CampaignFactionCommanderPlayerComponent.Cast(playerController.FindComponent(SCR_CampaignFactionCommanderPlayerComponent));
324 if (!campaignFactionCommander)
325 return;
326
327 if (m_Base)
328 campaignFactionCommander.SetSupplyRequestExecutionPriority(m_Base, priority);
329 }
330
331 // ------------------------------------------------------------------------------
332 protected void SetPriorityButtonWidgetsVisibility(bool isVisible)
333 {
334 m_wPriorityButtonsWrapper.SetVisible(isVisible);
335 }
336
337 // ------------------------------------------------------------------------------
338 protected void UpdatePriorityWidgetsValues(int priority)
339 {
341 m_wPriorityTextWidget.SetText((priority + 1).ToString());
342
343 foreach (int index, SCR_ModularButtonComponent currentButton : m_aPriorityButtons)
344 {
345 if (index == priority)
346 currentButton.SetToggled(true, false);
347 else
348 currentButton.SetToggled(false, false);
349 }
350 }
351
352 //------------------------------------------------------------------------------------------------
353 override void HandlerAttached(Widget w)
354 {
355 super.HandlerAttached(w);
356
357 if (!GetGame().InPlayMode())
358 return;
359
362 return;
363
364 m_wExtendedInfoWrapper.SetVisible(false);
365
368 return;
369
372 return;
373
376 return;
377
380
381 Widget reservedSupplyAmountSliderWidget = w.FindAnyWidget(m_sReservedSupplyAmountSliderName);
382 if (!reservedSupplyAmountSliderWidget)
383 return;
384
385 m_ReservedSupplyAmountSlider = SCR_SliderComponent.Cast(reservedSupplyAmountSliderWidget.FindHandler(SCR_SliderComponent));
387 return;
388
389 m_SupplyLimitSlider.GetOnChangedFinal().Insert(OnSupplyLimitChanged);
391
393
395
399
401
402 m_aPriorityButtons.Insert(SCR_ModularButtonComponent.FindComponent(m_wPriorityButtonWidget1));
403 m_aPriorityButtons.Insert(SCR_ModularButtonComponent.FindComponent(m_wPriorityButtonWidget2));
404 m_aPriorityButtons.Insert(SCR_ModularButtonComponent.FindComponent(m_wPriorityButtonWidget3));
405
406 foreach (SCR_ModularButtonComponent button : m_aPriorityButtons)
407 {
408 if (button)
409 button.m_OnToggled.Insert(OnPriorityButtonToggled);
410 }
411
413
415 if (!m_CloseButton)
416 return;
417
418 m_CloseButton.m_OnActivated.Insert(OnLogisticClose);
419
422 return;
423
425 }
426
427 //------------------------------------------------------------------------------------------------
428 override void HandlerDeattached(Widget w)
429 {
430 super.HandlerDeattached(w);
431
433 m_SupplyLimitSlider.GetOnChangedFinal().Remove(OnSupplyLimitChanged);
434
437
438 if (m_CloseButton)
439 m_CloseButton.m_OnActivated.Remove(OnLogisticClose);
440
443
445 {
446 foreach (SCR_ModularButtonComponent button : m_aPriorityButtons)
447 {
448 if (button)
449 button.m_OnToggled.Remove(OnPriorityButtonToggled);
450 }
451 }
452
453 if (m_Base)
454 m_Base.GetOnSupplyRequestExecutionPriorityChanged().Remove(UpdatePriorityWidgetsValues);
455 }
456}
ArmaReforgerScripted GetGame()
Definition game.c:1398
SCR_DestructionSynchronizationComponentClass ScriptComponentClass int index
void SCR_FactionManager(IEntitySource src, IEntity parent)
ScriptInvokerBase< ScriptInvokerBoolMethod > ScriptInvokerBool
Definition Math.c:13
void SetPriorityButtonsState(notnull SCR_ModularButtonComponent newPriorityButton)
override bool OnClick(Widget w, int x, int y, int button)
void OnSupplyLimitChanged(SCR_SliderComponent sliderComponent, float value)
void OnReservedSupplyAmountChanged(SCR_SliderComponent sliderComponent, float value)
SCR_InputButtonComponent m_SwitchPriorityButton
override bool OnMouseEnter(Widget w, int x, int y)
override void InitBase(SCR_CampaignMilitaryBaseComponent base)
override bool OnMouseLeave(Widget w, Widget enterW, int x, int y)
void OnPriorityButtonToggled(notnull SCR_ModularButtonComponent newPriorityButton, bool isOn)
static ref ScriptInvokerBool s_OnBaseSelected
override void Select(bool select=true)
void UpdateSliderDisplayValue(SCR_SliderComponent slider)
Multiplies the slider value with the max amount of supplies of base.
void OnOpenButtonActivated(SCR_InputButtonComponent button, string action)
ref array< SCR_ModularButtonComponent > m_aPriorityButtons
static ScriptInvokerBool GetOnBaseSelected()
override void SelectIcon(bool invoke=true)
SCR_CampaignMilitaryBaseComponent m_Base
static SCR_InputButtonComponent GetInputButtonComponent(string name, notnull Widget parent, bool searchAllChildren=true)
static SCR_MapEntity GetMapInstance()
Get map entity instance.
ImageWidget m_wHighlightImg
void SetShownValueMultiplier(float multiplier)
void SetValue(float value)
SCR_FieldOfViewSettings Attribute
EActionTrigger
proto external string ToString()
Plain C++ pointer, no weak pointers, no memory management.