Arma Reforger Explorer
1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Toggle main menu visibility
Loading...
Searching...
No Matches
SCR_MapRulerUI.c
Go to the documentation of this file.
1
class
SCR_MapRulerUI
:
SCR_MapUIBaseComponent
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
;
30
protected
SCR_MapToolEntry
m_ToolMenuEntry
;
31
32
// Widgets
33
protected
Widget
m_wFrame
;
34
protected
ImageWidget
m_wImage
;
35
protected
WorkspaceWidget
m_wWorkspace
;
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
62
ChimeraCharacter
player =
ChimeraCharacter
.Cast(
SCR_PlayerController
.
GetLocalControlledEntity
());
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
{
73
SCR_GadgetManagerComponent
gadgetManager =
SCR_GadgetManagerComponent
.
GetGadgetManager
(player);
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
106
m_MapEntity
.ScreenToWorld(
m_fPosX
,
m_fPosY
,
m_fWorldX
,
m_fWorldY
);
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
{
146
if
(
m_iCurrentSizeIndex
<
m_iSizesCount
- 1)
147
m_iCurrentSizeIndex
++;
148
else
149
m_iCurrentSizeIndex
= 0;
150
}
151
152
m_wImage
.SetSize(x *
m_aSizesArray
[
m_iCurrentSizeIndex
], y *
m_aSizesArray
[
m_iCurrentSizeIndex
]);
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
;
214
ToggleVisible
();
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
231
m_iSizesCount
=
m_aSizesArray
.Count();
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
{
273
if
(
m_bIsVisible
&&
m_bIsDragged
)
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
282
m_MapEntity
.ScreenToWorld(
m_fPosX
,
m_fPosY
,
m_fWorldX
,
m_fWorldY
);
283
}
284
}
285
286
//------------------------------------------------------------------------------------------------
287
// constructor
288
void
SCR_MapRulerUI
()
289
{
290
m_bHookToRoot
=
true
;
291
}
292
}
GetGame
ArmaReforgerScripted GetGame()
Definition
game.c:1398
GetInputManager
InputManager GetInputManager()
Definition
SCR_BaseManualCameraComponent.c:205
SCR_MapToolMenuUI
void SCR_MapToolMenuUI()
Definition
SCR_MapToolMenuUI.c:484
desc
UI Textures DeployMenu Briefing conflict_HintBanner_1_UI desc
Definition
SCR_RespawnBriefingComponent.c:17
reason
string reason
Definition
ServerBrowserMenuCallbacks.c:41
ChimeraCharacter
Definition
ChimeraCharacter.c:13
FrameSlot
Definition
FrameSlot.c:13
IEntity
Definition
IEntity.c:13
IEntity::FindComponent
proto external Managed FindComponent(typename typeName)
ImageWidget
Definition
ImageWidget.c:13
MapConfiguration
Definition
MapConfiguration.c:3
SCR_GadgetManagerComponent
Definition
SCR_GadgetManagerComponent.c:140
SCR_GadgetManagerComponent::GetGadgetByType
IEntity GetGadgetByType(EGadgetType type)
Definition
SCR_GadgetManagerComponent.c:348
SCR_GadgetManagerComponent::GetGadgetManager
static SCR_GadgetManagerComponent GetGadgetManager(IEntity entity)
Definition
SCR_GadgetManagerComponent.c:177
SCR_MapGadgetComponentClass
Definition
SCR_MapGadgetComponent.c:3
SCR_MapGadgetComponentClass::GetRulerLength
float GetRulerLength()
Definition
SCR_MapGadgetComponent.c:26
SCR_MapGadgetComponentClass::GetProtractorTexture
ResourceName GetProtractorTexture()
Definition
SCR_MapGadgetComponent.c:20
SCR_MapRulerUI::OnInputQuickBind
void OnInputQuickBind(float value, EActionTrigger reason)
Definition
SCR_MapRulerUI.c:210
SCR_MapRulerUI::OnMapClose
override void OnMapClose(MapConfiguration config)
Definition
SCR_MapRulerUI.c:244
SCR_MapRulerUI::OnDragWidget
void OnDragWidget(Widget widget)
SCR_MapToolInteractionUI event.
Definition
SCR_MapRulerUI.c:191
SCR_MapRulerUI::OnMapOpen
override void OnMapOpen(MapConfiguration config)
Definition
SCR_MapRulerUI.c:218
SCR_MapRulerUI::SCR_MapRulerUI
void SCR_MapRulerUI()
Definition
SCR_MapRulerUI.c:288
SCR_MapRulerUI::OnMapPan
void OnMapPan(float x, float y, bool adjustedPan)
SCR_MapEntity event.
Definition
SCR_MapRulerUI.c:167
SCR_MapRulerUI::Update
override void Update(float timeSlice)
Definition
SCR_MapRulerUI.c:271
SCR_MapRulerUI::m_wWorkspace
WorkspaceWidget m_wWorkspace
Definition
SCR_MapRulerUI.c:35
SCR_MapRulerUI::m_bWantedVisible
bool m_bWantedVisible
Definition
SCR_MapRulerUI.c:19
SCR_MapRulerUI::m_fWorldY
float m_fWorldY
Definition
SCR_MapRulerUI.c:25
SCR_MapRulerUI::m_vMapPan
vector m_vMapPan
Definition
SCR_MapRulerUI.c:29
SCR_MapRulerUI::m_fBaseImageSize
float m_fBaseImageSize[2]
Definition
SCR_MapRulerUI.c:27
SCR_MapRulerUI::m_wFrame
Widget m_wFrame
Definition
SCR_MapRulerUI.c:33
SCR_MapRulerUI::SetVisible
void SetVisible(bool visible, bool saveState=false)
Definition
SCR_MapRulerUI.c:51
SCR_MapRulerUI::Init
override void Init()
Definition
SCR_MapRulerUI.c:253
SCR_MapRulerUI::m_fSizeCoef
float m_fSizeCoef
Definition
SCR_MapRulerUI.c:28
SCR_MapRulerUI::m_bIsDragged
bool m_bIsDragged
Definition
SCR_MapRulerUI.c:20
SCR_MapRulerUI::OnMapZoom
void OnMapZoom(float zoomVal)
SCR_MapEntity event.
Definition
SCR_MapRulerUI.c:158
SCR_MapRulerUI::ToggleVisible
void ToggleVisible()
Visibility toggle.
Definition
SCR_MapRulerUI.c:39
SCR_MapRulerUI::m_aSizesArray
ref array< int > m_aSizesArray
Definition
SCR_MapRulerUI.c:16
SCR_MapRulerUI::OnActivateTool
void OnActivateTool(Widget widget)
SCR_MapToolInteractionUI event.
Definition
SCR_MapRulerUI.c:201
SCR_MapRulerUI::m_fPosY
float m_fPosY
Definition
SCR_MapRulerUI.c:24
SCR_MapRulerUI::m_ToolMenuEntry
SCR_MapToolEntry m_ToolMenuEntry
Definition
SCR_MapRulerUI.c:30
SCR_MapRulerUI::m_bIsVisible
bool m_bIsVisible
Definition
SCR_MapRulerUI.c:18
SCR_MapRulerUI::m_fAngle
float m_fAngle
Definition
SCR_MapRulerUI.c:26
SCR_MapRulerUI::m_fPosX
float m_fPosX
Definition
SCR_MapRulerUI.c:24
SCR_MapRulerUI::m_fWorldX
float m_fWorldX
Definition
SCR_MapRulerUI.c:25
SCR_MapRulerUI::m_bIsZooming
bool m_bIsZooming
Definition
SCR_MapRulerUI.c:21
SCR_MapRulerUI::m_wImage
ImageWidget m_wImage
Definition
SCR_MapRulerUI.c:34
SCR_MapRulerUI::m_iSizesCount
int m_iSizesCount
Definition
SCR_MapRulerUI.c:23
SCR_MapRulerUI::SetSize
void SetSize(float x, float y, bool nextSize=false)
Definition
SCR_MapRulerUI.c:142
SCR_MapRulerUI::m_iCurrentSizeIndex
int m_iCurrentSizeIndex
Definition
SCR_MapRulerUI.c:22
SCR_MapToolEntry
Map tool menu entry data class.
Definition
SCR_MapToolMenuUI.c:3
SCR_MapUIBaseComponent::m_bHookToRoot
bool m_bHookToRoot
Definition
SCR_MapUIBaseComponent.c:11
SCR_MapUIBaseComponent::m_bIsExclusive
bool m_bIsExclusive
Definition
SCR_MapUIBaseComponent.c:9
SCR_MapUIBaseComponent::SCR_MapUIBaseComponent
void SCR_MapUIBaseComponent()
Definition
SCR_MapUIBaseComponent.c:94
SCR_MapUIBaseComponent::m_MapEntity
SCR_MapEntity m_MapEntity
Definition
SCR_MapUIBaseComponent.c:13
SCR_MapUIBaseComponent::m_RootWidget
Widget m_RootWidget
Definition
SCR_MapUIBaseComponent.c:12
SCR_MapUIBaseComponent::IsToolMenuFocused
bool IsToolMenuFocused()
Definition
SCR_MapUIBaseComponent.c:83
SCR_PlayerController
Definition
SCR_PlayerController.c:31
SCR_PlayerController::GetLocalControlledEntity
static IEntity GetLocalControlledEntity()
Definition
SCR_PlayerController.c:495
UIWidgets
Definition
attributes.c:40
Widget
Definition
Widget.c:13
WorkspaceWidget
Definition
WorkspaceWidget.c:16
vector
Definition
vector.c:13
Attribute
SCR_FieldOfViewSettings Attribute
Definition
SendGoalMessage.c:170
EActionTrigger
EActionTrigger
Definition
EActionTrigger.c:13
scripts
Game
Map
ComponentsUI
SCR_MapRulerUI.c
Generated by
1.17.0