Merge pull request #13002 from rob-v/LobbyOptionsEditableByHost

Host can change Team and Spawn of any player. #12936
This commit is contained in:
reaperrr
2017-05-04 19:15:01 +02:00
committed by GitHub
5 changed files with 71 additions and 18 deletions

View File

@@ -641,6 +641,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
if (orderManager.LocalClient == null) if (orderManager.LocalClient == null)
return; return;
var isHost = Game.IsHost;
var idx = 0; var idx = 0;
foreach (var kv in orderManager.LobbyInfo.Slots) foreach (var kv in orderManager.LobbyInfo.Slots)
{ {
@@ -659,7 +660,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
if (template == null || template.Id != emptySlotTemplate.Id) if (template == null || template.Id != emptySlotTemplate.Id)
template = emptySlotTemplate.Clone(); template = emptySlotTemplate.Clone();
if (Game.IsHost) if (isHost)
LobbyUtils.SetupEditableSlotWidget(this, template, slot, client, orderManager); LobbyUtils.SetupEditableSlotWidget(this, template, slot, client, orderManager);
else else
LobbyUtils.SetupSlotWidget(template, slot, client); LobbyUtils.SetupSlotWidget(template, slot, client);
@@ -670,7 +671,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
join.OnClick = () => orderManager.IssueOrder(Order.Command("slot " + key)); join.OnClick = () => orderManager.IssueOrder(Order.Command("slot " + key));
} }
else if ((client.Index == orderManager.LocalClient.Index) || else if ((client.Index == orderManager.LocalClient.Index) ||
(client.Bot != null && Game.IsHost)) (client.Bot != null && isHost))
{ {
// Editable player in slot // Editable player in slot
if (template == null || template.Id != editablePlayerTemplate.Id) if (template == null || template.Id != editablePlayerTemplate.Id)
@@ -701,8 +702,17 @@ namespace OpenRA.Mods.Common.Widgets.Logic
() => panel = PanelType.Kick, () => panel = PanelType.Players); () => panel = PanelType.Kick, () => panel = PanelType.Players);
LobbyUtils.SetupColorWidget(template, slot, client); LobbyUtils.SetupColorWidget(template, slot, client);
LobbyUtils.SetupFactionWidget(template, slot, client, factions); LobbyUtils.SetupFactionWidget(template, slot, client, factions);
if (isHost)
{
LobbyUtils.SetupEditableTeamWidget(template, slot, client, orderManager, Map);
LobbyUtils.SetupEditableSpawnWidget(template, slot, client, orderManager, Map);
}
else
{
LobbyUtils.SetupTeamWidget(template, slot, client); LobbyUtils.SetupTeamWidget(template, slot, client);
LobbyUtils.SetupSpawnWidget(template, slot, client); LobbyUtils.SetupSpawnWidget(template, slot, client);
}
LobbyUtils.SetupReadyWidget(template, slot, client); LobbyUtils.SetupReadyWidget(template, slot, client);
} }

View File

