Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_TransformingEditorUIComponent.c
Go to the documentation of this file.
1
2
3class SCR_TransformingEditorUIComponent : SCR_PreviewEntityEditorUIComponent
4{
9 //protected SCR_HoverEditableEntityFilter m_HoverFilter;
17 protected bool m_bClicked;
18
19 //------------------------------------------------------------------------------------------------
20 override void OnHoverChange(EEditableEntityState state, set<SCR_EditableEntityComponent> entitiesInsert, set<SCR_EditableEntityComponent> entitiesRemove)
21 {
22 if (m_StatesManager && m_StatesManager.GetState() == EEditorState.TRANSFORMING)
23 super.OnHoverChange(state, entitiesInsert, entitiesRemove);
24 }
25
26 //------------------------------------------------------------------------------------------------
28 {
29 if (m_StatesManager && m_StatesManager.GetState() == EEditorState.TRANSFORMING)
30 super.OnEditorTransformRotationModifierUp(value, reason);
31 }
32
33 //------------------------------------------------------------------------------------------------
35 {
36 if (m_TransformingManager.IsEditing())
38 else
40 }
41
42 //------------------------------------------------------------------------------------------------
43 protected void OnEditorTransformDown(float value, EActionTrigger reason)
44 {
46 return;
47
48 //--- Can't rotate from the entity toolbar
49 if (m_EntityToolbar && m_EntityToolbar.IsUnderCursor() && m_InputManager.GetActionTriggered("EditorTransformRotateYawModifier"))
50 return;
51
52 //--- Ignore when not hovering over an entity
53 bool isDelegate;
54 SCR_EditableEntityComponent hoverEntity = m_HoverFilter.GetEntityUnderCursor(isDelegate);
55 if (!hoverEntity)
56 return;
57
58 m_HoverEntity = hoverEntity;
59 m_HoverEntity.GetOwner().GetWorldTransform(m_vClickTransform);
60
61 //--- Hovered entity not selected - replace the selection
63 m_ActiveHoverEntity = m_LayersManager.GetParentBelowCurrentLayer(m_HoverEntity);
64 else
66
67 vector worldPos;
68 if (isDelegate)
69 {
70 //--- Clicked on icon - use entity's position as a pivot
71 if (!m_HoverEntity.GetPos(worldPos))
72 return;
73 }
74 else
75 {
76 //--- Use cursor world position as a pivot
77 if (!m_CursorComponent.GetCursorWorldPos(worldPos))
78 return;
79 }
80
81 m_vClickTransform[3] = worldPos;
82 m_bClicked = true;
83
84 if (m_InputManager.IsUsingMouseAndKeyboard())
85 SetClickPos(m_CursorComponent.GetCursorPos()); //--- Don't start editing just yet, do so only after cursor moves a bit
86 else
88 }
89
90 //------------------------------------------------------------------------------------------------
92 {
93 if (OnCancelUp())
95 }
96
97 //------------------------------------------------------------------------------------------------
98 protected void StartEditing()
99 {
100 if (m_StatesManager && !m_StatesManager.CanSet(EEditorState.TRANSFORMING) || m_StatesManager.GetState() == EEditorState.TRANSFORMING)
101 return;
102
103 //--- Transforming unselected entity - replace the selection upon click
106
107 //--- Get selected entities
108 set<SCR_EditableEntityComponent> entities = new set<SCR_EditableEntityComponent>();
109 m_SelectedFilter.GetEntities(entities);
110
111 //--- Start editing process
113
114 m_TransformingManager.GetOnCleanStart().Insert(OnTransformCleanStart);
115 }
116
117 //------------------------------------------------------------------------------------------------
118 protected void ConfirmEditing()
119 {
120 if (!m_TransformingManager.IsEditing() && !m_bClicked)
121 return;
122
123 //--- Cannot move attachable entity when target is not set
124 if (!m_PreviewEntityManager.CanMoveInRoot() && !m_PreviewEntityManager.GetTarget())
125 {
126 if (m_InputManager.IsUsingMouseAndKeyboard())
128
129 return;
130 }
131
132 Clean();
133
134 if (!m_StatesManager || m_StatesManager.GetState() != EEditorState.TRANSFORMING)
135 return;
136
137 if (!m_TransformingManager.ConfirmEditing())
138 {
139 if (m_InputManager.IsUsingMouseAndKeyboard()) //--- ToDo: Audio feedback
140 m_TransformingManager.CancelEditing();
141 }
142 }
143
144 //------------------------------------------------------------------------------------------------
145 protected void CancelEditing()
146 {
147 if (!m_bClicked && !m_TransformingManager.IsEditing())
148 return;
149
151 m_TransformingManager.CancelEditing();
152
153 Clean();
154 }
155
156 //------------------------------------------------------------------------------------------------
157 protected void OnTransformCleanStart()
158 {
160 }
161
162 //------------------------------------------------------------------------------------------------
163 protected void Clean()
164 {
165 m_bClicked = false;
166 m_InputManager.ResetAction("EditorTransform");
167 m_HoverEntity = null;
168 m_ActiveHoverEntity = null;
169
170 m_TransformingManager.GetOnCleanStart().Remove(OnTransformCleanStart);
171 }
172
173 //------------------------------------------------------------------------------------------------
174 protected void OnTransformationEnd()
175 {
176 Clean();
177 }
178
179 //------------------------------------------------------------------------------------------------
180 protected void OnInputDeviceIsGamepad(bool isGamepad)
181 {
183 }
184
186 //--- Update
188
189 //------------------------------------------------------------------------------------------------
190 protected void OnMenuUpdate(float tDelta)
191 {
193
195 return;
196
198 return;
199
200 m_InputManager.ActivateContext("EditorTransformingContext");
201
202 //--- Allow interaction only when cursor moves far enough from clicked position
203 if (m_InputManager.IsUsingMouseAndKeyboard())
204 {
205 if (m_bClicked && HasMouseMoved())
206 StartEditing();
207 else
208 return;
209 }
210
211 //--- Exit when not transforming
212 if (m_StatesManager.GetState() != EEditorState.TRANSFORMING)
213 return;
214
215 ProcessInput(tDelta);
216 }
217
219 //--- Default methods
221
222 //------------------------------------------------------------------------------------------------
224 {
225 super.HandlerAttachedScripted(w);
226
227 MenuRootComponent root = GetRootComponent();
228 if (root)
230
232 return;
233
236 return;
237
238 m_TransformingManager.GetOnTransformationConfirm().Insert(OnTransformationEnd);
239 m_TransformingManager.GetOnTransformationCancel().Insert(OnTransformationEnd);
240
242 if (!m_StatesManager)
243 return;
244
246 if (entitiesManager)
247 {
248 //m_HoverFilter = SCR_HoverEditableEntityFilter.Cast(entitiesManager.GetFilter(EEditableEntityState.HOVER));
249 m_SelectedFilter = entitiesManager.GetFilter(EEditableEntityState.SELECTED);
250 m_FocusedFilter = entitiesManager.GetFilter(EEditableEntityState.FOCUSED);
251 }
252
254
256
257 MenuRootBase menu = GetMenu();
258 if (menu)
259 {
260 menu.GetOnMenuUpdate().Insert(OnMenuUpdate);
261 menu.GetOnMenuFocusGained().Insert(Clean); //--- Reset dragging if a dialog was opened and closed during that
262 }
263
264 ArmaReforgerScripted game = GetGame();
265 if (game)
266 {
267 m_InputManager = game.GetInputManager();
268 if (m_InputManager)
269 {
270 m_InputManager.ResetAction("EditorTransform");
271 m_InputManager.AddActionListener("EditorTransform", EActionTrigger.DOWN, OnEditorTransformDown);
272 m_InputManager.AddActionListener("EditorTransform", EActionTrigger.UP, ConfirmEditing);
273
274 m_InputManager.AddActionListener("EditorTransformToggle", EActionTrigger.DOWN, OnEditorTransformToggleDown);
275
276 //m_InputManager.AddActionListener("EditorTransformRotationModifier", EActionTrigger.DOWN, OnEditorTransformRotationModifierDown);
277
278 m_InputManager.AddActionListener("EditorConfirmTransforming", EActionTrigger.DOWN, ConfirmEditing);
279 m_InputManager.AddActionListener("EditorCancelTransforming", EActionTrigger.DOWN, OnCancelDown);
280 m_InputManager.AddActionListener("EditorCancelTransforming", EActionTrigger.UP, OnEditorCancelTransformingUp);
281 }
282
283 game.OnInputDeviceIsGamepadInvoker().Insert(OnInputDeviceIsGamepad);
284 }
285
287 }
288
289 //------------------------------------------------------------------------------------------------
292 {
294 }
295
296 //------------------------------------------------------------------------------------------------
297 override void HandlerDeattached(Widget w)
298 {
299 super.HandlerDeattached(w);
300
302 {
303 m_TransformingManager.GetOnTransformationConfirm().Remove(OnTransformationEnd);
304 m_TransformingManager.GetOnTransformationCancel().Remove(OnTransformationEnd);
305 }
306
307 MenuRootBase menu = GetMenu();
308 if (menu)
309 {
310 menu.GetOnMenuUpdate().Remove(OnMenuUpdate);
311 menu.GetOnMenuFocusGained().Remove(Clean);
312 }
313
314 ArmaReforgerScripted game = GetGame();
315 if (game)
316 {
317 if (m_InputManager)
318 {
319 m_InputManager.RemoveActionListener("EditorTransform", EActionTrigger.DOWN, OnEditorTransformDown);
320 m_InputManager.RemoveActionListener("EditorTransform", EActionTrigger.UP, ConfirmEditing);
321
322 m_InputManager.RemoveActionListener("EditorTransformToggle", EActionTrigger.DOWN, OnEditorTransformToggleDown);
323
324 //m_InputManager.RemoveActionListener("EditorTransformRotationModifier", EActionTrigger.DOWN, OnEditorTransformRotationModifierDown);
325
326 m_InputManager.RemoveActionListener("EditorConfirmTransforming", EActionTrigger.DOWN, ConfirmEditing);
327 m_InputManager.RemoveActionListener("EditorCancelTransforming", EActionTrigger.DOWN, OnCancelDown);
328 m_InputManager.RemoveActionListener("EditorCancelTransforming", EActionTrigger.UP, OnEditorCancelTransformingUp);
329 }
330
331 game.OnInputDeviceIsGamepadInvoker().Remove(OnInputDeviceIsGamepad);
332 }
333
335 }
336
337 //------------------------------------------------------------------------------------------------
340 {
341 if (m_TransformingManager.CanBeTransformed())
342 return SCR_EPreviewState.PLACEABLE;
343 else
344 return SCR_EPreviewState.BLOCKED;
345 }
346}
ref DSGameConfig game
Definition DSConfig.c:81
ArmaReforgerScripted GetGame()
Definition game.c:1398
SCR_PreviewEntityEditorComponent m_PreviewEntityManager
void SetClickPos(vector clickPos)
void ProcessInput(float tDelta)
SCR_HoverEditableEntityFilter m_HoverFilter
SCR_RadialMenu GetMenu()
Input management system for user interactions.
ScriptInvoker GetOnMenuFocusGained()
ScriptInvoker GetOnMenuUpdate()
MenuRootSubComponent FindComponent(typename type, bool showError=false)
SCR_BaseEditableEntityFilter GetFilter(EEditableEntityState state, bool showError=false)
bool IsOpen()
Check if the map is opened.
static ScriptInvokerBase< MapConfigurationInvoker > GetOnMapOpen()
Get on map open invoker.
static SCR_MapEntity GetMapInstance()
Get map entity instance.
void OnEditorCancelTransformingUp(float value, EActionTrigger reason)
SCR_EntitiesToolbarEditorUIComponent m_EntityToolbar
override void OnEditorTransformRotationModifierUp(float value, EActionTrigger reason)
SCR_EPreviewState GetPreviewStateToShow()
If the composition can't be transformed to a new position, turn the colour of the preview to red.
void OnEditorTransformToggleDown(float value, EActionTrigger reason)
SCR_TransformingEditorComponent m_TransformingManager
override void OnHoverChange(EEditableEntityState state, set< SCR_EditableEntityComponent > entitiesInsert, set< SCR_EditableEntityComponent > entitiesRemove)
void OnEditorTransformDown(float value, EActionTrigger reason)
EEditableEntityState
EEditorState
Unique editor state.
Definition EEditorState.c:6
EActionTrigger