Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_LayerAutoEnterUIComponent.c
Go to the documentation of this file.
2{
3 [Attribute(defvalue: "1", desc: "How long it takes to toggle hovered entity automatically during entity transformation.")]
4 protected float m_fAutoEnterDuration;
5
6 [Attribute(defvalue: "0.2", uiwidget: UIWidgets.Slider, "", params: "0 1 0.01")]
7 protected float m_fAutoEnterDelay;
8
15 protected float m_fAutoEnterCharge = -1;
16 protected bool m_bCanCharge = true;
17
18 //------------------------------------------------------------------------------------------------
20 {
21 //--- Not editing anymore or the target was deleted, cancel charge
22 if (!target || !m_PreviewEntityManager.IsEditing())
23 {
24 Clear();
25 return;
26 }
27
28 if (!m_bCanCharge)
29 return;
30
31 //--- Enter the layer only when hovering over its icon (i.e., delegate)
32 bool isDelegate;
33 SCR_EditableEntityComponent hoverEntity = m_HoverFilter.GetEntityUnderCursor(isDelegate);
34 if (!isDelegate)
35 return;
36
37 //--- Filter out incompatible entities
38 if (hoverEntity)
39 {
40 hoverEntity = m_LayersManager.GetParentBelowCurrentLayer(hoverEntity);
41 if (!hoverEntity)
42 return;
43
44 //--- Cannot enter non-interactive entities or compatible slots (hovering snaps to them instead)
45 if (!hoverEntity.HasEntityFlag(EEditableEntityFlag.LAYER) || m_PreviewEntityManager.GetTargetInteraction() != EEditableEntityInteraction.LAYER)
46 return;
47
48 //--- Cannot enter into itself
49 if (m_TransformingManager && m_TransformingManager.IsEditing(hoverEntity))
50 return;
51 }
52
53 //--- Start charging
54 if (hoverEntity != m_AutoEnterTarget)
55 {
56 m_AutoEnterTarget = hoverEntity;
58 }
59 }
60
61 //------------------------------------------------------------------------------------------------
62 protected void Clear()
63 {
65 m_AutoEnterTarget = null;
66 GetWidget().SetVisible(false);
67 }
68
69 //------------------------------------------------------------------------------------------------
70 protected void ResetGracePeriod()
71 {
72 m_bCanCharge = true;
73 }
74
75 //---- REFACTOR NOTE START: Using call later as input delay and also using hardcoded value there
76
77 //------------------------------------------------------------------------------------------------
78 protected void OnMenuUpdate(float tDelta)
79 {
80 //--- Enter hovered entity automatically while editing
81 if (m_fAutoEnterCharge >= 0)
82 {
83 //--- Chaaaaarge!
84 m_fAutoEnterCharge += tDelta;
85
87 return;
88
89 GetWidget().SetVisible(true);
90
91 //--- Update progress bar
94
95 //--- Position the widget on the enetered layer
96 vector worldPos;
97 if (m_AutoEnterTarget.GetPos(worldPos))
98 {
99 vector screenPos = GetGame().GetWorkspace().ProjWorldToScreen(worldPos, m_AutoEnterTarget.GetOwner().GetWorld());
100 FrameSlot.SetPos(GetWidget(), screenPos[0], screenPos[1]);
101 }
102
103 //--- Charge complete
105 {
106 m_LayersManager.ToggleCurrentLayer(m_AutoEnterTarget);
107 Clear();
108
109 //--- Disable charging right after entering a layer, so it won't instantly start charging sub-layer if there is another icon under cursor
110 m_bCanCharge = false;
111 GetGame().GetCallqueue().CallLater(ResetGracePeriod, 100);
112 }
113 }
114 }
115
116 //---- REFACTOR NOTE END ----
117
118 //------------------------------------------------------------------------------------------------
119 override protected bool IsUnique()
120 {
121 return false;
122 }
123
124 //------------------------------------------------------------------------------------------------
143
144 //------------------------------------------------------------------------------------------------
145 override void HandlerDeattached(Widget w)
146 {
147 super.HandlerDeattached(w);
148
150 m_PreviewEntityManager.GetOnTargetChange().Remove(OnTargetChange);
151
152 MenuRootBase menu = GetMenu();
153 if (menu)
154 menu.GetOnMenuUpdate().Remove(OnMenuUpdate);
155 }
156}
ArmaReforgerScripted GetGame()
Definition game.c:1398
SCR_RadialMenu GetMenu()
UI Textures DeployMenu Briefing conflict_HintBanner_1_UI desc
Widget GetWidget()
Definition Math.c:13
ScriptInvoker GetOnMenuUpdate()
bool HasEntityFlag(EEditableEntityFlag flag)
SCR_PreviewEntityEditorComponent m_PreviewEntityManager
SCR_EditableEntityComponent m_AutoEnterTarget
SCR_RadialProgressBarUIComponent m_RadialProgressUI
void OnTargetChange(SCR_EditableEntityComponent target)
SCR_TransformingEditorComponent m_TransformingManager
SCR_HoverEditableEntityFilter m_HoverFilter
EEditableEntityFlag
Unique flags of the entity.
EEditableEntityState
SCR_FieldOfViewSettings Attribute
EEditableEntityInteraction
Type of suggested interaction when hovering edited entity on top of another entity.