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_EditorPingInfoDisplay.c
Go to the documentation of this file.
1
3
9
class
SCR_EditorPingInfoDisplay
: SCR_InfoDisplay
10
{
11
[
Attribute
(uiwidget:
UIWidgets
.ResourceNamePicker,
params
:
"layout"
)]
12
protected
ResourceName
m_WidgetPrefab
;
13
14
[
Attribute
(uiwidget:
UIWidgets
.ResourceNamePicker,
params
:
"layout"
)]
15
protected
ResourceName
m_SlotWidgetPrefab
;
16
17
protected
bool
m_bCanUpdate
;
18
protected
WorkspaceWidget
m_Workspace
;
19
protected
SCR_PingEditorComponent
m_PingManager
;
20
protected
ref
map<SCR_EditableEntityComponent, SCR_EditableEntitySceneSlotUIComponent>
m_EntitySlots
=
new
map<SCR_EditableEntityComponent, SCR_EditableEntitySceneSlotUIComponent>
;
21
protected
ref
map<SCR_EditableEntityComponent, Widget>
m_EntityWidgets
=
new
map<SCR_EditableEntityComponent, Widget>
;
22
23
protected
void
OnEditorPingAction
(
float
value,
EActionTrigger
reason
)
24
{
25
SendPing
(
false
);
26
}
27
protected
void
OnEditorPingUnlimitedOnlyAction
(
float
value,
EActionTrigger
reason
)
28
{
29
SendPing
(
true
);
30
}
31
protected
void
SendPing
(
bool
unlimitedOnly)
32
{
33
if
(
SCR_EditorManagerEntity
.IsOpenedInstance())
return
;
34
35
vector
position
;
36
SCR_EditableEntityComponent
target;
37
38
if
(!target || !target.
GetPos
(
position
))
39
{
40
//--- Position under cursor
41
WorkspaceWidget
workspace =
GetGame
().GetWorkspace();
42
if
(!workspace)
return
;
43
44
//--- Not reliable, cursor is not hidden in center of the screen on client
45
//int mouseX, mouseY;
46
//WidgetManager.GetMousePos(mouseX, mouseY);
47
48
int
screenW = workspace.GetWidth();
49
int
screenH = workspace.GetHeight();
50
51
BaseWorld
world =
GetGame
().GetWorld();
52
vector
outDir;
53
vector
startPos = workspace.ProjScreenToWorld(workspace.DPIUnscale(screenW / 2), workspace.DPIUnscale(screenH / 2), outDir, world);
54
outDir *= 1000;
//--- ToDo: Don't hardcode
55
56
autoptr
TraceParam
trace =
new
TraceParam
();
57
trace.Start = startPos;
58
trace.End = startPos + outDir;
59
trace.Flags =
TraceFlags
.WORLD |
TraceFlags
.OCEAN |
TraceFlags
.ENTS;
60
trace.LayerMask =
TRACE_LAYER_CAMERA
;
61
float
traceDis = world.TraceMove(trace, null);
62
63
target =
SCR_EditableEntityComponent
.
GetEditableEntity
(trace.TraceEnt);
64
if
(!target && traceDis == 1)
return
;
//--- No intersection
65
66
position
= startPos + outDir * traceDis;
67
}
68
69
m_PingManager
.SendPing(unlimitedOnly,
position
, target);
70
}
71
protected
void
OnPingEntityRegister
(
int
reporterID,
SCR_EditableEntityComponent
pingEntity)
72
{
73
//--- When outside of the editor, don't create a ping on player
74
if
(pingEntity.GetOwner() ==
SCR_PlayerController
.
GetLocalControlledEntity
())
return
;
75
76
SCR_EditableEntitySceneSlotUIComponent
slot;
77
if
(!
m_EntitySlots
.Find(pingEntity, slot))
78
{
79
Widget
slotWidget =
m_Workspace
.CreateWidgets(
m_SlotWidgetPrefab
,
m_wRoot
);
80
if
(!slotWidget)
return
;
81
82
slot =
SCR_EditableEntitySceneSlotUIComponent
.Cast(slotWidget.FindHandler(
SCR_EditableEntitySceneSlotUIComponent
));
83
if
(!slot)
return
;
84
85
slot.
InitSlot
(pingEntity);
86
m_EntitySlots
.Insert(pingEntity, slot);
87
}
88
89
//--- Create ping widget in a slot
90
slot.
DeleteWidget
(null);
91
Widget
entityWidget = slot.CreateWidget(pingEntity,
m_WidgetPrefab
);
92
m_EntityWidgets
.Insert(pingEntity, entityWidget);
93
m_bCanUpdate
=
true
;
94
}
95
protected
void
OnPingEntityUnregister
(
int
reporterID,
SCR_EditableEntityComponent
pingEntity)
96
{
97
Widget
entityWidget;
98
if
(
m_EntityWidgets
.Find(pingEntity, entityWidget))
99
{
100
m_EntityWidgets
.Remove(pingEntity);
101
}
102
103
SCR_EditableEntitySceneSlotUIComponent
slot;
104
if
(
m_EntitySlots
.Find(pingEntity, slot))
105
{
106
if
(slot)
107
{
108
slot.
DeleteWidget
(null);
109
slot.DeleteSlot();
110
}
111
112
if
(!slot || slot.IsEmpty())
113
{
114
m_EntitySlots
.Remove(pingEntity);
115
m_bCanUpdate
= !
m_EntitySlots
.IsEmpty();
116
}
117
}
118
}
119
120
override
event
void
UpdateValues
(
IEntity
owner,
float
timeSlice)
121
{
122
if
(!
m_bCanUpdate
|| !
m_Workspace
)
return
;
123
124
int
screenW =
m_Workspace
.GetWidth();
125
int
screenH =
m_Workspace
.GetHeight();
126
127
screenW =
m_Workspace
.DPIUnscale(screenW);
128
screenH =
m_Workspace
.DPIUnscale(screenH);
129
vector
posCenter =
Vector
(screenW / 2, screenH / 2, 0);
130
131
vector
transformCam[4];
132
GetGame
().GetWorld().GetCurrentCamera(transformCam);
133
vector
posCam = transformCam[3];
134
135
foreach
(
SCR_EditableEntitySceneSlotUIComponent
entitySlot:
m_EntitySlots
)
136
{
137
entitySlot.UpdateSlot(screenW, screenH, posCenter, posCam);
138
}
139
}
140
override
event
void
OnStartDraw
(
IEntity
owner)
141
{
142
super.OnStartDraw(owner);
143
144
if
(!
SCR_EditorManagerEntity
.GetInstance())
145
{
146
//--- HUD initialized before the editor - wait
147
SCR_EditorManagerCore
editorManagerCore =
SCR_EditorManagerCore
.Cast(
SCR_EditorManagerCore
.GetInstance(
SCR_EditorManagerCore
));
148
if
(editorManagerCore) editorManagerCore.Event_OnEditorManagerInitOwner.Insert(
OnStartDraw
);
149
return
;
150
}
151
else
152
{
153
SCR_EditorManagerCore
editorManagerCore =
SCR_EditorManagerCore
.Cast(
SCR_EditorManagerCore
.GetInstance(
SCR_EditorManagerCore
));
154
if
(editorManagerCore) editorManagerCore.Event_OnEditorManagerInitOwner.Remove(
OnStartDraw
);
155
}
156
157
m_PingManager
=
SCR_PingEditorComponent
.Cast(
SCR_PingEditorComponent
.GetInstance(
SCR_PingEditorComponent
,
true
));
158
if
(!
m_PingManager
)
return
;
159
160
m_PingManager
.GetOnPingEntityRegister().Insert(
OnPingEntityRegister
);
161
m_PingManager
.GetOnPingEntityUnregister().Insert(
OnPingEntityUnregister
);
162
163
m_Workspace
=
m_wRoot
.GetWorkspace();
164
165
InputManager
inputManager =
GetGame
().GetInputManager();
166
if
(inputManager)
167
{
168
inputManager.AddActionListener(
"EditorPing"
,
EActionTrigger
.DOWN,
OnEditorPingAction
);
169
inputManager.AddActionListener(
"EditorPingUnlimitedOnly"
,
EActionTrigger
.DOWN,
OnEditorPingUnlimitedOnlyAction
);
170
}
171
}
172
override
event
void
OnStopDraw
(
IEntity
owner)
173
{
174
super.OnStopDraw(owner);
175
176
//--- Clear existing ping widgets
177
for
(
int
i = 0, count =
m_EntitySlots
.Count(); i < count; i++)
178
{
179
OnPingEntityUnregister
(0,
m_EntitySlots
.GetKey(0));
180
}
181
182
if
(
m_PingManager
)
183
{
184
m_PingManager
.GetOnPingEntityRegister().Remove(
OnPingEntityRegister
);
185
m_PingManager
.GetOnPingEntityUnregister().Remove(
OnPingEntityUnregister
);
186
}
187
188
InputManager
inputManager =
GetGame
().GetInputManager();
189
if
(inputManager)
190
{
191
inputManager.RemoveActionListener(
"EditorPing"
,
EActionTrigger
.DOWN,
OnEditorPingAction
);
192
inputManager.RemoveActionListener(
"EditorPingUnlimitedOnly"
,
EActionTrigger
.DOWN,
OnEditorPingUnlimitedOnlyAction
);
193
}
194
}
195
};
TRACE_LAYER_CAMERA
const int TRACE_LAYER_CAMERA
Definition
Constants.c:14
GetGame
ArmaReforgerScripted GetGame()
Definition
game.c:1398
position
vector position
Definition
SCR_DestructibleTreeV2.c:30
SCR_EditorManagerEntity
void SCR_EditorManagerEntity(IEntitySource src, IEntity parent)
Definition
SCR_EditorManagerEntity.c:2211
m_wRoot
Widget m_wRoot
Definition
SCR_GameModeCleanSweep.c:25
params
category params
Definition
SCR_SpherePointGeneratorPreviewComponent.c:21
reason
string reason
Definition
ServerBrowserMenuCallbacks.c:41
BaseWorld
Definition
BaseWorld.c:13
IEntity
Definition
IEntity.c:13
InputManager
Input management system for user interactions.
Definition
InputManager.c:20
ResourceName
Definition
ResourceName.c:13
SCR_EditableEntityComponent
Definition
SCR_EditableEntityComponent.c:14
SCR_EditableEntityComponent::GetEditableEntity
static SCR_EditableEntityComponent GetEditableEntity(IEntity owner)
Definition
SCR_EditableEntityComponent.c:919
SCR_EditableEntityComponent::GetPos
bool GetPos(out vector pos)
Definition
SCR_EditableEntityComponent.c:261
SCR_EditableEntitySceneSlotUIComponent
Definition
SCR_EditableEntitySceneSlotUIComponent.c:2
SCR_EditableEntitySceneSlotUIComponent::DeleteWidget
override void DeleteWidget(SCR_EntitiesEditorUIRule rule)
Definition
SCR_EditableEntitySceneSlotUIComponent.c:229
SCR_EditableEntitySceneSlotUIComponent::InitSlot
override void InitSlot(SCR_EditableEntityComponent entity)
Definition
SCR_EditableEntitySceneSlotUIComponent.c:236
SCR_EditorManagerCore
Core component to manage SCR_EditorManagerEntity.
Definition
SCR_EditorManagerCore.c:6
SCR_EditorPingInfoDisplay
Definition
SCR_EditorPingInfoDisplay.c:10
SCR_EditorPingInfoDisplay::OnStopDraw
override event void OnStopDraw(IEntity owner)
Definition
SCR_EditorPingInfoDisplay.c:172
SCR_EditorPingInfoDisplay::m_SlotWidgetPrefab
ResourceName m_SlotWidgetPrefab
Definition
SCR_EditorPingInfoDisplay.c:15
SCR_EditorPingInfoDisplay::OnEditorPingUnlimitedOnlyAction
void OnEditorPingUnlimitedOnlyAction(float value, EActionTrigger reason)
Definition
SCR_EditorPingInfoDisplay.c:27
SCR_EditorPingInfoDisplay::m_EntitySlots
ref map< SCR_EditableEntityComponent, SCR_EditableEntitySceneSlotUIComponent > m_EntitySlots
Definition
SCR_EditorPingInfoDisplay.c:20
SCR_EditorPingInfoDisplay::OnPingEntityRegister
void OnPingEntityRegister(int reporterID, SCR_EditableEntityComponent pingEntity)
Definition
SCR_EditorPingInfoDisplay.c:71
SCR_EditorPingInfoDisplay::OnStartDraw
override event void OnStartDraw(IEntity owner)
Definition
SCR_EditorPingInfoDisplay.c:140
SCR_EditorPingInfoDisplay::SendPing
void SendPing(bool unlimitedOnly)
Definition
SCR_EditorPingInfoDisplay.c:31
SCR_EditorPingInfoDisplay::m_WidgetPrefab
ResourceName m_WidgetPrefab
Definition
SCR_EditorPingInfoDisplay.c:12
SCR_EditorPingInfoDisplay::m_Workspace
WorkspaceWidget m_Workspace
Definition
SCR_EditorPingInfoDisplay.c:18
SCR_EditorPingInfoDisplay::OnPingEntityUnregister
void OnPingEntityUnregister(int reporterID, SCR_EditableEntityComponent pingEntity)
Definition
SCR_EditorPingInfoDisplay.c:95
SCR_EditorPingInfoDisplay::m_PingManager
SCR_PingEditorComponent m_PingManager
Definition
SCR_EditorPingInfoDisplay.c:19
SCR_EditorPingInfoDisplay::m_EntityWidgets
ref map< SCR_EditableEntityComponent, Widget > m_EntityWidgets
Definition
SCR_EditorPingInfoDisplay.c:21
SCR_EditorPingInfoDisplay::UpdateValues
override event void UpdateValues(IEntity owner, float timeSlice)
Definition
SCR_EditorPingInfoDisplay.c:120
SCR_EditorPingInfoDisplay::m_bCanUpdate
bool m_bCanUpdate
Definition
SCR_EditorPingInfoDisplay.c:17
SCR_EditorPingInfoDisplay::OnEditorPingAction
void OnEditorPingAction(float value, EActionTrigger reason)
Definition
SCR_EditorPingInfoDisplay.c:23
SCR_PingEditorComponent
Definition
SCR_PingEditorComponent.c:71
SCR_PlayerController
Definition
SCR_PlayerController.c:31
SCR_PlayerController::GetLocalControlledEntity
static IEntity GetLocalControlledEntity()
Definition
SCR_PlayerController.c:495
TraceParam
Definition
TraceParam.c:16
UIWidgets
Definition
attributes.c:40
Widget
Definition
Widget.c:13
WorkspaceWidget
Definition
WorkspaceWidget.c:16
map
Definition
Types.c:486
vector
Definition
vector.c:13
Attribute
SCR_FieldOfViewSettings Attribute
Definition
SendGoalMessage.c:170
EActionTrigger
EActionTrigger
Definition
EActionTrigger.c:13
Vector
proto native vector Vector(float x, float y, float z)
TraceFlags
TraceFlags
Definition
TraceFlags.c:13
scripts
Game
Editor
UI
InfoDisplays
SCR_EditorPingInfoDisplay.c
Generated by
1.17.0