Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_MapMarkerSquadLeaderComponent.c
Go to the documentation of this file.
2{
3 bool m_bIsHovered;
4 protected bool m_bIsInit;
11
12 protected ref array<Widget> m_aGroupMemberEntries = {};
13
14 [Attribute("{CCD81F58E9D6EEA6}UI/layouts/Map/MapMarkerGroupInfo.layout", desc: "group info layout")]
16
17 [Attribute("{B09864CA15145CD3}UI/layouts/Map/MapMarkerGroupInfoLine.layout", desc: "group info line layout")]
19
20 [Attribute("lineText", desc: "line text widget")]
21 protected string m_sLineTextWidgetName;
22
23 [Attribute("lineIcon", desc: "line icon widget")]
24 protected string m_sLineIconWidgetName;
25
26 [Attribute("groupCohesionIcon", desc: "group cohesion icon widget")]
28
29 [Attribute("PlatformIcon")]
30 protected string m_sPlatformIconWidgetName;
31
32 [Attribute("40", desc: "pixels, group info offset")]
33 protected int m_iGroupInfoOffset;
34
35 protected ref array<int> m_aDisplayedPlayerIDs = {};
37
38 //------------------------------------------------------------------------------------------------
41 void SetGroupActive(bool state, string factionName = string.Empty)
42 {
43 Color iconColor = Color.FromInt(Color.BLACK);
44
45 if (state)
46 {
47 /*m_wOwnSquadBackground.SetVisible(true);
48 m_wOwnSquadIcon.SetVisible(true);
49 m_wOwnSquadIconGlow.SetVisible(true);
50
51 // TODO temp set until these are added to configs
52 if (factionName == "US")
53 iconColor = new Color(0.0, 0.18, 0.61, 1.0);
54 else if (factionName == "USSR")
55 iconColor = new Color(0.51, 0.02, 0.02, 1.0);*/
56 }
57 else
58 {
59 m_wOwnSquadBackground.SetVisible(false);
60 m_wOwnSquadIcon.SetVisible(false);
61 m_wOwnSquadIconGlow.SetVisible(false);
62 }
63
64 //m_wOwnSquadIcon.SetColor(iconColor);
65 //m_wOwnSquadIconGlow.SetColor(iconColor);
66 }
67
68 //------------------------------------------------------------------------------------------------
72 void UpdateGroupInfoPosition(int screenX, int screenY)
73 {
74 if (m_wGroupInfo)
75 FrameSlot.SetPos(m_wGroupInfo, GetGame().GetWorkspace().DPIUnscale(screenX), GetGame().GetWorkspace().DPIUnscale(screenY) - m_iGroupInfoOffset); // needs unscaled coords
76 }
77
78 //------------------------------------------------------------------------------------------------
79 override bool OnMouseButtonDown(Widget w, int x, int y, int button)
80 {
81 if (button != 0) // LMB only
82 return true;
83
85 SCR_MapCursorModule cursorModule;
86 if (mapEntity)
87 cursorModule = SCR_MapCursorModule.Cast(mapEntity.GetMapModule(SCR_MapCursorModule));
88
89 if (cursorModule && cursorModule.GetCursorState() & SCR_MapCursorModule.STATE_POPUP_RESTRICTED)
90 return true;
91
92 SCR_AIGroup group = SCR_MapMarkerSquadLeader.Cast(m_MarkerEnt).GetGroup();
93 if (!group)
94 return false;
95
96 SCR_PlayerControllerGroupComponent playerControllerGroup = SCR_PlayerControllerGroupComponent.GetLocalPlayerControllerGroupComponent();
97 if (playerControllerGroup)
98 playerControllerGroup.SetSelectedGroupID(group.GetGroupID());
99
100 GetGame().OpenGroupMenu();
101
102 return true;
103 }
104
105 //------------------------------------------------------------------------------------------------
106 override bool OnMouseEnter(Widget w, int x, int y)
107 {
108 m_MarkerEnt.LayerChangeLogic(0);
109
110 SCR_AIGroup group = SCR_MapMarkerSquadLeader.Cast(m_MarkerEnt).GetGroup();
111 if (group)
112 {
113 if (!m_bIsInit)
114 {
115 m_wGroupInfo = GetGame().GetWorkspace().CreateWidgets(m_sGroupInfoLayout, m_wRoot.GetParent());
116 if (!m_wGroupInfo)
117 return false;
118
119 m_wGroupInfoList = m_wGroupInfo.FindAnyWidget("groupInfoList");
120 m_wGroupFrequency = TextWidget.Cast(m_wGroupInfo.FindAnyWidget("groupFrequency"));
121
122 int capacity = group.GetMaxMembers();
123
124 for (int i = 0; i < capacity; i++)
125 {
126 m_aGroupMemberEntries.Insert(GetGame().GetWorkspace().CreateWidgets(m_sLineLayout, m_wGroupInfoList));
127 }
128
129 m_bIsInit = true;
130 }
131
132 float fFrequency = Math.Round(group.GetRadioFrequency() * 0.1) * 0.01; // Format the frequency text: round and convert to 2 digits with one possible decimal place (39500 -> 39.5)
133 m_wGroupFrequency.SetText(fFrequency.ToString(3, 1));
134
135 int playerCount = group.GetPlayerCount();
136 array<int> membersCopy = {};
137 membersCopy.Copy(group.GetPlayerIDs());
138
139 PlayerManager pManager = GetGame().GetPlayerManager();
140 int leaderID = group.GetLeaderID();
141
142 // leader entry first, order of IDs is not guaranteed
143 foreach (int id : membersCopy)
144 {
145 if (id == leaderID && !m_aGroupMemberEntries.IsEmpty())
146 {
147 Widget entry = m_aGroupMemberEntries[0];
148 TextWidget txtW = TextWidget.Cast(entry.FindWidget(m_sLineTextWidgetName));
149 txtW.SetText(SCR_PlayerNamesFilterCache.GetInstance().GetPlayerDisplayName(id));
150 entry.SetVisible(true);
151
152 ImageWidget platformImage= ImageWidget.Cast(entry.FindAnyWidget(m_sPlatformIconWidgetName));
153 if (platformImage)
154 SCR_PlayerController.Cast(GetGame().GetPlayerController()).SetPlatformImageTo(id, platformImage);
155
157 txtW.SetColor(GUIColors.ORANGE);
158 else
159 txtW.SetColor(GUIColors.DEFAULT);
160
161 ImageWidget imgW = ImageWidget.Cast(entry.FindWidget(m_sLineIconWidgetName));
162 imgW.SetOpacity(1);
163
164 membersCopy.RemoveItem(id);
165 break;
166 }
167 }
168
169 // members
170 foreach (int i, Widget entry : m_aGroupMemberEntries)
171 {
172 if (i == 0) // leader
173 continue;
174
175 if (i < playerCount)
176 {
177 TextWidget txtW = TextWidget.Cast(entry.FindWidget(m_sLineTextWidgetName));
178 txtW.SetText(SCR_PlayerNamesFilterCache.GetInstance().GetPlayerDisplayName(membersCopy[i-1]));
179 entry.SetVisible(true);
180
181 ImageWidget platformImage= ImageWidget.Cast(entry.FindAnyWidget(m_sPlatformIconWidgetName));
182 if (platformImage)
183 SCR_PlayerController.Cast(GetGame().GetPlayerController()).SetPlatformImageTo(membersCopy[i-1], platformImage);
184
185 if (GetGame().GetPlayerController().GetPlayerId() == membersCopy[i-1])
186 txtW.SetColor(GUIColors.ORANGE);
187 else
188 txtW.SetColor(GUIColors.DEFAULT);
189
190 ImageWidget imgW = ImageWidget.Cast(entry.FindWidget(m_sLineIconWidgetName));
191 imgW.SetOpacity(0);
192
193 continue;
194 }
195
196 entry.SetVisible(false);
197 }
198
199 m_wGroupInfo.SetVisible(true);
200
201 m_aDisplayedPlayerIDs.Clear();
202 m_aDisplayedPlayerIDs.Insert(leaderID);
203 foreach (int id : membersCopy)
204 {
205 m_aDisplayedPlayerIDs.Insert(id);
206 }
207
208 SCR_AIGroupCohesionComponent cohesionComponent = SCR_AIGroupCohesionComponent.Cast(group.FindComponent(SCR_AIGroupCohesionComponent));
209 if (cohesionComponent)
210 {
211 array<int> cluster = {};
212 cohesionComponent.GetPlayersInCohesion(cluster);
213 OnClusterUpdated(cluster);
214 }
215 else
216 {
218 }
219 }
220
221 m_bIsHovered = true;
222
223 return true;
224 }
225
226 //------------------------------------------------------------------------------------------------
228 {
229 Widget cohesionWidget;
230 if (m_groupCohesionWidgetCache.Contains(entry))
231 {
232 cohesionWidget = m_groupCohesionWidgetCache.Get(entry);
233 }
234 else
235 {
236 cohesionWidget = entry.FindAnyWidget(m_sGroupCohesionWidgetName);
237 m_groupCohesionWidgetCache.Insert(entry, cohesionWidget);
238 }
239
240 return cohesionWidget;
241 }
242
243 //------------------------------------------------------------------------------------------------
244 protected void HideCohesionWidget()
245 {
246 foreach (Widget entry : m_aGroupMemberEntries)
247 {
248 Widget cohesionWidget = GetCohesionWidget(entry);
249 if (!cohesionWidget)
250 continue;
251
252 cohesionWidget.SetVisible(false);
253 }
254 }
255
256 //------------------------------------------------------------------------------------------------
257 protected void OnClusterUpdated(notnull array<int> cluster)
258 {
259 array<int> players = SCR_MapMarkerSquadLeader.Cast(m_MarkerEnt).GetGroup().GetPlayerIDs();
260 if (!players || players.Count() == 0 || m_aGroupMemberEntries.IsEmpty())
261 return;
262
263 foreach (int i, int playerID : m_aDisplayedPlayerIDs)
264 {
265 Widget entry = m_aGroupMemberEntries[i];
266 ImageWidget cohesionImage = ImageWidget.Cast(GetCohesionWidget(entry));
267 if (!cohesionImage)
268 continue;
269
270 if (cluster.Contains(playerID))
271 cohesionImage.SetColor(Color.FromInt(Color.WHITE));
272 else
273 cohesionImage.SetColor(Color.FromInt(Color.GRAY_25));
274 }
275 }
276
277 //------------------------------------------------------------------------------------------------
278 override bool OnMouseLeave(Widget w, Widget enterW, int x, int y)
279 {
280 m_wGroupInfo.SetVisible(false);
281 m_bIsHovered = false;
282
283 m_MarkerEnt.LayerChangeLogic(m_iLayerID);
284
285 return true;
286 }
287
288 //------------------------------------------------------------------------------------------------
289 override void HandlerAttached(Widget w)
290 {
291 super.HandlerAttached(w);
292
293 m_wOwnSquadBackground = m_wRoot.FindAnyWidget("OwnSquadBackground");
294 m_wOwnSquadIcon = m_wRoot.FindAnyWidget("OwnSquadIcon");
295 m_wOwnSquadIconGlow = m_wRoot.FindAnyWidget("OwnSquadIconGlow");
296 }
297}
ArmaReforgerScripted GetGame()
Definition game.c:1398
UI Textures DeployMenu Briefing conflict_HintBanner_1_UI desc
Definition Color.c:13
Definition Math.c:13
int GetPlayerCount(bool checkMasterAndSlaves=false)
array< int > GetPlayerIDs()
int GetRadioFrequency()
int GetMaxMembers()
int GetGroupID()
int GetLeaderID()
SCR_MapModuleBase GetMapModule(typename moduleType)
static SCR_MapEntity GetMapInstance()
Get map entity instance.
Attached to root of marker dynamic base layout.
override bool OnMouseEnter(Widget w, int x, int y)
override bool OnMouseButtonDown(Widget w, int x, int y, int button)
override bool OnMouseLeave(Widget w, Widget enterW, int x, int y)
void UpdateGroupInfoPosition(int screenX, int screenY)
void SetGroupActive(bool state, string factionName=string.Empty)
void OnClusterUpdated(notnull array< int > cluster)
Definition Types.c:486
SCR_FieldOfViewSettings Attribute
proto external PlayerController GetPlayerController()
proto external int GetPlayerId()