@@ -313,9 +313,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
slot.OnMouseDown = _ => ShowSlotDropDown(logic, slot, s, c, orderManager); slot.OnMouseDown = _ => ShowSlotDropDown(logic, slot, s, c, orderManager);
// Ensure Name selector (if present) is hidden // Ensure Name selector (if present) is hidden
var name = parent.GetOrNull("NAME"); HideChildWidget(parent, "NAME");
if (name != null)
name.IsVisible = () => false;
} }
public static void SetupSlotWidget(Widget parent, Session.Slot s, Session.Client c) public static void SetupSlotWidget(Widget parent, Session.Slot s, Session.Client c)
@@ -325,9 +323,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
name.GetText = () => c != null ? c.Name : s.Closed ? "Closed" : "Open"; name.GetText = () => c != null ? c.Name : s.Closed ? "Closed" : "Open";
// Ensure Slot selector (if present) is hidden // Ensure Slot selector (if present) is hidden
var slot = parent.GetOrNull("SLOT_OPTIONS"); HideChildWidget(parent, "SLOT_OPTIONS");
if (slot != null)
slot.IsVisible = () => false;
} }
public static void SetupKickWidget(Widget parent, Session.Slot s, Session.Client c, OrderManager orderManager, Widget lobby, Action before, Action after) public static void SetupKickWidget(Widget parent, Session.Slot s, Session.Client c, OrderManager orderManager, Widget lobby, Action before, Action after)
@@ -427,20 +423,25 @@ namespace OpenRA.Mods.Common.Widgets.Logic
public static void SetupEditableTeamWidget(Widget parent, Session.Slot s, Session.Client c, OrderManager orderManager, MapPreview map) public static void SetupEditableTeamWidget(Widget parent, Session.Slot s, Session.Client c, OrderManager orderManager, MapPreview map)
{ {
var dropdown = parent.Get<DropDownButtonWidget>("TEAM"); var dropdown = parent.Get<DropDownButtonWidget>("TEAM_DROPDOWN");
dropdown.IsVisible = () => true;
dropdown.IsDisabled = () => s.LockTeam || orderManager.LocalClient.IsReady; dropdown.IsDisabled = () => s.LockTeam || orderManager.LocalClient.IsReady;
dropdown.OnMouseDown = _ => ShowTeamDropDown(dropdown, c, orderManager, map.PlayerCount); dropdown.OnMouseDown = _ => ShowTeamDropDown(dropdown, c, orderManager, map.PlayerCount);
dropdown.GetText = () => (c.Team == 0) ? "-" : c.Team.ToString(); dropdown.GetText = () => (c.Team == 0) ? "-" : c.Team.ToString();
HideChildWidget(parent, "TEAM");
} }
public static void SetupTeamWidget(Widget parent, Session.Slot s, Session.Client c) public static void SetupTeamWidget(Widget parent, Session.Slot s, Session.Client c)
{ {
parent.Get<LabelWidget>("TEAM").GetText = () => (c.Team == 0) ? "-" : c.Team.ToString(); parent.Get<LabelWidget>("TEAM").GetText = () => (c.Team == 0) ? "-" : c.Team.ToString();
HideChildWidget(parent, "TEAM_DROPDOWN");
} }
public static void SetupEditableSpawnWidget(Widget parent, Session.Slot s, Session.Client c, OrderManager orderManager, MapPreview map) public static void SetupEditableSpawnWidget(Widget parent, Session.Slot s, Session.Client c, OrderManager orderManager, MapPreview map)
{ {
var dropdown = parent.Get<DropDownButtonWidget>("SPAWN"); var dropdown = parent.Get<DropDownButtonWidget>("SPAWN_DROPDOWN");
dropdown.IsVisible = () => true;
dropdown.IsDisabled = () => s.LockSpawn || orderManager.LocalClient.IsReady; dropdown.IsDisabled = () => s.LockSpawn || orderManager.LocalClient.IsReady;
dropdown.OnMouseDown = _ => dropdown.OnMouseDown = _ =>
{ {
@@ -450,11 +451,21 @@ namespace OpenRA.Mods.Common.Widgets.Logic
ShowSpawnDropDown(dropdown, c, orderManager, spawnPoints); ShowSpawnDropDown(dropdown, c, orderManager, spawnPoints);
}; };
dropdown.GetText = () => (c.SpawnPoint == 0) ? "-" : Convert.ToChar('A' - 1 + c.SpawnPoint).ToString(); dropdown.GetText = () => (c.SpawnPoint == 0) ? "-" : Convert.ToChar('A' - 1 + c.SpawnPoint).ToString();
HideChildWidget(parent, "SPAWN");
}
static void HideChildWidget(Widget parent, string widgetId)
{
var widget = parent.GetOrNull(widgetId);
if (widget != null)
widget.IsVisible = () => false;
} }
public static void SetupSpawnWidget(Widget parent, Session.Slot s, Session.Client c) public static void SetupSpawnWidget(Widget parent, Session.Slot s, Session.Client c)
{ {
parent.Get<LabelWidget>("SPAWN").GetText = () => (c.SpawnPoint == 0) ? "-" : Convert.ToChar('A' - 1 + c.SpawnPoint).ToString(); parent.Get<LabelWidget>("SPAWN").GetText = () => (c.SpawnPoint == 0) ? "-" : Convert.ToChar('A' - 1 + c.SpawnPoint).ToString();
HideChildWidget(parent, "SPAWN_DROPDOWN");
} }
public static void SetupEditableReadyWidget(Widget parent, Session.Slot s, Session.Client c, OrderManager orderManager, MapPreview map) public static void SetupEditableReadyWidget(Widget parent, Session.Slot s, Session.Client c, OrderManager orderManager, MapPreview map)

