Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_SelectionMenu.c
Go to the documentation of this file.
1//------------------------------------------------------------------------------------------------
5[BaseContainerProps(configRoot: true)]
7{
8 protected const int OPEN_DELAY = 200;
9
10 // Attributes
11 [Attribute()]
13
14 [Attribute()]
15 protected string m_sOpenSound;
16
17 [Attribute()]
18 protected string m_sCloseSound;
19
20 [Attribute()]
21 protected string m_sSelectionSound;
22
23 [Attribute()]
24 protected string m_sPerformSound;
25
26 [Attribute()]
27 protected string m_sEnterCategorySound;
28
29 [Attribute()]
30 protected string m_sLeaveCategorySound;
31
32 // Variables
34
35 protected ref array<ref SCR_SelectionMenuEntry> m_aRootEntries = {}; // 1st layer of entries
36 protected ref array<ref SCR_SelectionMenuEntry> m_aEntries = {}; // Current layer entries
38 protected int m_iSelectedEntryId;
39
41 protected bool m_bOpened;
42 protected bool m_bEntryPerformed;
44 protected bool m_bClosingMenu;
45 protected bool m_bOpenedForTime;
46
47 // Categories and multi layering
48 protected ref array<SCR_SelectionMenuCategoryEntry> m_aSelectedCategories = {};
49
50 // Events
57
61
64
65 //------------------------------------------------------------------------------------------------
66 protected void InvokeOnBeforeOpen()
67 {
69 m_OnBeforeOpen.Invoke(this);
70 }
71
72 //------------------------------------------------------------------------------------------------
80
81 //------------------------------------------------------------------------------------------------
82 protected void InvokeOnOpen()
83 {
84 if (m_OnOpen)
85 m_OnOpen.Invoke(this);
86 }
87
88 //------------------------------------------------------------------------------------------------
90 {
91 if (!m_OnOpen)
92 m_OnOpen = new ScriptInvoker();
93
94 return m_OnOpen;
95 }
96
97 //------------------------------------------------------------------------------------------------
98 protected void InvokeOnClose()
99 {
100 if (m_OnClose)
101 m_OnClose.Invoke(this);
102 }
103
104 //------------------------------------------------------------------------------------------------
106 {
107 if (!m_OnClose)
108 m_OnClose = new ScriptInvoker();
109
110 return m_OnClose;
111 }
112
113 //------------------------------------------------------------------------------------------------
114 protected void InvokeOnSelect(SCR_SelectionMenuEntry entry, int id)
115 {
116 if (m_OnSelect)
117 m_OnSelect.Invoke(this, entry, id);
118 }
119
120 //------------------------------------------------------------------------------------------------
122 {
123 if (!m_OnSelect)
125
126 return m_OnSelect;
127 }
128
129 //------------------------------------------------------------------------------------------------
131 {
132 if (!m_OnOpenFailed)
134
135 return m_OnOpenFailed;
136 }
137
138 //------------------------------------------------------------------------------------------------
140 {
141 if (m_OnPerform)
142 m_OnPerform.Invoke(this, entry);
143 }
144
145 //------------------------------------------------------------------------------------------------
147 {
148 if (!m_OnPerform)
150
151 return m_OnPerform;
152 }
153
154 //------------------------------------------------------------------------------------------------
156 {
158 m_OnOpenCategory.Invoke(this, entry, level);
159 }
160
161 //------------------------------------------------------------------------------------------------
169
170 //------------------------------------------------------------------------------------------------
172 {
173 if (m_OnAddEntry)
174 m_OnAddEntry.Invoke(this, entry);
175 }
176
177 //------------------------------------------------------------------------------------------------
179 {
180 if (!m_OnAddEntry)
182
183 return m_OnAddEntry;
184 }
185
186 //------------------------------------------------------------------------------------------------
188 {
189 if (m_OnRemoveEntry)
190 m_OnRemoveEntry.Invoke(this, entry);
191 }
192
193 //------------------------------------------------------------------------------------------------
201
202 //------------------------------------------------------------------------------------------------
203 protected void InvokeOnUpdateEntries(array<ref SCR_SelectionMenuEntry> entries)
204 {
206 m_OnUpdateEntries.Invoke(this, entries);
207 }
208
209 //------------------------------------------------------------------------------------------------
217
218 //------------------------------------------------------------------------------------------------
220 {
222 m_OnControllerChanged.Invoke(this, inputs);
223 }
224
225 //------------------------------------------------------------------------------------------------
233
234 //------------------------------------------------------------------------------------------------
235 // Custom methods
236 //------------------------------------------------------------------------------------------------
237
238 //------------------------------------------------------------------------------------------------
239 void Open()
240 {
242
243 // Prevent opening emtpy menu
244 if (m_ControllerInputs.m_bPreventEmptyMenuOpen && m_aEntries.IsEmpty())
245 {
246 if (m_OnOpenFailed)
247 m_OnOpenFailed.Invoke(this, SCR_ESelectionMenuFailReason.MENU_EMPTY);
248 return;
249 }
250
251 if (m_bOpened)
252 {
253 if (m_OnOpenFailed)
254 m_OnOpenFailed.Invoke(this, SCR_ESelectionMenuFailReason.MENU_ALREADY_OPEN);
255 return;
256 }
257
258 m_bOpened = true;
259 m_bEntryPerformed = false;
260 m_bClosingMenu = false;
262
263 // Call later to set opened for time to allow closing after reaching the delay
264 m_bOpenedForTime = false;
265
266 if (!m_ControllerInputs.m_sToggleActionAlternative.IsEmpty())
267 GetGame().GetCallqueue().CallLater(AllowClosing, OPEN_DELAY);
268 else
269 AllowClosing(); // Allow closing immidiatelly when toggle is not set
270
271 // Start on root
272 if (m_ControllerInputs.m_bOpenInRoot)
273 OpenInRoot();
274
275 OnOpen();
276
277 InvokeOnOpen();
279
280 // Call update in next frame to be sure item preview is prepared
281 GetGame().GetCallqueue().CallLater(UpdateEntries);
282 }
283
284 //------------------------------------------------------------------------------------------------
286 protected void AllowClosing()
287 {
288 // Set true to state that time for allow closing has already passed
289 m_bOpenedForTime = true;
290
291 // Close menu if closing was requested before it was possible
293 {
294 Close();
295 return;
296 }
297
298 m_bClosingMenu = false;
299 }
300
301 //------------------------------------------------------------------------------------------------
303 protected void OnOpen(){}
304
305 //------------------------------------------------------------------------------------------------
307 void Close()
308 {
309 m_bClosingMenu = true;
310
311 if (!m_bOpenedForTime)
312 return;
313
314 // Perform
317
318 m_bOpened = false;
320 OnClose();
321
323
326 }
327
328 //------------------------------------------------------------------------------------------------
330 protected void OnClose(){}
331
332 //------------------------------------------------------------------------------------------------
333 void Update(float timeSlice)
334 {
335 // Context
336 if (m_bOpened)
337 GetGame().GetInputManager().ActivateContext(m_Inputs.m_sContext);
338
340 GetGame().GetInputManager().ActivateContext(m_ControllerInputs.m_sControllerContext);
341
342 OnUpdate(timeSlice);
343 }
344
345 //------------------------------------------------------------------------------------------------
347 protected void OnUpdate(float timeSlice){}
348
349 //------------------------------------------------------------------------------------------------
350 void Init()
351 {
352 Close();
353 }
354
355 //------------------------------------------------------------------------------------------------
356 protected void PlaySound(string sound)
357 {
358 if (!sound.IsEmpty())
359 SCR_UISoundEntity.SoundEvent(sound);
360 }
361
362 //------------------------------------------------------------------------------------------------
363 // Entries handling
364 //------------------------------------------------------------------------------------------------
365
366 //------------------------------------------------------------------------------------------------
368 protected void SelectEntry() {}
369
370 //------------------------------------------------------------------------------------------------
372 {
373 if (!entry.IsEnabled())
374 return;
375
376 // Is category entry
378
379 entry.Perform();
380
381 // Generic entry
382 if (!category)
383 {
384 m_bEntryPerformed = true;
385
386 if (m_ControllerInputs.m_bCloseOnPerform)
387 Close();
388 }
389
390 // Category
391 if (category)
392 {
393 if (!m_bClosingMenu)
395 // Perform default action on closing
396
397 return;
398 }
399
401
402 InvokeOnPerform(entry);
403
404 if (!category && !m_bClosingMenu)
405 m_bEntryPerformed = false;
406 }
407
408 //------------------------------------------------------------------------------------------------
411 {
412 //AddEntries(category.GetEntries(), true);
413
415
416 // Repopulate entries
417 m_aEntries.Clear();
418
419 for (int i = 0, count = category.GetEntries().Count(); i < count; i++)
420 {
421 m_aEntries.Insert(category.GetEntries()[i]);
422 }
423
424 // Update
426 InvokeOnUpdateEntries(category.GetEntries());
427
429 }
430
431 //------------------------------------------------------------------------------------------------
432 protected void LeaveCategory()
433 {
435 if (!category)
436 return;
437
439
441 m_aEntries.Clear();
442
443
444 // Repopulate entries with previous entry
445 if (category)
446 {
447 array<ref SCR_SelectionMenuEntry> catEntries = category.GetEntries();
448
449 // Previous category
450 for (int i = 0, count = catEntries.Count(); i < count; i++)
451 {
452 m_aEntries.Insert(catEntries[i]);
453 }
454 }
455 else
456 {
457 // Root
458 for (int i = 0, count = m_aRootEntries.Count(); i < count; i++)
459 {
460 m_aEntries.Insert(m_aRootEntries[i]);
461 }
462 }
463
466
468 }
469
470 //------------------------------------------------------------------------------------------------
472 protected void OpenInRoot()
473 {
474 m_aSelectedCategories.Clear();
475 m_aEntries.Clear();
476
477 for (int i = 0, count = m_aRootEntries.Count(); i < count; i++)
478 {
479 m_aEntries.Insert(m_aRootEntries[i]);
480 }
481
482 InvokeOnOpenCategory(null, 0);
484 }
485
486 //------------------------------------------------------------------------------------------------
490 {
491 if (!entry)
492 {
494 m_aRootEntries.Insert(newEntry);
495 return;
496 }
497
498 m_aRootEntries.Insert(entry);
499
500 // Update entries
501 if (!CurrentCategory())
502 {
503 m_aEntries.Insert(entry);
504 InvokeOnAddEntry(entry);
506 }
507 }
508
509 //------------------------------------------------------------------------------------------------
512 {
514
515 if (!entry)
516 entry = new SCR_SelectionMenuCategoryEntry();
517
518 AddEntry(entry);
519 }
520
521 //------------------------------------------------------------------------------------------------
524 void AddEntries(notnull array<ref SCR_SelectionMenuEntry> entries, bool replace = false)
525 {
526 // Clear
527 if (replace)
528 {
529 m_aRootEntries.Clear();
530
531 if (!CurrentCategory())
532 m_aEntries.Clear();
533 }
534
535 // Add
536 for (int i = 0, count = entries.Count(); i < count; i++)
537 {
538 AddEntry(entries[i]);
539 }
540
541 if (!CurrentCategory())
543
545 }
546
547 //------------------------------------------------------------------------------------------------
550 {
552
553 foreach (SCR_SelectionMenuEntry entry : m_aEntries)
554 {
555 if (entry)
556 entry.Update();
557 }
558 }
559
560 //------------------------------------------------------------------------------------------------
562 void UpdateSelectedEntries(notnull array<ref SCR_SelectionMenuEntry> entries)
563 {
564 InvokeOnUpdateEntries(entries);
565
566 foreach (SCR_SelectionMenuEntry entry : entries)
567 {
568 if (entry)
569 entry.Update();
570 }
571 }
572
573 //------------------------------------------------------------------------------------------------
576 {
577 m_aRootEntries.RemoveItem(entry);
578
579 // Update entries
580 if (!CurrentCategory())
581 {
582 m_aEntries.RemoveItem(entry);
584 }
585 }
586
587 //------------------------------------------------------------------------------------------------
590 {
591 m_aRootEntries.Clear();
592
593 // Update entries
594 if (!CurrentCategory())
595 {
596 m_aEntries.Clear();
598 }
599 }
600
601 //------------------------------------------------------------------------------------------------
605 {
606 if (m_aSelectedCategories.IsEmpty())
607 return null;
608
610 }
611
612 //------------------------------------------------------------------------------------------------
615 {
616 m_Display = display;
617
618 if (display)
619 display.SetupMenu(this);
620 }
621
622 //------------------------------------------------------------------------------------------------
623 // Inputs
624 //------------------------------------------------------------------------------------------------
625
626 //------------------------------------------------------------------------------------------------
628 protected void AddActionListeners()
629 {
630 if (m_ControllerInputs.m_bCloseOnReleaseOpen)
631 GetGame().GetInputManager().AddActionListener(m_ControllerInputs.m_sOpenAction, EActionTrigger.UP, OnOpenInputRelease);
632
633 if (!m_ControllerInputs.m_sToggleActionAlternative.IsEmpty())
634 GetGame().GetInputManager().AddActionListener(m_ControllerInputs.m_sToggleActionAlternative, EActionTrigger.DOWN, OnAlternativeToggleInput);
635
636 if (!m_Inputs.m_sPerformAction.IsEmpty())
637 GetGame().GetInputManager().AddActionListener(m_Inputs.m_sPerformAction, EActionTrigger.DOWN, OnPerformInput);
638
639 if (!m_Inputs.m_sBackAction.IsEmpty())
640 GetGame().GetInputManager().AddActionListener(m_Inputs.m_sBackAction, EActionTrigger.DOWN, OnBackInput);
641 }
642
643 //------------------------------------------------------------------------------------------------
645 protected void RemoveActionListeners()
646 {
648 return;
649
650 GetGame().GetInputManager().RemoveActionListener(m_ControllerInputs.m_sOpenAction, EActionTrigger.UP, OnOpenInputRelease);
651 GetGame().GetInputManager().RemoveActionListener(m_ControllerInputs.m_sToggleActionAlternative, EActionTrigger.DOWN, OnAlternativeToggleInput);
652 GetGame().GetInputManager().RemoveActionListener(m_Inputs.m_sPerformAction, EActionTrigger.DOWN, OnPerformInput);
653 GetGame().GetInputManager().RemoveActionListener(m_Inputs.m_sBackAction, EActionTrigger.DOWN, OnBackInput);
654 }
655
656 //------------------------------------------------------------------------------------------------
658 protected void OnOpenInputRelease(float value, EActionTrigger reason)
659 {
661 return;
662
663 Close();
664 }
665
666 //------------------------------------------------------------------------------------------------
668 protected void OnPerformInput()
669 {
670 if (m_SelectedEntry)
672 }
673
674 //------------------------------------------------------------------------------------------------
675 protected void OnBackInput()
676 {
677 // Prevent entry performing
678 m_SelectedEntry = null;
679
680 // Should close on top level
681 if (CurrentCategory())
682 {
684 }
685 else
686 {
687 // Close on top level
688 Close();
689 }
690 }
691
692 //------------------------------------------------------------------------------------------------
694 {
696 }
697
698 //------------------------------------------------------------------------------------------------
699 // API
700 //------------------------------------------------------------------------------------------------
701
702 //------------------------------------------------------------------------------------------------
703 bool IsOpened()
704 {
705 return m_bOpened;
706 }
707
708 //------------------------------------------------------------------------------------------------
711 {
712 if (controls)
713 controls.m_Owner = owner;
714
715 if (m_ControllerInputs != controls)
717
718 m_ControllerInputs = controls;
719 }
720
721 //------------------------------------------------------------------------------------------------
726
727 //------------------------------------------------------------------------------------------------
732
733 //------------------------------------------------------------------------------------------------
735 {
736 return m_iSelectedEntryId;
737 }
738
739 //------------------------------------------------------------------------------------------------
741 {
742 return m_bEntryPerformed;
743 }
744
745 //------------------------------------------------------------------------------------------------
746 array<ref SCR_SelectionMenuEntry> GetEntries()
747 {
748 array<ref SCR_SelectionMenuEntry> entries = {};
749
750 for (int i = 0, count = m_aEntries.Count(); i < count; i++)
751 {
752 entries.Insert(m_aEntries[i]);
753 }
754
755 return entries;
756 }
757
758 //------------------------------------------------------------------------------------------------
760 {
761 if (!m_aEntries)
762 return 0;
763
764 return m_aEntries.Count();
765 }
766
767 //------------------------------------------------------------------------------------------------
769 {
770 return m_Display != null;
771 }
772
773 //------------------------------------------------------------------------------------------------
774 // Debug
775 //------------------------------------------------------------------------------------------------
776
777 //------------------------------------------------------------------------------------------------
778 protected void DebugPrint(string method, string msg)
779 {
780 Print(string.Format("[SCR_SelectionMenu] - %1() - '%2'", method, msg), LogLevel.DEBUG);
781 }
782};
783
784//------------------------------------------------------------------------------------------------
788[BaseContainerProps(configRoot: true)]
790{
791 [Attribute("", desc: "Input context used for menu controls")]
792 string m_sContext;
793
794 [Attribute("", desc: "Action used for closing menu or moving back between the layers")]
795 string m_sBackAction;
796
797 [Attribute("", desc: "Input action used for performing selected entry")]
798 string m_sPerformAction;
799
800 //------------------------------------------------------------------------------------------------
802 void Init() {}
803};
804
805//------------------------------------------------------------------------------------------------
811[BaseContainerProps(configRoot: true)]
813{
814 IEntity m_Owner;
815
816 [Attribute("", desc: "Input context used for extra menu controls from controller entity")]
817 string m_sControllerContext;
818
819 [Attribute("", desc: "Action for opening (and closing) radial menu")]
820 string m_sOpenAction;
821
822 [Attribute("", desc: "Alternative action for always toggling menu")]
823 string m_sToggleActionAlternative;
824
825 [Attribute("1", desc: "If this field is checked - Menu is closed if open input is released. Otherwise separate close input has to be used")]
826 bool m_bCloseOnReleaseOpen;
827
828 [Attribute("1", desc: "If this field is checked - Perform entry(call entry action) when closing menu and having selected entry")]
829 bool m_bPerformOnClose;
830
831 [Attribute("0", desc: "If this field is checked - Close the menu after performing the entry (selecting enabled entry)")]
832 bool m_bCloseOnPerform;
833
834 [Attribute("1", desc: "Checked - on opening menu is always filled with root entries. Otherwise menu will stay in last category.")]
835 bool m_bOpenInRoot;
836
837 [Attribute("0", desc: "If checked, menu won't open if there are no entries in the menu")]
838 bool m_bPreventEmptyMenuOpen;
839
840 [Attribute("1", UIWidgets.Slider, desc: "Unchecked will prevent opening of radial menu while character is unconcious.")]
841 bool m_bShowWhileUnconcious;
842
843 //------------------------------------------------------------------------------------------------
844 void SCR_SelectionMenuOpening(string openAction = "")
845 {
846 if (!openAction.IsEmpty())
847 m_sOpenAction = openAction;
848 }
849
850 //------------------------------------------------------------------------------------------------
852 bool IsControllingMenu(IEntity controller)
853 {
854 return controller == m_Owner;
855 }
856};
857
858//------------------------------------------------------------------------------------------------
862[BaseContainerProps(configRoot: true)]
864{
865 [Attribute()]
866 protected ref array<ref SCR_SelectionMenuEntry> m_aEntries;
867
868 //------------------------------------------------------------------------------------------------
869 array<ref SCR_SelectionMenuEntry> GetEntries()
870 {
871 array<ref SCR_SelectionMenuEntry> entries = {};
872
873 for (int i = 0, count = m_aEntries.Count(); i < count; i++)
874 {
875 entries.Insert(m_aEntries[i]);
876 }
877
878 return entries;
879 }
880};
881
882//------------------------------------------------------------------------------------------------
886{
887 [Attribute("10")]
888 float m_fCustomFov;
889
890 [Attribute("-1", desc: "Adjust how final render preview size should be big by current icon size multiplicaiton")]
891 float m_fIconSizeXMultiplier;
892
893 [Attribute(desc: "If true colorize item shadow in Radial Menu to medical color")]
894 bool m_bShowMedicalColor;
895};
896
override void Init()
ArmaReforgerScripted GetGame()
Definition game.c:1398
SCR_AIAnimation_Loitering BaseContainerProps
Commanding menu commanding element class.
override void OnUpdate()
UI Textures DeployMenu Briefing conflict_HintBanner_1_UI desc
SCR_ESelectionMenuFailReason
Enum of reason why the menu did not open.
@ MENU_EMPTY
@ MENU_ALREADY_OPEN
array< ref SCR_SelectionMenuEntry > GetEntries()
ref array< ref SCR_SelectionMenuEntry > m_aEntries
ref ScriptInvoker< SCR_SelectionMenu, SCR_SelectionMenuControllerInputs > m_OnControllerChanged
ref ScriptInvoker< SCR_SelectionMenu, SCR_SelectionMenuEntry > m_OnRemoveEntry
ref ScriptInvoker< SCR_SelectionMenu > m_OnOpen
void AllowClosing()
Allow closing after some time in order to have alternative toggle action with double press.
void InvokeOnUpdateEntries(array< ref SCR_SelectionMenuEntry > entries)
void DebugPrint(string method, string msg)
ScriptInvoker GetOnSelect()
ScriptInvoker GetOnClose()
SCR_SelectionMenuEntry m_SelectedEntry
ScriptInvoker GetOnControllerChanged()
void OnPerformInput()
On select input handle entry selection and moving into layers.
ref ScriptInvoker< SCR_SelectionMenu, SCR_SelectionMenuEntry > m_OnPerform
ScriptInvoker GetOnRemoveEntry()
void SetController(IEntity owner, SCR_SelectionMenuControllerInputs controls)
Set controller entity and controls.
ref ScriptInvoker< SCR_SelectionMenu > m_OnClose
ref array< ref SCR_SelectionMenuEntry > m_aRootEntries
void OnOpen()
Empty method called on open ready for override.
void AddActionListeners()
Add all action listeners for basic menu control.
ref ScriptInvoker< SCR_SelectionMenu, SelectionMenuFailReason > m_OnOpenFailed
void UpdateEntries()
Invoke data update for all entries.
ScriptInvoker GetOnOpenFailed()
ScriptInvoker GetOnOpen()
ref array< ref SCR_SelectionMenuEntry > m_aEntries
void OpenInRoot()
Clear open categories and use entries from root.
ref ScriptInvoker< SCR_SelectionMenu, SCR_SelectionMenuEntry > m_OnAddEntry
ref SCR_SelectionMenuInputs m_Inputs
ref SCR_SelectionMenuControllerInputs m_ControllerInputs
ref ScriptInvoker< SCR_SelectionMenu, array< ref SCR_SelectionMenuEntry > > m_OnUpdateEntries
ref array< SCR_SelectionMenuCategoryEntry > m_aSelectedCategories
void AddEntry(SCR_SelectionMenuEntry entry=null)
ScriptInvoker GetOnAddEntry()
ref ScriptInvoker< SCR_SelectionMenu > m_OnBeforeOpen
void RemoveActionListeners()
Remove all action listeners for basic menu control.
void ClearEntries()
Clear all entries and invoke data update.
void InvokeOnControllerChanged(SCR_SelectionMenuControllerInputs inputs)
void InvokeOnSelect(SCR_SelectionMenuEntry entry, int id)
SCR_SelectionMenuDisplay m_Display
ScriptInvoker GetOnOpenCategory()
SCR_SelectionMenuControllerInputs GetControllerInputs()
ref ScriptInvoker< SCR_SelectionMenu, SCR_SelectionMenuEntry, int > m_OnSelect
ScriptInvoker GetOnUpdateEntries()
ref ScriptInvoker< SCR_SelectionMenu, SCR_SelectionMenuCategoryEntry, int > m_OnOpenCategory
void Update(float timeSlice)
void PlaySound(string sound)
ScriptInvoker GetOnBeforeOpen()
void OpenCategoryEntry(notnull SCR_SelectionMenuCategoryEntry category)
Specific peform action for category to change menu content.
void InvokeOnRemoveEntry(SCR_SelectionMenuEntry entry)
void AddEntries(notnull array< ref SCR_SelectionMenuEntry > entries, bool replace=false)
ScriptInvoker GetOnPerform()
void OnOpenInputRelease(float value, EActionTrigger reason)
On open input handle menu closing.
void OnUpdate(float timeSlice)
Empty method called on update ready for override.
SCR_SelectionMenuEntry GetSelectionEntry()
SCR_SelectionMenuCategoryEntry CurrentCategory()
void InvokeOnOpenCategory(SCR_SelectionMenuCategoryEntry entry, int level)
void Close()
Callback when close is requested.
void SelectEntry()
Generic method for custom entry selection based on used interface.
void OnClose()
Empty method called on close ready for override.
void InvokeOnAddEntry(SCR_SelectionMenuEntry entry)
void PerformEntry(notnull SCR_SelectionMenuEntry entry)
void UpdateSelectedEntries(notnull array< ref SCR_SelectionMenuEntry > entries)
Invoke data update for selected entries.
void SetMenuDisplay(SCR_SelectionMenuDisplay display=null)
Find and setup display used for menu.
array< ref SCR_SelectionMenuEntry > GetEntries()
void AddCategoryEntry(SCR_SelectionMenuCategoryEntry category=null)
Add empty or custom category entry.
void RemoveEntry(notnull SCR_SelectionMenuEntry entry)
Remove selected entry and invoke data update.
void InvokeOnPerform(SCR_SelectionMenuEntry entry)
proto void Print(void var, LogLevel level=LogLevel.NORMAL)
Prints content of variable to console/log.
LogLevel
Enum with severity of the logging message.
Definition LogLevel.c:14
SCR_FieldOfViewSettings Attribute
EActionTrigger
@ UNKNOWN
Definition EPlatform.c:24
ScriptInvokerBase< func > ScriptInvoker
Definition tools.c:134