Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_MapMarkerBase.c
Go to the documentation of this file.
1
4{
5 protected const int SERIALIZED_BYTES = 34; // total amount of serialized bytes without custom string
6
7 // synchronized
8 protected SCR_EMapMarkerType m_eType; // config type
9 protected int m_iMarkerID = -1; // network ID, -1 means the marker is not set as synchronized
10 protected int m_iConfigID = -1; // config id used when marker of a single type has bigger amount of configuration options
11 protected int m_iMarkerOwnerID = -1; // owner playerID, -1 is dedicated server
12 protected int m_iFlags;
13 protected int m_iPosWorldX;
14 protected int m_iPosWorldY;
15 protected int m_iFactionFlags; // flags determining which factions are able to see the marker, 0 means no restrictions
16 protected int m_iColorEntry; // placed marker color entry id
17 protected int m_iIconEntry; // placed marker icon entry id
18 protected int m_iRotation;
19 protected string m_sCustomText;
21 protected bool m_bIsTimestampVisible;
22
23 // server only
24 protected bool m_bIsServerSideDisabled; // in hosted server scenario, opposing faction markers have to be properly managed but still disabled from showing up
25 protected bool m_bCanBeRemovedByOwner = true; // can this marker be deleted by user in map.
26
27 // rest
28 protected bool m_bTestVisibleFrame = true; // only run update based on presence in visible frame
29 protected bool m_bIsUpdateDisabled; // is update currently disbled
30 protected bool m_bIsDragged; // currently being dragged
31 protected bool m_bIsBlocked; // is marker blocked from showing to the user (ex. UGC restrictions)
32 protected int m_iScreenX; // cached screen position X
33 protected int m_iScreenY; // cached screen position Y
34 protected SCR_MapMarkerEntryConfig m_ConfigEntry; // marker entry associated with this marker type
36 protected ref Widget m_wRoot;
38 protected ref Color m_Color;
39
40 //------------------------------------------------------------------------------------------------
42 {
43 return m_wRoot;
44 }
45
46 //------------------------------------------------------------------------------------------------
48 {
49 return m_eType;
50 }
51
52 //------------------------------------------------------------------------------------------------
57
58 //------------------------------------------------------------------------------------------------
60 {
61 return m_iMarkerID;
62 }
63
64 //------------------------------------------------------------------------------------------------
65 void SetMarkerID(int id)
66 {
68 }
69
70 //------------------------------------------------------------------------------------------------
72 {
73 return m_iConfigID;
74 }
75
76 //------------------------------------------------------------------------------------------------
77 void SetMarkerConfigID(int id)
78 {
80 }
81
82 //------------------------------------------------------------------------------------------------
84 {
85 return m_iMarkerOwnerID;
86 }
87
88 //------------------------------------------------------------------------------------------------
89 void SetMarkerOwnerID(int playerID)
90 {
91 m_iMarkerOwnerID = playerID;
92 }
93
94 //------------------------------------------------------------------------------------------------
96 {
97 return m_iFlags;
98 }
99
100 //------------------------------------------------------------------------------------------------
101 void SetFlags(int flags)
102 {
103 m_iFlags = flags;
104 }
105
106 //------------------------------------------------------------------------------------------------
109 {
110 return m_iFactionFlags;
111 }
112
113 //------------------------------------------------------------------------------------------------
116 {
117 if (flags < 0) // invalid id
118 return;
119
120 int flag = Math.Pow(2, flags);
121
122 m_iFactionFlags |= flag;
123 }
124
125 //------------------------------------------------------------------------------------------------
128 {
130 }
131
132 //------------------------------------------------------------------------------------------------
134 bool IsFaction(int factionID)
135 {
136 int flag = Math.Pow(2, factionID);
137
138 return (m_iFactionFlags & flag);
139 }
140
141 //------------------------------------------------------------------------------------------------
142 void GetWorldPos(out int pos[2])
143 {
144 pos[0] = m_iPosWorldX;
145 pos[1] = m_iPosWorldY;
146 }
147
148 //------------------------------------------------------------------------------------------------
149 void SetWorldPos(int posX, int posY)
150 {
151 m_iPosWorldX = posX;
152 m_iPosWorldY = posY;
153 }
154
155 //------------------------------------------------------------------------------------------------
157 {
158 return m_iRotation;
159 }
160
161 //------------------------------------------------------------------------------------------------
162 void SetRotation(int angle)
163 {
164 m_iRotation = angle;
165 }
166
167 //------------------------------------------------------------------------------------------------
169 {
170 return m_iColorEntry;
171 }
172
173 //------------------------------------------------------------------------------------------------
175 {
176 return m_iIconEntry;
177 }
178
179 //------------------------------------------------------------------------------------------------
180 void SetColorEntry(int colorEntry)
181 {
182 m_iColorEntry = colorEntry;
183 }
184
185 //------------------------------------------------------------------------------------------------
186 void SetIconEntry(int iconEntry)
187 {
188 m_iIconEntry = iconEntry;
189 }
190
191 //------------------------------------------------------------------------------------------------
193 {
194 return m_sCustomText;
195 }
196
197 //------------------------------------------------------------------------------------------------
198 void SetCustomText(string text)
199 {
200 m_sCustomText = text;
201 }
202
203 //------------------------------------------------------------------------------------------------
206 {
207 return m_Timestamp;
208 }
209
210 //------------------------------------------------------------------------------------------------
213 {
214 m_Timestamp = timestamp;
215 }
216
217 //------------------------------------------------------------------------------------------------
218 void SetTimestampVisibility(bool isVisible)
219 {
220 m_bIsTimestampVisible = isVisible;
221 }
222
223 //------------------------------------------------------------------------------------------------
225 {
227 }
228
229 //------------------------------------------------------------------------------------------------
231 void SetServerDisabled(bool state)
232 {
234 }
235
236 //------------------------------------------------------------------------------------------------
238 void SetCanBeRemovedByOwner(bool state)
239 {
241 }
242
243 //------------------------------------------------------------------------------------------------
245 {
247 }
248
249 //------------------------------------------------------------------------------------------------
251 void SetUpdateDisabled(bool state)
252 {
253 if (m_bIsBlocked && !state)
254 SetUpdateDisabled(true);
255
256 m_bIsUpdateDisabled = state;
257
258 if (m_wRoot && m_wRoot.IsVisible() == state)
259 m_wRoot.SetVisible(!state);
260 }
261
262 //------------------------------------------------------------------------------------------------
264 void SetBlocked(bool state)
265 {
266 m_bIsBlocked = state;
267 }
268
269 //------------------------------------------------------------------------------------------------
272 {
273 return m_bIsBlocked;
274 }
275
276 //------------------------------------------------------------------------------------------------
278 void SetVisible(bool state)
279 {
280 if (m_wRoot)
281 m_wRoot.SetVisible(state);
282 }
283
284 //------------------------------------------------------------------------------------------------
286 void SetDragged(bool state)
287 {
288 m_bIsDragged = state;
289 }
290
291 //------------------------------------------------------------------------------------------------
296
297 //------------------------------------------------------------------------------------------------
299 bool TestVisibleFrame(vector visibleMin, vector visibleMax)
300 {
301 if( m_iPosWorldX < visibleMin[0]
302 || m_iPosWorldX > visibleMax[0]
303 || m_iPosWorldY < visibleMin[2]
304 || m_iPosWorldY > visibleMax[2])
305 {
306 return false;
307 }
308 else
309 {
310 SetUpdateDisabled(false);
311 return true;
312 }
313 }
314
315 //------------------------------------------------------------------------------------------------
318 {
319 SCR_MapMarkerManagerComponent mapMarkerManager = SCR_MapMarkerManagerComponent.GetInstance();
320 if (!mapMarkerManager)
321 return;
322
323 SCR_ScriptProfanityFilterRequestCallback profanityCallback = mapMarkerManager.RequestProfanityFilter(m_sCustomText);
324 if (!profanityCallback)
325 return;
326
327 profanityCallback.m_OnResult.Insert(OnProfanityFilteredCallback);
328 }
329
330 //------------------------------------------------------------------------------------------------
331 protected void OnProfanityFilteredCallback(array<string> texts)
332 {
333 if (texts.IsEmpty())
334 return;
335
336 m_sCustomText = texts[0];
338 m_MarkerWidgetComp.SetText(m_sCustomText, true);
339 }
340
341 //------------------------------------------------------------------------------------------------
344 void OnCreateMarker(bool skipProfanityFilter = false)
345 {
347 return;
348
350 if (!m_MapEntity)
351 return;
352
353 Widget mapRoot = m_MapEntity.GetMapMenuRoot();
354 if (!mapRoot)
355 return;
356
357 Widget mapFrame = mapRoot.FindAnyWidget(SCR_MapConstants.MAP_FRAME_NAME);
358 if (!mapFrame)
359 return;
360
361 m_ConfigEntry = SCR_MapMarkerManagerComponent.GetInstance().GetMarkerConfig().GetMarkerEntryConfigByType(m_eType);
362 if (!m_ConfigEntry)
363 return;
364
365 m_wRoot = GetGame().GetWorkspace().CreateWidgets(m_ConfigEntry.GetMarkerLayout(), mapFrame);
366 if (!m_wRoot)
367 return;
368
370 m_MarkerWidgetComp.SetMarkerObject(this);
371 m_ConfigEntry.InitClientSettings(this, m_MarkerWidgetComp, skipProfanityFilter);
372 m_MarkerWidgetComp.SetRotation(m_iRotation);
373
376 OnMapLayerChanged(m_MapEntity.GetLayerIndex());
377 }
378
379 //------------------------------------------------------------------------------------------------
380 void OnDelete()
381 {
382 if (m_wRoot)
383 m_wRoot.RemoveFromHierarchy();
384 }
385
386 //------------------------------------------------------------------------------------------------
392
393 //------------------------------------------------------------------------------------------------
394 protected void OnMapLayerChanged(int layerID)
395 {
397 m_MarkerWidgetComp.SetLayerID(layerID);
398
399 LayerChangeLogic(layerID);
400 }
401
402 //------------------------------------------------------------------------------------------------
403 void LayerChangeLogic(int layerID)
404 {
406 m_ConfigEntry.OnMapLayerChanged(m_MarkerWidgetComp, layerID);
407 }
408
409 //------------------------------------------------------------------------------------------------
411 bool OnUpdate(vector visibleMin = vector.Zero, vector visibleMax = vector.Zero)
412 {
414 return true;
415
417 {
418 if ((m_iPosWorldX < visibleMin[0]) || (m_iPosWorldX > visibleMax[0]) || (m_iPosWorldY < visibleMin[2]) || (m_iPosWorldY > visibleMax[2]))
419 {
420 SetUpdateDisabled(true);
421 return false;
422 }
423 }
424
426 FrameSlot.SetPos(m_wRoot, GetGame().GetWorkspace().DPIUnscale(m_iScreenX), GetGame().GetWorkspace().DPIUnscale(m_iScreenY)); // needs unscaled coords
427
428 return true;
429 }
430
431 //------------------------------------------------------------------------------------------------
432 static bool Extract(SCR_MapMarkerBase instance, ScriptCtx ctx, SSnapSerializerBase snapshot)
433 {
434 snapshot.SerializeInt(instance.m_iPosWorldX);
435 snapshot.SerializeInt(instance.m_iPosWorldY);
436 snapshot.SerializeInt(instance.m_iMarkerID);
437 snapshot.SerializeInt(instance.m_iMarkerOwnerID);
438 snapshot.SerializeInt(instance.m_iFlags);
439 snapshot.SerializeInt(instance.m_iConfigID);
440 snapshot.SerializeInt(instance.m_iFactionFlags);
441 snapshot.SerializeBytes(instance.m_iRotation, 2);
442 snapshot.SerializeBytes(instance.m_eType, 1);
443 snapshot.SerializeBytes(instance.m_iColorEntry, 1);
444 snapshot.SerializeBytes(instance.m_iIconEntry, 2);
445 snapshot.SerializeString(instance.m_sCustomText);
446 snapshot.SerializeBool(instance.m_bIsTimestampVisible);
447 snapshot.SerializeBytes(instance.m_Timestamp, 8);
448 return true;
449 }
450
451 //------------------------------------------------------------------------------------------------
452 static bool Inject(SSnapSerializerBase snapshot, ScriptCtx ctx, SCR_MapMarkerBase instance)
453 {
454 snapshot.SerializeInt(instance.m_iPosWorldX);
455 snapshot.SerializeInt(instance.m_iPosWorldY);
456 snapshot.SerializeInt(instance.m_iMarkerID);
457 snapshot.SerializeInt(instance.m_iMarkerOwnerID);
458 snapshot.SerializeInt(instance.m_iFlags);
459 snapshot.SerializeInt(instance.m_iConfigID);
460 snapshot.SerializeInt(instance.m_iFactionFlags);
461 snapshot.SerializeBytes(instance.m_iRotation, 2);
462 snapshot.SerializeBytes(instance.m_eType, 1);
463 snapshot.SerializeBytes(instance.m_iColorEntry, 1);
464 snapshot.SerializeBytes(instance.m_iIconEntry, 2);
465 snapshot.SerializeString(instance.m_sCustomText);
466 snapshot.SerializeBool(instance.m_bIsTimestampVisible);
467 snapshot.SerializeBytes(instance.m_Timestamp, 8);
468 return true;
469 }
470
471 //------------------------------------------------------------------------------------------------
472 static void Encode(SSnapSerializerBase snapshot, ScriptCtx ctx, ScriptBitSerializer packet)
473 {
474 snapshot.Serialize(packet, SERIALIZED_BYTES);
475 snapshot.EncodeString(packet);
476 snapshot.EncodeBool(packet); // m_bIsTimestampVisible
477 snapshot.Serialize(packet, 8); // m_Timestamp
478 }
479
480 //------------------------------------------------------------------------------------------------
481 static bool Decode(ScriptBitSerializer packet, ScriptCtx ctx, SSnapSerializerBase snapshot)
482 {
483 snapshot.Serialize(packet, SERIALIZED_BYTES);
484 snapshot.DecodeString(packet);
485 snapshot.DecodeBool(packet); // m_bIsTimestampVisible
486 snapshot.Serialize(packet, 8); // m_Timestamp
487 return true;
488 }
489
490 //------------------------------------------------------------------------------------------------
492 {
493 return lhs.CompareSnapshots(rhs, SERIALIZED_BYTES) // m_iPosWorldX(4) + m_iPosWorldY(4) + m_iMarkerID(4) + m_iMarkerOwnerID(4) + m_iFlags(4) + m_iConfigID(4) + m_iFactionFlags(4) + m_iRotation(2) + m_eType(1) + m_iColorEntry(1) + m_iIconEntry(2)
494 && lhs.CompareStringSnapshots(rhs) // m_sCustomText
495 && lhs.CompareSnapshots(rhs, 4 + 8); // m_bIsTimestampVisible + m_Timestamp
496 }
497
498 //------------------------------------------------------------------------------------------------
499 static bool PropCompare(SCR_MapMarkerBase instance, SSnapSerializerBase snapshot, ScriptCtx ctx)
500 {
501 return snapshot.CompareInt(instance.m_iPosWorldX)
502 && snapshot.CompareInt(instance.m_iPosWorldY)
503 && snapshot.CompareInt(instance.m_iMarkerID)
504 && snapshot.CompareInt(instance.m_iMarkerOwnerID)
505 && snapshot.CompareInt(instance.m_iFlags)
506 && snapshot.CompareInt(instance.m_iConfigID)
507 && snapshot.CompareInt(instance.m_iFactionFlags)
508 && snapshot.Compare(instance.m_iRotation, 2)
509 && snapshot.Compare(instance.m_eType, 1)
510 && snapshot.Compare(instance.m_iColorEntry, 1)
511 && snapshot.Compare(instance.m_iIconEntry, 2)
512 && snapshot.CompareString(instance.m_sCustomText)
513 && snapshot.CompareBool(instance.m_bIsTimestampVisible)
514 && snapshot.Compare(instance.m_Timestamp, 8);
515 }
516};
SCR_EAIThreatSectorFlags flags
AddonBuildInfoTool id
ArmaReforgerScripted GetGame()
Definition game.c:1398
EDamageType type
SCR_EMapMarkerType
Definition Color.c:13
Definition Math.c:13
static ScriptInvokerBase< MapConfigurationInvoker > GetOnMapClose()
Get on map close invoker.
static ScriptInvokerInt GetOnLayerChanged()
Get on layer changed invoker.
static SCR_MapEntity GetMapInstance()
Get map entity instance.
void SetDragged(bool state)
Set dragged state.
void SetRotation(int angle)
void SetUpdateDisabled(bool state)
Disable marker update based on visibility on screen, overriden by m_bIsBlocked.
void SetMarkerOwnerID(int playerID)
void SetColorEntry(int colorEntry)
void OnCreateMarker(bool skipProfanityFilter=false)
void AddMarkerFactionFlags(int flags)
Add faction index to flags which you can acquire by calling GetFactionIndex().
void SetVisible(bool state)
Used for temporary reasons such as hiding original marker during edit, not for filtering visiblity.
void SetMarkerFactionFlags(int flags)
Set faction flags directly without converting the faction indices.
static bool Decode(ScriptBitSerializer packet, ScriptCtx ctx, SSnapSerializerBase snapshot)
bool IsFaction(int factionID)
Check whether the marker is one of the defined list of factions.
void SetIconEntry(int iconEntry)
void SetFlags(int flags)
SCR_MapMarkerWidgetComponent GetMarkerComponent()
void SetBlocked(bool state)
Sets if marker is blocked (this changes visibility).
static void Encode(SSnapSerializerBase snapshot, ScriptCtx ctx, ScriptBitSerializer packet)
bool TestVisibleFrame(vector visibleMin, vector visibleMax)
Test whether the marker is visible on screen.
static bool SnapCompare(SSnapSerializerBase lhs, SSnapSerializerBase rhs, ScriptCtx ctx)
bool GetBlocked()
Gets if marker is blocked (this changes visibility).
SCR_EMapMarkerType GetType()
WorldTimestamp GetTimestamp()
void SetTimestamp(WorldTimestamp timestamp)
void SetMarkerConfigID(int id)
SCR_MapEntity m_MapEntity
void SetCustomText(string text)
void GetWorldPos(out int pos[2])
static bool PropCompare(SCR_MapMarkerBase instance, SSnapSerializerBase snapshot, ScriptCtx ctx)
void OnMapClosed(MapConfiguration config)
bool OnUpdate(vector visibleMin=vector.Zero, vector visibleMax=vector.Zero)
Called from SCR_MapMarkerManagerComponent.
void OnProfanityFilteredCallback(array< string > texts)
void SetType(SCR_EMapMarkerType type)
static bool Extract(SCR_MapMarkerBase instance, ScriptCtx ctx, SSnapSerializerBase snapshot)
void SetMarkerID(int id)
void SetWorldPos(int posX, int posY)
SCR_MapMarkerWidgetComponent m_MarkerWidgetComp
void SetCanBeRemovedByOwner(bool state)
Disable posibility to remove marker from map by owner.
static bool Inject(SSnapSerializerBase snapshot, ScriptCtx ctx, SCR_MapMarkerBase instance)
void OnMapLayerChanged(int layerID)
void LayerChangeLogic(int layerID)
void SetTimestampVisibility(bool isVisible)
int GetMarkerFactionFlags()
Get faction flags representing indices of factions within FactionManager prefab.
SCR_EMapMarkerType m_eType
SCR_MapMarkerEntryConfig m_ConfigEntry
void RequestProfanityFilter()
Requests profanity filtering for the text of this marker.
void SetServerDisabled(bool state)
Disable marker UI display on server -> for dedicated servers(no UI) or hosted server enemy faction.
WorldTimestamp m_Timestamp
Base entry config.