Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_RadialMenuController.c
Go to the documentation of this file.
1
5
8typedef ScriptInvokerBase<ScriptInvoker_RadialMenuEventMethod> ScriptInvoker_RadialMenuEvent;
9
12typedef ScriptInvokerBase<ScriptInvoker_ControlledRadialMenuEventMethod> ScriptInvoker_ControlledRadialMenuEvent;
13//------------------------------------------------------------------------------------------------
14[BaseContainerProps(configRoot: true)]
16{
17 [Attribute("1")]
18 protected bool m_sEnableControl;
19
20 [Attribute()]
22
23 [Attribute()]
25
26 protected ref SCR_RadialMenu m_RadialMenuToControl; // Menu that is kept for auto retaking control, can be chenged by user
28 protected IEntity m_Owner;
29
30 // Callbacks
31 //protected ref ScriptInvoker<SCR_RadialMenuController> m_OnBeforeOpen;
35
36 //------------------------------------------------------------------------------------------------
44
45 //------------------------------------------------------------------------------------------------
46 protected void InvokeOnInputOpen(bool hasControl)
47 {
48 if (m_OnInputOpen)
49 m_OnInputOpen.Invoke(this, hasControl);
50 }
51
52 //------------------------------------------------------------------------------------------------
60
61 //------------------------------------------------------------------------------------------------
62 protected void InvokeOnTakeControl()
63 {
65 m_OnTakeControl.Invoke(this);
66 }
67
68 //------------------------------------------------------------------------------------------------
69 protected void InvokeOnControllerChanged(bool hasControl)
70 {
72 m_OnControllerChanged.Invoke(this, hasControl);
73 }
74
75 //------------------------------------------------------------------------------------------------
83
84 //------------------------------------------------------------------------------------------------
87 void Control(IEntity owner, SCR_RadialMenu radialMenu = null)
88 {
89 // Clear previous inputs
90 if (radialMenu)
91 radialMenu.GetOnControllerChanged().Remove(OnMenuControllerChanged);
92
93 m_Owner = owner;
94
95 // Setup radial menu
96 if (radialMenu == null)
97 radialMenu = SCR_RadialMenu.GlobalRadialMenu();
98
99 m_RadialMenu = radialMenu;
100 if (!m_RadialMenu)
101 return;
102
103 m_RadialMenu.SetController(m_Owner, m_RMControls);
104
105 if (m_RadialMenu)
106 m_RadialMenu.GetOnControllerChanged().Insert(OnMenuControllerChanged);
107
109 }
110
111 //------------------------------------------------------------------------------------------------
113 void StopControl(bool closeMenu = false)
114 {
115 if (m_RadialMenu)
116 {
117 m_RadialMenu.GetOnControllerChanged().Remove(OnMenuControllerChanged);
118
119 if (closeMenu)
120 m_RadialMenu.Close();
121
122 m_RadialMenu = null;
123 }
124 }
125
126 //------------------------------------------------------------------------------------------------
129 {
130
131 }
132
133 //------------------------------------------------------------------------------------------------
135 {
136 if (m_RadialMenu)
137 m_RadialMenu.AddEntries(m_Data.GetEntries(), true);
138 }
139
140 //------------------------------------------------------------------------------------------------
141 // Callbacks
142 //------------------------------------------------------------------------------------------------
143
144 //------------------------------------------------------------------------------------------------
146 {
147 bool hasControl = HasControl(); // get state for potentially old controller
148 InvokeOnInputOpen(hasControl);
149
150 if (!m_sEnableControl)
151 return;
152
153 if (!HasControl()) // get the most up to date state
155
156 // Check owner character concious state
157 if (!m_RMControls.m_bShowWhileUnconcious)
158 {
160 if (controllerEntity)
161 {
162 CharacterControllerComponent characterControler = CharacterControllerComponent.Cast(controllerEntity.FindComponent(CharacterControllerComponent));
163 if (characterControler && characterControler.IsUnconscious())
164 return;
165 }
166 }
167
168 // Setup and open menu
169 if (!m_RadialMenu)
170 return;
171
172 if (!m_RadialMenu.HasDisplay())
173 m_RadialMenu.SetMenuDisplay();
174
175 m_RadialMenu.Open();
176 }
177
178 //------------------------------------------------------------------------------------------------
180 {
181 // Check menu
182 if (menu != m_RadialMenu)
183 return;
184
185 // Check control
186 if (controller != m_RMControls)
187 {
188 menu.ClearEntries();
189
190 m_RadialMenu.Close();
192
193 StopControl();
194 }
195 }
196
197 //------------------------------------------------------------------------------------------------
198 // Get
199 //------------------------------------------------------------------------------------------------
200
201 //------------------------------------------------------------------------------------------------
202 void SetEnableControl(bool enable)
203 {
204 m_sEnableControl = enable;
205 }
206
207 //------------------------------------------------------------------------------------------------
209 {
210 return m_sEnableControl;
211 }
212
213 //------------------------------------------------------------------------------------------------
215 {
216 m_RadialMenuToControl = radialMenu;
217 }
218
219 //------------------------------------------------------------------------------------------------
221 {
222 return m_RadialMenu;
223 }
224
225 //------------------------------------------------------------------------------------------------
230
231 //------------------------------------------------------------------------------------------------
233 {
234 return m_Data;
235 }
236
237 //------------------------------------------------------------------------------------------------
239 {
240 return m_RadialMenu && m_RadialMenu.IsOpened();
241 }
242
243 //------------------------------------------------------------------------------------------------
245 {
246 if (m_RadialMenu)
247 m_RadialMenu.Close();
248 }
249
250 //------------------------------------------------------------------------------------------------
253 {
254 if (!m_RadialMenu)
255 return false;
256
257 if (!m_RadialMenu.GetControllerInputs())
258 return false;
259
260 return m_RadialMenu.GetControllerInputs() == m_RMControls;
261 }
262
263 //------------------------------------------------------------------------------------------------
265 {
266 if (m_RMControls && !m_RMControls.m_sOpenAction.IsEmpty())
267 GetGame().GetInputManager().AddActionListener(m_RMControls.m_sOpenAction, EActionTrigger.DOWN, OnInputOpen);
268 }
269}
ArmaReforgerScripted GetGame()
Definition game.c:1398
SCR_AIAnimation_Loitering BaseContainerProps
Commanding menu commanding element class.
ScriptInvokerBase< ScriptInvoker_RadialMenuEventMethod > ScriptInvoker_RadialMenuEvent
func ScriptInvoker_ControlledRadialMenuEventMethod
ScriptInvokerBase< ScriptInvoker_ControlledRadialMenuEventMethod > ScriptInvoker_ControlledRadialMenuEvent
func ScriptInvoker_RadialMenuEventMethod
proto external Managed FindComponent(typename typeName)
static IEntity GetLocalControlledEntity()
void SetRadialMenuToControl(SCR_RadialMenu radialMenu)
void StopControl(bool closeMenu=false)
Stop opening controls of current menu.
ref ScriptInvoker_RadialMenuEvent m_OnTakeControl
ref SCR_SelectionMenuControllerInputs m_RMControls
bool HasControl()
Return true if cached menu is controlled by this owner entity.
ref ScriptInvoker_ControlledRadialMenuEvent m_OnControllerChanged
ScriptInvoker_ControlledRadialMenuEvent GetOnInputOpen()
ScriptInvoker_ControlledRadialMenuEvent GetOnControllerChanged()
void InvokeOnInputOpen(bool hasControl)
void OnMenuControllerChanged(SCR_SelectionMenu menu, SCR_SelectionMenuControllerInputs controller)
ScriptInvoker_RadialMenuEvent GetOnTakeControl()
void InvokeOnControllerChanged(bool hasControl)
SCR_SelectionMenuControllerInputs GetControls()
void Control(IEntity owner, SCR_RadialMenu radialMenu=null)
ref ScriptInvoker_ControlledRadialMenuEvent m_OnInputOpen
SCR_SelectionMenuData GetData()
ref SCR_RadialMenu m_RadialMenuToControl
ref SCR_SelectionMenuData m_Data
static SCR_RadialMenu GlobalRadialMenu()
Find and get reference to global redial menu.
void ClearEntries()
Clear all entries and invoke data update.
SCR_FieldOfViewSettings Attribute
EActionTrigger