View File

@@ -129,12 +129,12 @@ Container@LOBBY_PLAYER_BIN:
Width: 60 Width: 60
Height: 25 Height: 25
Text: Faction Text: Faction
DropDownButton@TEAM: DropDownButton@TEAM_DROPDOWN:
X: 416 X: 416
Width: 50 Width: 50
Height: 25 Height: 25
Font: Regular Font: Regular
DropDownButton@SPAWN: DropDownButton@SPAWN_DROPDOWN:
X: 471 X: 471
Width: 50 Width: 50
Height: 25 Height: 25
@@ -226,6 +226,18 @@ Container@LOBBY_PLAYER_BIN:
Width: 25 Width: 25
Height: 25 Height: 25
Align: Center Align: Center
DropDownButton@TEAM_DROPDOWN:
X: 416
Width: 50
Height: 25
Font: Regular
Visible: false
DropDownButton@SPAWN_DROPDOWN:
X: 471
Width: 50
Height: 25
Font: Regular
Visible: false
Image@STATUS_IMAGE: Image@STATUS_IMAGE:
X: 527 X: 527
Y: 4 Y: 4

View File

@@ -125,12 +125,12 @@ Container@LOBBY_PLAYER_BIN:
Width: 60 Width: 60
Height: 25 Height: 25
Text: Faction Text: Faction
DropDownButton@TEAM: DropDownButton@TEAM_DROPDOWN:
X: 410 X: 410
Width: 48 Width: 48
Height: 25 Height: 25
Text: Team Text: Team
DropDownButton@SPAWN: DropDownButton@SPAWN_DROPDOWN:
X: 468 X: 468
Width: 48 Width: 48
Height: 25 Height: 25
@@ -220,6 +220,16 @@ Container@LOBBY_PLAYER_BIN:
Width: 23 Width: 23
Height: 25 Height: 25
Align: Center Align: Center
DropDownButton@TEAM_DROPDOWN:
X: 410
Width: 48
Height: 25
Visible: false
DropDownButton@SPAWN_DROPDOWN:
X: 468
Width: 48
Height: 25
Visible: false
Image@STATUS_IMAGE: Image@STATUS_IMAGE:
X: 527 X: 527
Y: 4 Y: 4

View File

@@ -125,12 +125,12 @@ Container@LOBBY_PLAYER_BIN:
Width: 70 Width: 70
Height: 25 Height: 25
Text: Faction Text: Faction
DropDownButton@TEAM: DropDownButton@TEAM_DROPDOWN:
X: 410 X: 410
Width: 48 Width: 48
Height: 25 Height: 25
Text: Team Text: Team
DropDownButton@SPAWN: DropDownButton@SPAWN_DROPDOWN:
X: 468 X: 468
Width: 48 Width: 48
Height: 25 Height: 25
@@ -220,6 +220,16 @@ Container@LOBBY_PLAYER_BIN:
Width: 23 Width: 23
Height: 25 Height: 25
Align: Center Align: Center
DropDownButton@TEAM_DROPDOWN:
X: 410
Width: 48
Height: 25
Visible: false
DropDownButton@SPAWN_DROPDOWN:
X: 468
Width: 48
Height: 25
Visible: false
Image@STATUS_IMAGE: Image@STATUS_IMAGE:
X: 527 X: 527
Y: 4 Y: 4