4 protected int m_iPlayerId;
5 protected SCR_ChimeraCharacter m_AICharacter;
11 override bool OnClick(Widget w,
int x,
int y,
int button)
14 m_OptionsCombo.OpenList();
15 return super.OnClick(w, x, y, button);
19 override bool OnFocus(Widget w,
int x,
int y)
24 return super.OnFocus(w, x, y);
28 override bool OnFocusLost(Widget w,
int x,
int y)
30 if (m_OnTileFocusLost)
33 return super.OnFocusLost(w, x, y);
48 if (!m_OnTileFocusLost)
51 return m_OnTileFocusLost;
61 void SetTilePlayerID(
int playerID)
67 SCR_ChimeraCharacter GetCharacter()
73 void SetCharacter(SCR_ChimeraCharacter character)
75 m_AICharacter = character;
81 return m_OptionsCombo;
87 m_OptionsCombo = optionsCombo;
91 void SetOpacity(
float opacity)
93 Widget comboBox = m_OptionsCombo.GetRootWidget();
97 ImageWidget comboImage = ImageWidget.Cast(comboBox.FindAnyWidget(
"Image0"));
101 comboImage.SetOpacity(opacity);
108 protected int m_iGroupID;
109 protected Faction m_GroupFaction;
112 protected ResourceName m_textLayout;
120 protected SCR_PlayerControllerGroupComponent m_GroupComponent;
122 [
Attribute(
"0.898 0.541 0.184 1", UIWidgets.ColorPicker)]
123 protected ref Color m_PlayerNameSelfColor;
125 [
Attribute(
"0.898 0.541 0.184 1", UIWidgets.ColorPicker)]
126 protected ref Color m_PlayerNameDeadColor;
128 [
Attribute(
"0.898 0.541 0.184 1", UIWidgets.ColorPicker)]
129 protected ref Color m_GroupFullColor;
131 protected ResourceName m_sIconsImageSet =
"{2EFEA2AF1F38E7F0}UI/Textures/Icons/icons_wrapperUI-64.imageset";
133 protected const string OPTIONS_COMBO_INVITE =
"#AR-PlayerList_Invite";
134 protected const string OPTIONS_COMBO_KICK =
"#AR-DeployMenu_Groups_Kick";
135 protected const string OPTIONS_COMBO_PROMOTE =
"#AR-DeployMenu_Groups_Promote";
136 protected const string LOCK_GROUP =
"#AR-Player_Groups_Lock";
137 protected const string UNLOCK_GROUP =
"#AR-Player_Groups_Unlock";
138 protected const string PRIVATE_GROUP =
"#AR-Player_Groups_Private";
139 protected const string PUBLIC_GROUP =
"#AR-Player_Groups_Public";
140 protected const string JOIN_GROUP =
"#AR-DeployMenu_JoinGroup";
141 protected const string REQUEST_JOIN_GROUP =
"#AR-DeployMenu_RequestJoinGroup";
143 protected const ResourceName GROUP_FLAG_SELECTION =
"{7340FE3C6872C6D3}UI/layouts/Menus/GroupSlection/GroupFlagSelection.layout";
145 protected ref array<SCR_PlayerTileButtonComponent> m_aPlayerComponentsList = {};
147 protected static ref ScriptInvoker s_OnGroupButtonClicked =
new ScriptInvoker();
153 override bool OnClick(Widget w,
int x,
int y,
int button)
155 super.OnClick(w, x, y, button);
160 m_GroupComponent.SetSelectedGroupID(
m_iGroupID);
161 s_OnGroupButtonClicked.Invoke();
167 void InitiateGroupTile()
173 m_GroupComponent = SCR_PlayerControllerGroupComponent.GetLocalPlayerControllerGroupComponent();
174 if (!m_GroupComponent)
178 if (!playerController)
186 group.GetOnPlayerLeaderChanged().Insert(SetupJoinGroupButton);
187 group.GetOnJoinPrivateGroupRequest().Insert(SetupJoinGroupButton);
194 if (m_BaseTaskManager)
195 m_BaseTaskManager.s_OnTaskUpdate.Insert(RefreshPlayers);
197 group.GetOnMemberStateChange().Insert(RefreshPlayers);
199 RichTextWidget squadName = RichTextWidget.Cast(
GetRootWidget().FindAnyWidget(
"Callsign"));
202 string groupName = group.GetCustomNameWithOriginal();
203 string company, platoon, squad, character, format;
204 group.GetCallsigns(company, platoon, squad, character, format);
206 if (groupName.IsEmpty() || group.GetNameAuthorID() != 0 && !playerController.CanViewContentCreatedBy(group.GetNameAuthorID()))
208 squadName.SetTextFormat(format, company, platoon, squad, character);
212 company = WidgetManager.Translate(company);
213 groupName = group.GetCustomName() +
" (" +
string.Format(format, company, platoon, squad, character) +
")";
214 squadName.SetText(groupName);
218 RichTextWidget frequency = RichTextWidget.Cast(
GetRootWidget().FindAnyWidget(
"Frequency"));
220 frequency.SetText(
""+group.GetRadioFrequency()*0.001 +
" #AR-VON_FrequencyUnits_MHz");
222 RichTextWidget playerCount = RichTextWidget.Cast(
GetRootWidget().FindAnyWidget(
"PlayerCount"));
224 playerCount.SetText(group.GetPlayerCount().ToString() +
"/" + group.GetMaxMembers());
227 SetGroupInfoColor(m_GroupFullColor);
229 ImageWidget background = ImageWidget.Cast(
GetRootWidget().FindAnyWidget(
"Background"));
232 background.SetVisible(m_GroupComponent.GetSelectedGroupID() ==
m_iGroupID);
234 if (group.IsPlayerInGroup(playerController.GetPlayerId()))
235 squadName.SetColor(m_PlayerNameSelfColor);
237 ImageWidget privateIcon = ImageWidget.Cast(
GetRootWidget().FindAnyWidget(
"PrivateIcon"));
239 privateIcon.SetVisible(group.IsPrivate());
241 if (!m_ParentSubMenu)
248 if (!m_ParentSubMenu)
251 Widget groupImage = m_ParentSubMenu.GetRootWidget().FindAnyWidget(
"GroupImage");
259 imageButton.m_OnClicked.Insert(OnSelectGroupFlagButtonClicked);
265 ResourceName flag = group.GetGroupFlag();
269 array<ResourceName> textures = {};
271 scrFaction.GetGroupFlagTextures(textures);
273 if (!scrFaction.GetGroupFlagImageSet().IsEmpty())
275 array<string> names = {};
277 scrFaction.GetFlagNames(names);
279 imageButton.SetFlagButtonFromImageSet(names[0]);
281 else if (!textures.IsEmpty())
283 imageButton.SetImage(textures[0]);
287 array<ResourceName> images = {};
289 scrFaction.GetGroupFlagTextures(images);
291 if (!scrFaction.GetGroupFlagImageSet().IsEmpty())
293 array<string> names = {};
295 scrFaction.GetFlagNames(names);
297 if (!names.IsEmpty())
298 imageButton.SetFlagButtonFromImageSet(names[0]);
300 else if (!images.IsEmpty())
302 imageButton.SetImage(images[0]);
306 imageButton.SetImage(scrFaction.GetFactionFlag());
312 if (group.GetFlagIsFromImageSet())
314 imageButton.SetFlagButtonFromImageSet(flag);
318 imageButton.SetImage(flag);
324 void OnSelectGroupFlagButtonClicked()
326 SCR_PlayerControllerGroupComponent playerComponent = SCR_PlayerControllerGroupComponent.GetLocalPlayerControllerGroupComponent();
327 if (!playerComponent)
334 if (!group.IsPlayerLeader(playerComponent.GetPlayerID()))
336 SCR_NotificationsComponent.SendLocal(
ENotification.GROUPS_PLAYER_IS_NOT_LEADER);
342 array<string> flagNames = {};
343 array<ResourceName> flagTextures = {};
344 playerFaction.GetFlagNames(flagNames);
345 playerFaction.GetGroupFlagTextures(flagTextures);
348 if (!flagNames.IsEmpty() || !flagTextures.IsEmpty())
351 SCR_NotificationsComponent.SendLocal(
ENotification.GROUPS_NO_FLAGS);
355 void RefreshPlayers()
358 if (!m_GroupFaction || !m_GroupManager || !playerManager)
362 if (!playerController)
369 SetupSelectGroupFlagButton(group);
371 if (m_ParentSubMenu ==
null)
374 m_aPlayerComponentsList.Clear();
376 VerticalLayoutWidget playerList = VerticalLayoutWidget.Cast(m_ParentSubMenu.GetRootWidget().FindAnyWidget(
"PlayerList"));
380 VerticalLayoutWidget leaderList = VerticalLayoutWidget.Cast(m_ParentSubMenu.GetRootWidget().FindAnyWidget(
"Leader"));
384 RichTextWidget squadName = RichTextWidget.Cast(m_ParentSubMenu.GetRootWidget().FindAnyWidget(
"GroupDetailCallsign"));
388 RichTextWidget description = RichTextWidget.Cast(m_ParentSubMenu.GetRootWidget().FindAnyWidget(
"Description"));
392 RichTextWidget frequency = RichTextWidget.Cast(m_ParentSubMenu.GetRootWidget().FindAnyWidget(
"GroupDetailFrequency"));
397 SCR_PlayerControllerGroupComponent s_PlayerGroupController = SCR_PlayerControllerGroupComponent.GetLocalPlayerControllerGroupComponent();
398 if (!s_PlayerGroupController)
401 if (!s_PlayerGroupController.CanPlayerJoinGroup(playerController.GetPlayerId(), m_GroupManager.FindGroup(
m_iGroupID)))
402 m_JoinGroupButton.SetEnabled(
false);
404 m_JoinGroupButton.SetEnabled(
true);
406 string groupName = group.GetCustomName();
407 string company, platoon, squad, character, format;
408 group.GetCallsigns(company, platoon, squad, character, format);
410 if (groupName.IsEmpty() || group.GetNameAuthorID() != 0 && !playerController.CanViewContentCreatedBy(group.GetNameAuthorID()))
412 squadName.SetTextFormat(format, company, platoon, squad, character);
416 company = WidgetManager.Translate(company);
417 groupName = group.GetCustomName() +
" (" +
string.Format(format, company, platoon, squad, character) +
")";
418 squadName.SetText(groupName);
421 if (!group.GetCustomDescription().IsEmpty())
422 description.SetText(group.GetCustomDescription());
424 description.SetText(
string.Empty);
426 CheckLeaderOptions();
428 frequency.SetText(
""+group.GetRadioFrequency()*0.001 +
" #AR-VON_FrequencyUnits_MHz");
430 Widget children = playerList.GetChildren();
433 playerList.RemoveChild(children);
434 children = playerList.GetChildren();
437 children = leaderList.GetChildren();
440 leaderList.RemoveChild(children);
441 children = leaderList.GetChildren();
444 array<int> playerIDs = group.GetPlayerIDs();
447 int leaderID = group.GetLeaderID();
450 playerTile = Widget.Cast(
GetGame().GetWorkspace().CreateWidgets(m_textLayout, leaderList));
451 SetupPlayerTile(playerTile, leaderID);
454 foreach (
int playerID : playerIDs)
456 if (playerID == leaderID)
459 playerTile = Widget.Cast(
GetGame().GetWorkspace().CreateWidgets(m_textLayout, playerList));
460 SetupPlayerTile(playerTile, playerID);
465 SetupJoinGroupButton();
471 void SetupJoinGroupButton()
473 SCR_PlayerControllerGroupComponent playerGroupController = SCR_PlayerControllerGroupComponent.GetLocalPlayerControllerGroupComponent();
474 if (!playerGroupController)
478 if (playerGroupController.GetSelectedGroupID() == -1)
484 group = m_GroupManager.FindGroup(playerGroupController.GetSelectedGroupID());
490 m_JoinGroupButton.m_OnActivated.Clear();
492 if (group.IsPrivate())
494 m_JoinGroupButton.SetLabel(REQUEST_JOIN_GROUP);
495 m_JoinGroupButton.m_OnActivated.Insert(
SCR_GroupSubMenu.RequestJoinPrivateGroup);
499 m_JoinGroupButton.SetLabel(JOIN_GROUP);
503 array<int> denied = {};
504 group.GetDeniedRequesters(denied);
505 array<int> requesters = {};
506 group.GetRequesterIDs(requesters);
508 bool requesterDenied = denied.Contains(playerGroupController.GetPlayerID());
509 bool requestSent = requesters.Contains(playerGroupController.GetPlayerID());
516 m_JoinGroupButton.SetEnabled(
false);
518 m_JoinGroupButton.SetEnabled(
true);
523 void SetupPlayerTile(Widget playerTile,
int playerID)
526 if (!m_GroupFaction || !m_GroupManager || !playerManager)
534 TextWidget playerName, playerFrequency;
535 ImageWidget taskIcon, muteIcon, background, loadoutIcon;
536 ButtonWidget playerButton;
540 IEntityComponentSource source;
541 BaseContainer container;
543 set<int> frequencies =
new set<int>();
544 playerName = TextWidget.Cast(playerTile.FindAnyWidget(
"PlayerName"));
545 playerFrequency = TextWidget.Cast(playerTile.FindAnyWidget(
"Frequency"));
546 taskIcon = ImageWidget.Cast(playerTile.FindAnyWidget(
"TaskIcon"));
547 muteIcon = ImageWidget.Cast(playerTile.FindAnyWidget(
"MuteIcon"));
548 background = ImageWidget.Cast(playerTile.FindAnyWidget(
"Background"));
549 loadoutIcon = ImageWidget.Cast(playerTile.FindAnyWidget(
"LoadoutIcon"));
551 playerButton = ButtonWidget.Cast(playerTile.FindAnyWidget(
"PlayerButton"));
556 m_PlayerTileComponent.SetTilePlayerID(playerID);
558 SetupOptionsCombo(playerTile);
560 playerName.SetText(
GetGame().GetPlayerManager().GetPlayerName(playerID));
562 ChimeraCharacter controlledEntity = ChimeraCharacter.Cast(playerManager.GetPlayerControlledEntity(playerID));
563 if (controlledEntity)
566 SCR_Global.GetFrequencies(gadgetManager, frequencies);
567 if (!frequencies.IsEmpty())
570 background.SetOpacity(0.85);
575 playerName.SetColor(m_PlayerNameSelfColor);
581 task = taskExecutor.GetAssignedTask();
583 if (m_BaseTaskManager && task)
585 taskIcon.SetOpacity(1);
586 RichTextWidget taskName = RichTextWidget.Cast(playerTile.FindAnyWidget(
"TaskName"));
589 taskName.SetOpacity(1);
590 task.SetTitleWidgetText(taskName, task.GetTaskListTaskTitle());
597 muteIcon.SetColor(m_PlayerNameSelfColor);
598 muteIcon.LoadImageFromSet(0, m_sIconsImageSet,
"sound-off");
606 playerLoadout = loadoutManager.GetPlayerLoadout(playerID);
610 res = Resource.Load(playerLoadout.GetLoadoutResource());
614 container = source.GetObject(
"m_UIInfo");
616 info.SetIconTo(loadoutIcon);
621 if (group.IsPlayerLeader(playerID))
623 m_LeaderInfo.SetIconTo(loadoutIcon);
624 loadoutIcon.SetColor(m_PlayerNameSelfColor);
628 Widget badge = playerTile.FindAnyWidget(
"PlayerBadge");
631 Color badgeColor = m_GroupFaction.GetFactionColor();
632 if (group.IsPlayerLeader(playerID))
633 badgeColor = (m_PlayerNameSelfColor);
635 SetBadgeColor(badge, badgeColor);
639 m_PlayerTileComponent.GetOnTileFocus().Insert(OnPlayerTileFocus);
640 m_PlayerTileComponent.GetOnTileFocusLost().Insert(OnPlayerTileFocusLost);
642 m_aPlayerComponentsList.Insert(m_PlayerTileComponent);
646 protected void OnPlayerTileFocus(
int id)
648 if (m_OnPlayerTileFocus)
649 m_OnPlayerTileFocus.Invoke(
id);
651 DisableConfirmButton();
655 protected void OnPlayerTileFocusLost(
int id)
657 if (m_OnPlayerTileFocusLost)
658 m_OnPlayerTileFocusLost.Invoke(
id);
660 EnableConfirmButton();
664 void SetGroupInfoColor(Color groupColor)
666 ImageWidget frequencyImage = ImageWidget.Cast(
GetRootWidget().FindAnyWidget(
"FrequencyImage"));
667 ImageWidget playerIcon = ImageWidget.Cast(
GetRootWidget().FindAnyWidget(
"PlayerIcon"));
668 TextWidget callsign = TextWidget.Cast(
GetRootWidget().FindAnyWidget(
"Callsign"));
669 TextWidget frequency = TextWidget.Cast(
GetRootWidget().FindAnyWidget(
"Frequency"));
670 TextWidget playerCount = TextWidget.Cast(
GetRootWidget().FindAnyWidget(
"PlayerCount"));
671 if (!frequencyImage || !playerIcon || !callsign || !frequency || !playerCount)
674 frequencyImage.SetColor(groupColor);
675 playerIcon.SetColor(groupColor);
676 callsign.SetColor(groupColor);
677 frequency.SetColor(groupColor);
678 playerCount.SetColor(groupColor);
688 override bool OnFocus(Widget w,
int x,
int y)
690 super.OnFocus(w, x, y);
691 if (m_GroupComponent.GetSelectedGroupID() == -1)
692 m_GroupComponent.SetSelectedGroupID(
m_iGroupID);
693 EInputDeviceType deviceType =
GetGame().GetInputManager().GetLastUsedInputDevice();
694 if (deviceType == EInputDeviceType.GAMEPAD || deviceType == EInputDeviceType.KEYBOARD)
697 m_GroupComponent.SetSelectedGroupID(
m_iGroupID);
703 void SetGroupID(
int id)
711 return m_GroupFaction;
715 void SetGroupFaction(
Faction groupFaction)
717 m_GroupFaction = groupFaction;
723 m_JoinGroupButton = joinGroupButton;
727 void SetupOptionsCombo(Widget playerTile)
729 ButtonWidget playerOptionsButton = ButtonWidget.Cast(playerTile.FindAnyWidget(
"PlayerOptions"));
730 if (!playerOptionsButton)
734 if (!playerOptionsCombo)
737 m_PlayerTileComponent.SetOptionsComboBoxComponent(playerOptionsCombo);
739 int playerID =
GetGame().GetPlayerController().GetPlayerId();
740 SCR_AIGroup group = m_GroupManager.GetPlayerGroup(playerID);
742 if (group &&
m_iGroupID != group.GetGroupID() && m_PlayerTileComponent.GetTilePlayerID() != -1)
743 m_PlayerTileComponent.GetOptionsComboComponent().AddItem(OPTIONS_COMBO_INVITE);
750 if (group.IsPlayerLeader(playerID) && playerID != m_PlayerTileComponent.GetTilePlayerID() && m_PlayerTileComponent.GetTilePlayerID() != -1)
752 m_PlayerTileComponent.GetOptionsComboComponent().AddItem(OPTIONS_COMBO_KICK);
753 m_PlayerTileComponent.GetOptionsComboComponent().AddItem(OPTIONS_COMBO_PROMOTE);
756 if (m_PlayerTileComponent.GetOptionsComboComponent().GetNumItems() == 0)
757 m_PlayerTileComponent.SetOpacity(0.3);
759 m_PlayerTileComponent.GetOptionsComboComponent().m_OnOpened.Insert(DisableConfirmButton);
760 m_PlayerTileComponent.GetOptionsComboComponent().m_OnClosed.Insert(EnableConfirmButton);
762 m_PlayerTileComponent.GetOptionsComboComponent().m_OnChanged.Insert(OnComboBoxConfirm);
768 SCR_PlayerControllerGroupComponent playerGroupController = SCR_PlayerControllerGroupComponent.GetLocalPlayerControllerGroupComponent();
770 if (!playerGroupController)
774 for (
int i = m_aPlayerComponentsList.Count()-1; i >= 0; i--)
776 if (m_aPlayerComponentsList[i].GetOptionsComboComponent() == combo)
777 playerID = m_aPlayerComponentsList[i].GetTilePlayerID();
780 switch (combo.GetItemName(
index))
782 case OPTIONS_COMBO_INVITE:
784 playerGroupController.InvitePlayer(playerID);
787 case OPTIONS_COMBO_KICK:
789 playerGroupController.RequestKickPlayer(playerID);
792 case OPTIONS_COMBO_PROMOTE:
794 playerGroupController.RequestPromoteLeader(playerID);
799 combo.SetCurrentItem(-1,
false,
false);
803 protected string GetGroupNameFormated(
SCR_AIGroup group)
805 string groupName = group.GetCustomNameWithOriginal();
806 if (groupName.IsEmpty())
808 string company, platoon, squad, character, format;
809 group.GetCallsigns(company, platoon, squad, character, format);
810 groupName =
string.Format(format, company, platoon, squad, character);
816 protected void CheckLeaderOptions()
822 Widget privateChecker = m_ParentSubMenu.GetRootWidget().FindAnyWidget(
"PrivateCheckLayout");
826 Widget privateCheckerButton = m_ParentSubMenu.GetRootWidget().FindAnyWidget(
"PrivateChecker");
827 if (!privateCheckerButton)
834 ButtonWidget nameChangeButton = ButtonWidget.Cast(m_ParentSubMenu.GetRootWidget().FindAnyWidget(
"ChangeNameButton"));
835 if (!nameChangeButton)
840 privateChecker.SetOpacity(0);
841 privateChecker.SetEnabled(
false);
842 nameChangeButton.SetOpacity(0);
843 nameChangeButton.SetEnabled(
false);
847 checkerComp.SetToggled(group.IsPrivate());
848 if (group.IsPrivate())
849 checkerComp.SetText(PRIVATE_GROUP);
851 checkerComp.SetText(PUBLIC_GROUP);
853 privateChecker.SetOpacity(1);
854 privateChecker.SetEnabled(
true);
855 nameChangeButton.SetOpacity(1);
856 nameChangeButton.SetEnabled(
true);
860 static ScriptInvoker GetOnGroupTileClicked()
862 return s_OnGroupButtonClicked;
868 if (!m_OnPlayerTileFocus)
871 return m_OnPlayerTileFocus;
877 if (!m_OnPlayerTileFocusLost)
880 return m_OnPlayerTileFocusLost;
884 void EnableConfirmButton()
886 SetConfirmButtonStatus(
true);
890 void DisableConfirmButton()
892 InputManager inputManager =
GetGame().GetInputManager();
893 if (inputManager && inputManager.GetLastUsedInputDevice() == EInputDeviceType.GAMEPAD)
894 SetConfirmButtonStatus(
false);
898 void SetConfirmButtonStatus(
bool status)
908 void SetBadgeColor(Widget badge, Color color)
913 ImageWidget badgeTop, badgeMiddle, badgeBottom;
915 badgeTop = ImageWidget.Cast(badge.FindAnyWidget(
"BadgeTop"));
916 badgeMiddle = ImageWidget.Cast(badge.FindAnyWidget(
"BadgeMiddle"));
917 badgeBottom = ImageWidget.Cast(badge.FindAnyWidget(
"BadgeBottom"));
919 if (!badgeMiddle || !badgeTop || !badgeBottom)
922 badgeTop.SetColor(color);
923 badgeMiddle.SetColor(color);
924 badgeBottom.SetColor(color);
928 void ShowAIsInGroup()
934 VerticalLayoutWidget playerList = VerticalLayoutWidget.Cast(m_ParentSubMenu.GetRootWidget().FindAnyWidget(
"PlayerList"));
939 TextWidget playerName;
940 ButtonWidget playerButton;
946 array<SCR_ChimeraCharacter> aiMembers = slaveGroup.GetAIMembers();
947 SCR_CharacterIdentityComponent identityComponent;
949 foreach (SCR_ChimeraCharacter AIcharacter : aiMembers)
951 playerTile = Widget.Cast(
GetGame().GetWorkspace().CreateWidgets(m_textLayout, playerList));
952 playerName = TextWidget.Cast(playerTile.FindAnyWidget(
"PlayerName"));
954 identityComponent = SCR_CharacterIdentityComponent .Cast(AIcharacter.FindComponent(SCR_CharacterIdentityComponent));
955 if (!identityComponent)
958 array<string> nameParams = {};
959 identityComponent.GetFormattedFullName(name, nameParams);
960 playerName.SetTextFormat(name, nameParams[0], nameParams[1], nameParams[2]);
962 playerButton = ButtonWidget.Cast(playerTile.FindAnyWidget(
"PlayerButton"));
967 if (!m_PlayerTileComponent)
970 m_PlayerTileComponent.SetTilePlayerID(-1);
972 m_PlayerTileComponent.SetCharacter(AIcharacter);
975 Widget badge = playerTile.FindAnyWidget(
"PlayerBadge");
978 SetBadgeColor(badge, m_GroupFaction.GetFactionColor());
980 SetupOptionsCombo(playerTile);