Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_MapRulerUI.c
Go to the documentation of this file.
2{
3 [Attribute(defvalue: "1994", uiwidget: UIWidgets.EditBox, desc: "pix, exact length of the ruler within the provided image, default base length being 1km in world space")]
4 float m_fRulerLength;
5
6 [Attribute("RulerFrame", UIWidgets.EditBox, desc: "Root frame widget name")]
7 string m_sRootWidgetName;
8
9 [Attribute("RulerImage", UIWidgets.EditBox, desc: "Ruler image widget name")]
10 string m_sImageWidgetName;
11
12 [Attribute("ruler", UIWidgets.EditBox, desc: "Toolmenu imageset quad name")]
13 string m_sToolMenuIconName;
14
15 [Attribute("", UIWidgets.Object, desc: "Array of sizes, multiplicator values of default base ruler length of 1km")]
16 protected ref array<int> m_aSizesArray;
17
18 protected bool m_bIsVisible;
19 protected bool m_bWantedVisible;
20 protected bool m_bIsDragged;
21 protected bool m_bIsZooming;
22 protected int m_iCurrentSizeIndex; // current id of m_SizesArray
23 protected int m_iSizesCount; // count of m_SizesArray
24 protected float m_fPosX, m_fPosY; // widget position in scaled screen coords
25 protected float m_fWorldX, m_fWorldY; // widget world pos
26 protected float m_fAngle; // cached angle for map reopen
27 protected float m_fBaseImageSize[2]; // for calculation of ruler scaling
28 protected float m_fSizeCoef; // ruler size coefficient based on image size and ruler length
29 protected vector m_vMapPan;
31
32 // Widgets
33 protected Widget m_wFrame;
36
37 //------------------------------------------------------------------------------------------------
39 protected void ToggleVisible()
40 {
41 if (!m_bIsVisible)
42 SetVisible(true);
43 else
44 SetVisible(false);
45 }
46
47 //------------------------------------------------------------------------------------------------
51 protected void SetVisible(bool visible, bool saveState = false)
52 {
53 m_bIsVisible = visible;
54 m_wFrame.SetEnabled(visible);
55 m_wFrame.SetVisible(visible);
56
57 if (visible)
58 {
59 if (!m_wImage)
60 return;
61
63 if (!player || !player.GetCharacterController())
64 return;
65
66 CharacterControllerComponent controller = player.GetCharacterController();
67 if (!controller)
68 return;
69
70 IEntity mapItem = controller.GetAttachedGadgetAtLeftHandSlot();
71 if (!mapItem)
72 {
74 if (!gadgetManager)
75 return;
76
77 mapItem = gadgetManager.GetGadgetByType(EGadgetType.MAP);
78 if (!mapItem)
79 return;
80 }
81
82 SCR_MapGadgetComponent mapGadget = SCR_MapGadgetComponent.Cast(mapItem.FindComponent(SCR_MapGadgetComponent));
83 if (!mapGadget)
84 return;
85
86 SCR_MapGadgetComponentClass mapGadgetData = SCR_MapGadgetComponentClass.Cast(mapGadget.GetComponentData(mapItem));
87 if (!mapGadgetData)
88 return;
89
90 m_fRulerLength = mapGadgetData.GetRulerLength();
91 if (m_wImage.LoadImageTexture(0, mapGadgetData.GetProtractorTexture()))
92 m_wImage.SetImage(0);
93
94 float zoomVal = m_MapEntity.GetCurrentZoom();
95 m_fSizeCoef = 1000 / (m_fRulerLength / m_fBaseImageSize[0]); // (ruler real length%) / 1000 pix(meters)
96 float sizeVal = m_wWorkspace.DPIUnscale(zoomVal * m_fSizeCoef);
97 SetSize(sizeVal, sizeVal);
98
99 if (m_fPosX == 0 && m_fPosY == 0)
100 {
101 float sizeX, sizeY;
102 m_MapEntity.GetMapWidget().GetScreenSize(sizeX, sizeY);
103 m_fPosX = sizeX * 0.5;
104 m_fPosY = sizeY * 0.5;
105
107 }
108
109 FrameSlot.SetPos(m_wFrame, m_wWorkspace.DPIUnscale(m_fPosX), m_wWorkspace.DPIUnscale(m_fPosY));
110 m_wImage.SetRotation(m_fAngle);
111 m_vMapPan = m_MapEntity.GetCurrentPan();
112
113 m_MapEntity.GetOnMapZoom().Insert(OnMapZoom); // zoom for scaling
114 m_MapEntity.GetOnMapPan().Insert(OnMapPan); // pan for scaling
115 }
116 else
117 {
118 if (saveState) // save angle
119 {
120 m_fAngle = m_wImage.GetRotation();
121 }
122 else
123 {
124 m_fAngle = 0;
125 m_fPosX = 0;
126 m_fPosY = 0;
127 }
128
129 m_MapEntity.GetOnMapZoom().Remove(OnMapZoom); // zoom for scaling
130 m_MapEntity.GetOnMapPan().Remove(OnMapPan); // zoom for scaling
131 }
132
133 if (m_ToolMenuEntry)
134 m_ToolMenuEntry.SetActive(visible);
135 }
136
137 //------------------------------------------------------------------------------------------------
142 protected void SetSize(float x, float y, bool nextSize = false)
143 {
144 if (nextSize)
145 {
148 else
150 }
151
153
154 }
155
156 //------------------------------------------------------------------------------------------------
158 protected void OnMapZoom(float zoomVal)
159 {
160 float sizeVal = m_wWorkspace.DPIUnscale(zoomVal * m_fSizeCoef);
161 SetSize(sizeVal, sizeVal);
162 m_bIsZooming = true;
163 }
164
165 //------------------------------------------------------------------------------------------------
167 protected void OnMapPan(float x, float y, bool adjustedPan)
168 {
169 if (m_bIsZooming)
170 {
171 m_bIsZooming = false;
172
173 float screenX, screenY;
174 m_MapEntity.WorldToScreen( m_fWorldX, m_fWorldY, screenX, screenY, true );
175
176 m_fPosX = screenX;
177 m_fPosY = screenY;
178 }
179 else
180 {
181 m_fPosX -= m_vMapPan[0] - m_wWorkspace.DPIScale(x);
182 m_fPosY -= m_vMapPan[1] - m_wWorkspace.DPIScale(y);
183 }
184
185 FrameSlot.SetPos(m_wFrame, m_wWorkspace.DPIUnscale(m_fPosX), m_wWorkspace.DPIUnscale(m_fPosY));
186 m_vMapPan = m_MapEntity.GetCurrentPan();
187 }
188
189 //------------------------------------------------------------------------------------------------
191 protected void OnDragWidget(Widget widget)
192 {
193 if (widget == m_wFrame)
194 m_bIsDragged = true;
195 else
196 m_bIsDragged = false;
197 }
198
199 //------------------------------------------------------------------------------------------------
201 protected void OnActivateTool(Widget widget)
202 {
203 if (!m_wImage)
204 return;
205
206 m_wImage.SetRotation(0);
207 }
208
209 //------------------------------------------------------------------------------------------------
210 protected void OnInputQuickBind(float value, EActionTrigger reason)
211 {
212 if (!GetGame().GetInputManager().IsUsingMouseAndKeyboard() && IsToolMenuFocused())
213 return;
215 }
216
217 //------------------------------------------------------------------------------------------------
218 override void OnMapOpen(MapConfiguration config)
219 {
220 super.OnMapOpen(config);
221
222 // refresh widgets
223 m_wFrame = m_RootWidget.FindAnyWidget(m_sRootWidgetName);
224 m_wImage = ImageWidget.Cast(m_RootWidget.FindAnyWidget(m_sImageWidgetName));
225
226 int x, y;
227 m_wImage.GetImageSize(0, x, y);
228 m_fBaseImageSize[0] = x;
229 m_fBaseImageSize[1] = y;
230
232
233 if ( SCR_MapToolInteractionUI.Cast(m_MapEntity.GetMapUIComponent(SCR_MapToolInteractionUI)) ) // if dragging available, add callback
234 {
235 SCR_MapToolInteractionUI.GetOnDragWidgetInvoker().Insert(OnDragWidget);
236 SCR_MapToolInteractionUI.GetOnActivateToolInvoker().Insert(OnActivateTool);
237 }
238
239 SetVisible(m_bWantedVisible); // restore last visible state
240 OnMapZoom(m_MapEntity.GetCurrentZoom());
241 }
242
243 //------------------------------------------------------------------------------------------------
244 override void OnMapClose(MapConfiguration config)
245 {
246 m_bWantedVisible = m_bIsVisible; // visibility state
247 SetVisible(false, true);
248
249 super.OnMapClose(config);
250 }
251
252 //------------------------------------------------------------------------------------------------
253 override void Init()
254 {
255 m_fPosX = 0;
256 m_fPosY = 0;
257 m_wWorkspace = GetGame().GetWorkspace();
258
259 SCR_MapToolMenuUI toolMenu = SCR_MapToolMenuUI.Cast(m_MapEntity.GetMapUIComponent(SCR_MapToolMenuUI));
260 if (toolMenu)
261 {
262 m_ToolMenuEntry = toolMenu.RegisterToolMenuEntry(SCR_MapToolMenuUI.s_sToolMenuIcons, m_sToolMenuIconName, 10, m_bIsExclusive); // add to menu
263 m_ToolMenuEntry.m_OnClick.Insert(ToggleVisible);
264 m_ToolMenuEntry.SetEnabled(true);
265
266 GetGame().GetInputManager().AddActionListener("MapToolProtractor", EActionTrigger.DOWN, OnInputQuickBind);
267 }
268 }
269
270 //------------------------------------------------------------------------------------------------
271 override void Update(float timeSlice)
272 {
274 {
275 // save position for map reopen
276 float sizeX, sizeY;
277 m_wFrame.GetScreenPos(m_fPosX, m_fPosY);
278 m_wFrame.GetScreenSize(sizeX, sizeY);
279 m_fPosX = m_fPosX + sizeX * 0.5;
280 m_fPosY = m_fPosY + sizeY * 0.5;
281
283 }
284 }
285
286 //------------------------------------------------------------------------------------------------
287 // constructor
289 {
290 m_bHookToRoot = true;
291 }
292}
ArmaReforgerScripted GetGame()
Definition game.c:1398
InputManager GetInputManager()
void SCR_MapToolMenuUI()
UI Textures DeployMenu Briefing conflict_HintBanner_1_UI desc
proto external Managed FindComponent(typename typeName)
IEntity GetGadgetByType(EGadgetType type)
static SCR_GadgetManagerComponent GetGadgetManager(IEntity entity)
void OnInputQuickBind(float value, EActionTrigger reason)
override void OnMapClose(MapConfiguration config)
void OnDragWidget(Widget widget)
SCR_MapToolInteractionUI event.
override void OnMapOpen(MapConfiguration config)
void OnMapPan(float x, float y, bool adjustedPan)
SCR_MapEntity event.
override void Update(float timeSlice)
WorkspaceWidget m_wWorkspace
float m_fBaseImageSize[2]
void SetVisible(bool visible, bool saveState=false)
override void Init()
void OnMapZoom(float zoomVal)
SCR_MapEntity event.
void ToggleVisible()
Visibility toggle.
ref array< int > m_aSizesArray
void OnActivateTool(Widget widget)
SCR_MapToolInteractionUI event.
SCR_MapToolEntry m_ToolMenuEntry
ImageWidget m_wImage
void SetSize(float x, float y, bool nextSize=false)
Map tool menu entry data class.
static IEntity GetLocalControlledEntity()
SCR_FieldOfViewSettings Attribute
EActionTrigger