Disable controls instead of hiding when ready. Fixes #889
This commit is contained in:
@@ -174,20 +174,22 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
|
|||||||
|
|
||||||
var disconnectButton = lobby.GetWidget<ButtonWidget>("DISCONNECT_BUTTON");
|
var disconnectButton = lobby.GetWidget<ButtonWidget>("DISCONNECT_BUTTON");
|
||||||
disconnectButton.OnClick = () => { CloseWindow(); onExit(); };
|
disconnectButton.OnClick = () => { CloseWindow(); onExit(); };
|
||||||
|
|
||||||
var gameStarting = false;
|
var gameStarting = false;
|
||||||
var lockTeamsCheckbox = lobby.GetWidget<CheckboxWidget>("LOCKTEAMS_CHECKBOX");
|
var lockTeamsCheckbox = lobby.GetWidget<CheckboxWidget>("LOCKTEAMS_CHECKBOX");
|
||||||
lockTeamsCheckbox.IsChecked = () => orderManager.LobbyInfo.GlobalSettings.LockTeams;
|
lockTeamsCheckbox.IsChecked = () => orderManager.LobbyInfo.GlobalSettings.LockTeams;
|
||||||
lockTeamsCheckbox.IsDisabled = () => !Game.IsHost || gameStarting;
|
lockTeamsCheckbox.IsDisabled = () => !Game.IsHost || gameStarting || orderManager.LocalClient == null
|
||||||
|
|| orderManager.LocalClient.State == Session.ClientState.Ready;
|
||||||
lockTeamsCheckbox.OnClick = () => orderManager.IssueOrder(Order.Command(
|
lockTeamsCheckbox.OnClick = () => orderManager.IssueOrder(Order.Command(
|
||||||
"lockteams {0}".F(!orderManager.LobbyInfo.GlobalSettings.LockTeams)));
|
"lockteams {0}".F(!orderManager.LobbyInfo.GlobalSettings.LockTeams)));
|
||||||
|
|
||||||
var allowCheats = lobby.GetWidget<CheckboxWidget>("ALLOWCHEATS_CHECKBOX");
|
var allowCheats = lobby.GetWidget<CheckboxWidget>("ALLOWCHEATS_CHECKBOX");
|
||||||
allowCheats.IsChecked = () => orderManager.LobbyInfo.GlobalSettings.AllowCheats;
|
allowCheats.IsChecked = () => orderManager.LobbyInfo.GlobalSettings.AllowCheats;
|
||||||
allowCheats.IsDisabled = () => !Game.IsHost || gameStarting;
|
allowCheats.IsDisabled = () => !Game.IsHost || gameStarting || orderManager.LocalClient == null
|
||||||
|
|| orderManager.LocalClient.State == Session.ClientState.Ready;
|
||||||
allowCheats.OnClick = () => orderManager.IssueOrder(Order.Command(
|
allowCheats.OnClick = () => orderManager.IssueOrder(Order.Command(
|
||||||
"allowcheats {0}".F(!orderManager.LobbyInfo.GlobalSettings.AllowCheats)));
|
"allowcheats {0}".F(!orderManager.LobbyInfo.GlobalSettings.AllowCheats)));
|
||||||
|
|
||||||
var startGameButton = lobby.GetWidget<ButtonWidget>("START_GAME_BUTTON");
|
var startGameButton = lobby.GetWidget<ButtonWidget>("START_GAME_BUTTON");
|
||||||
startGameButton.IsVisible = () => Game.IsHost;
|
startGameButton.IsVisible = () => Game.IsHost;
|
||||||
startGameButton.IsDisabled = () => gameStarting;
|
startGameButton.IsDisabled = () => gameStarting;
|
||||||
@@ -196,7 +198,7 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
|
|||||||
gameStarting = true;
|
gameStarting = true;
|
||||||
orderManager.IssueOrder(Order.Command("startgame"));
|
orderManager.IssueOrder(Order.Command("startgame"));
|
||||||
};
|
};
|
||||||
|
|
||||||
bool teamChat = false;
|
bool teamChat = false;
|
||||||
var chatLabel = lobby.GetWidget<LabelWidget>("LABEL_CHATTYPE");
|
var chatLabel = lobby.GetWidget<LabelWidget>("LABEL_CHATTYPE");
|
||||||
var chatTextField = lobby.GetWidget<TextFieldWidget>("CHAT_TEXTFIELD");
|
var chatTextField = lobby.GetWidget<TextFieldWidget>("CHAT_TEXTFIELD");
|
||||||
@@ -424,11 +426,13 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
|
|||||||
{
|
{
|
||||||
template = EmptySlotTemplate.Clone();
|
template = EmptySlotTemplate.Clone();
|
||||||
Func<string> getText = () => slot.Closed ? "Closed" : "Open";
|
Func<string> getText = () => slot.Closed ? "Closed" : "Open";
|
||||||
|
var ready = orderManager.LocalClient.State == Session.ClientState.Ready;
|
||||||
|
|
||||||
if (Game.IsHost)
|
if (Game.IsHost)
|
||||||
{
|
{
|
||||||
var name = template.GetWidget<DropDownButtonWidget>("NAME_HOST");
|
var name = template.GetWidget<DropDownButtonWidget>("NAME_HOST");
|
||||||
name.IsVisible = () => true;
|
name.IsVisible = () => true;
|
||||||
|
name.IsDisabled = () => ready;
|
||||||
name.GetText = getText;
|
name.GetText = getText;
|
||||||
name.OnMouseDown = _ => ShowSlotDropDown(name, slot, client);
|
name.OnMouseDown = _ => ShowSlotDropDown(name, slot, client);
|
||||||
}
|
}
|
||||||
@@ -440,28 +444,32 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
|
|||||||
}
|
}
|
||||||
|
|
||||||
var join = template.GetWidget<ButtonWidget>("JOIN");
|
var join = template.GetWidget<ButtonWidget>("JOIN");
|
||||||
if (join != null)
|
join.IsVisible = () => !slot.Closed;
|
||||||
{
|
join.IsDisabled = () => ready;
|
||||||
join.OnMouseUp = _ => { orderManager.IssueOrder(Order.Command("slot " + key)); return true; };
|
join.OnClick = () => orderManager.IssueOrder(Order.Command("slot " + key));
|
||||||
join.IsVisible = () => !slot.Closed && orderManager.LocalClient.State != Session.ClientState.Ready;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// Editable player in slot
|
// Editable player in slot
|
||||||
else if ((client.Index == orderManager.LocalClient.Index && client.State != Session.ClientState.Ready) ||
|
else if ((client.Index == orderManager.LocalClient.Index) ||
|
||||||
(client.Bot != null && Game.IsHost))
|
(client.Bot != null && Game.IsHost))
|
||||||
{
|
{
|
||||||
template = EditablePlayerTemplate.Clone();
|
template = EditablePlayerTemplate.Clone();
|
||||||
|
var botReady = (client.Bot != null && Game.IsHost
|
||||||
|
&& orderManager.LocalClient.State == Session.ClientState.Ready);
|
||||||
|
var ready = botReady || client.State == Session.ClientState.Ready;
|
||||||
|
|
||||||
if (client.Bot != null)
|
if (client.Bot != null)
|
||||||
{
|
{
|
||||||
var name = template.GetWidget<DropDownButtonWidget>("BOT_DROPDOWN");
|
var name = template.GetWidget<DropDownButtonWidget>("BOT_DROPDOWN");
|
||||||
name.IsVisible = () => true;
|
name.IsVisible = () => true;
|
||||||
|
name.IsDisabled = () => ready;
|
||||||
name.GetText = () => client.Name;
|
name.GetText = () => client.Name;
|
||||||
name.OnMouseDown = _ => ShowSlotDropDown(name, slot, client);
|
name.OnMouseDown = _ => name.IsDisabled() ? true : ShowSlotDropDown(name, slot, client);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var name = template.GetWidget<TextFieldWidget>("NAME");
|
var name = template.GetWidget<TextFieldWidget>("NAME");
|
||||||
name.IsVisible = () => true;
|
name.IsVisible = () => true;
|
||||||
|
name.IsDisabled = () => ready;
|
||||||
name.Text = client.Name;
|
name.Text = client.Name;
|
||||||
name.OnEnterKey = () =>
|
name.OnEnterKey = () =>
|
||||||
{
|
{
|
||||||
@@ -482,15 +490,15 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
|
|||||||
}
|
}
|
||||||
|
|
||||||
var color = template.GetWidget<DropDownButtonWidget>("COLOR");
|
var color = template.GetWidget<DropDownButtonWidget>("COLOR");
|
||||||
color.IsDisabled = () => slot.LockColor;
|
color.IsDisabled = () => slot.LockColor || ready;
|
||||||
color.OnMouseDown = _ => { if (slot.LockColor) return true; return ShowColorDropDown(color, client); };
|
color.OnMouseDown = _ => color.IsDisabled() ? true : ShowColorDropDown(color, client);
|
||||||
|
|
||||||
var colorBlock = color.GetWidget<ColorBlockWidget>("COLORBLOCK");
|
var colorBlock = color.GetWidget<ColorBlockWidget>("COLORBLOCK");
|
||||||
colorBlock.GetColor = () => client.ColorRamp.GetColor(0);
|
colorBlock.GetColor = () => client.ColorRamp.GetColor(0);
|
||||||
|
|
||||||
var faction = template.GetWidget<DropDownButtonWidget>("FACTION");
|
var faction = template.GetWidget<DropDownButtonWidget>("FACTION");
|
||||||
faction.IsDisabled = () => slot.LockRace;
|
faction.IsDisabled = () => slot.LockRace || ready;
|
||||||
faction.OnMouseDown = _ => { if (slot.LockRace) return true; return ShowRaceDropDown(faction, client); };
|
faction.OnMouseDown = _ => faction.IsDisabled() ? true : ShowRaceDropDown(faction, client);
|
||||||
|
|
||||||
var factionname = faction.GetWidget<LabelWidget>("FACTIONNAME");
|
var factionname = faction.GetWidget<LabelWidget>("FACTIONNAME");
|
||||||
factionname.GetText = () => CountryNames[client.Country];
|
factionname.GetText = () => CountryNames[client.Country];
|
||||||
@@ -499,20 +507,20 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
|
|||||||
factionflag.GetImageCollection = () => "flags";
|
factionflag.GetImageCollection = () => "flags";
|
||||||
|
|
||||||
var team = template.GetWidget<DropDownButtonWidget>("TEAM");
|
var team = template.GetWidget<DropDownButtonWidget>("TEAM");
|
||||||
team.IsDisabled = () => slot.LockTeam || client.Bot != null;
|
team.IsDisabled = () => slot.LockTeam || ready || client.Bot != null;
|
||||||
team.OnMouseDown = _ => { if (team.IsDisabled()) return true; return ShowTeamDropDown(team, client); };
|
team.OnMouseDown = _ => team.IsDisabled() ? true : ShowTeamDropDown(team, client);
|
||||||
team.GetText = () => (client.Team == 0) ? "-" : client.Team.ToString();
|
team.GetText = () => (client.Team == 0) ? "-" : client.Team.ToString();
|
||||||
|
|
||||||
var spawn = template.GetWidget<DropDownButtonWidget>("SPAWN");
|
var spawn = template.GetWidget<DropDownButtonWidget>("SPAWN");
|
||||||
spawn.IsDisabled = () => slot.LockSpawn;
|
spawn.IsDisabled = () => slot.LockSpawn || ready;
|
||||||
spawn.OnMouseDown = _ => { if (spawn.IsDisabled()) return true; return ShowSpawnDropDown(spawn, client); };
|
spawn.OnMouseDown = _ => spawn.IsDisabled() ? true : ShowSpawnDropDown(spawn, client);
|
||||||
spawn.GetText = () => (client.SpawnPoint == 0) ? "-" : client.SpawnPoint.ToString();
|
spawn.GetText = () => (client.SpawnPoint == 0) ? "-" : client.SpawnPoint.ToString();
|
||||||
|
|
||||||
if (client.Bot == null)
|
if (client.Bot == null)
|
||||||
{
|
{
|
||||||
// local player
|
// local player
|
||||||
var status = template.GetWidget<CheckboxWidget>("STATUS_CHECKBOX");
|
var status = template.GetWidget<CheckboxWidget>("STATUS_CHECKBOX");
|
||||||
status.IsChecked = () => client.State == Session.ClientState.Ready;
|
status.IsChecked = () => ready;
|
||||||
status.IsVisible = () => true;
|
status.IsVisible = () => true;
|
||||||
status.OnClick += CycleReady;
|
status.OnClick += CycleReady;
|
||||||
}
|
}
|
||||||
@@ -540,25 +548,13 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
|
|||||||
var spawn = template.GetWidget<LabelWidget>("SPAWN");
|
var spawn = template.GetWidget<LabelWidget>("SPAWN");
|
||||||
spawn.GetText = () => (client.SpawnPoint == 0) ? "-" : client.SpawnPoint.ToString();
|
spawn.GetText = () => (client.SpawnPoint == 0) ? "-" : client.SpawnPoint.ToString();
|
||||||
|
|
||||||
if (client.Index == orderManager.LocalClient.Index)
|
template.GetWidget<ImageWidget>("STATUS_IMAGE").IsVisible = () =>
|
||||||
{
|
client.Bot != null || client.State == Session.ClientState.Ready;
|
||||||
// "Ready" local player -> status still needs to be editable
|
|
||||||
var status = template.GetWidget<CheckboxWidget>("STATUS_CHECKBOX");
|
|
||||||
status.IsChecked = () => client.State == Session.ClientState.Ready;
|
|
||||||
status.IsVisible = () => true;
|
|
||||||
status.OnClick += CycleReady;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
template.GetWidget<ImageWidget>("STATUS_IMAGE").IsVisible = () =>
|
|
||||||
client.Bot != null || client.State == Session.ClientState.Ready;
|
|
||||||
|
|
||||||
var kickButton = template.GetWidget<ButtonWidget>("KICK");
|
var kickButton = template.GetWidget<ButtonWidget>("KICK");
|
||||||
kickButton.IsVisible = () => Game.IsHost && client.Index != orderManager.LocalClient.Index;
|
kickButton.IsVisible = () => Game.IsHost && client.Index != orderManager.LocalClient.Index;
|
||||||
kickButton.OnMouseUp = mi =>
|
kickButton.IsDisabled = () => orderManager.LocalClient.State == Session.ClientState.Ready;
|
||||||
{
|
kickButton.OnClick = () => orderManager.IssueOrder(Order.Command("kick " + client.Index));
|
||||||
orderManager.IssueOrder(Order.Command("kick " + client.Index));
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template.IsVisible = () => true;
|
template.IsVisible = () => true;
|
||||||
@@ -569,11 +565,13 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
|
|||||||
foreach (var client in orderManager.LobbyInfo.Clients.Where(client => client.Slot == null))
|
foreach (var client in orderManager.LobbyInfo.Clients.Where(client => client.Slot == null))
|
||||||
{
|
{
|
||||||
Widget template;
|
Widget template;
|
||||||
|
var ready = client.State == Session.ClientState.Ready;
|
||||||
// Editable spectator
|
// Editable spectator
|
||||||
if (client.Index == orderManager.LocalClient.Index && client.State != Session.ClientState.Ready)
|
if (client.Index == orderManager.LocalClient.Index)
|
||||||
{
|
{
|
||||||
template = EditableSpectatorTemplate.Clone();
|
template = EditableSpectatorTemplate.Clone();
|
||||||
var name = template.GetWidget<TextFieldWidget>("NAME");
|
var name = template.GetWidget<TextFieldWidget>("NAME");
|
||||||
|
name.IsDisabled = () => ready;
|
||||||
name.Text = client.Name;
|
name.Text = client.Name;
|
||||||
name.OnEnterKey = () =>
|
name.OnEnterKey = () =>
|
||||||
{
|
{
|
||||||
@@ -593,13 +591,14 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
|
|||||||
name.OnLoseFocus = () => name.OnEnterKey();
|
name.OnLoseFocus = () => name.OnEnterKey();
|
||||||
|
|
||||||
var color = template.GetWidget<DropDownButtonWidget>("COLOR");
|
var color = template.GetWidget<DropDownButtonWidget>("COLOR");
|
||||||
color.OnMouseDown = _ => ShowColorDropDown(color, client);
|
color.IsDisabled = () => ready;
|
||||||
|
color.OnMouseDown = _ => color.IsDisabled() ? true : ShowColorDropDown(color, client);
|
||||||
|
|
||||||
var colorBlock = color.GetWidget<ColorBlockWidget>("COLORBLOCK");
|
var colorBlock = color.GetWidget<ColorBlockWidget>("COLORBLOCK");
|
||||||
colorBlock.GetColor = () => client.ColorRamp.GetColor(0);
|
colorBlock.GetColor = () => client.ColorRamp.GetColor(0);
|
||||||
|
|
||||||
var status = template.GetWidget<CheckboxWidget>("STATUS_CHECKBOX");
|
var status = template.GetWidget<CheckboxWidget>("STATUS_CHECKBOX");
|
||||||
status.IsChecked = () => client.State == Session.ClientState.Ready;
|
status.IsChecked = () => ready;
|
||||||
status.OnClick += CycleReady;
|
status.OnClick += CycleReady;
|
||||||
}
|
}
|
||||||
// Non-editable spectator
|
// Non-editable spectator
|
||||||
@@ -610,25 +609,13 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
|
|||||||
var color = template.GetWidget<ColorBlockWidget>("COLOR");
|
var color = template.GetWidget<ColorBlockWidget>("COLOR");
|
||||||
color.GetColor = () => client.ColorRamp.GetColor(0);
|
color.GetColor = () => client.ColorRamp.GetColor(0);
|
||||||
|
|
||||||
if (client.Index == orderManager.LocalClient.Index)
|
template.GetWidget<ImageWidget>("STATUS_IMAGE").IsVisible = () =>
|
||||||
{
|
client.Bot != null || client.State == Session.ClientState.Ready;
|
||||||
// "Ready" local player -> status still needs to be editable
|
|
||||||
var status = template.GetWidget<CheckboxWidget>("STATUS_CHECKBOX");
|
|
||||||
status.IsChecked = () => client.State == Session.ClientState.Ready;
|
|
||||||
status.IsVisible = () => true;
|
|
||||||
status.OnClick += CycleReady;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
template.GetWidget<ImageWidget>("STATUS_IMAGE").IsVisible = () =>
|
|
||||||
client.Bot != null || client.State == Session.ClientState.Ready;
|
|
||||||
|
|
||||||
var kickButton = template.GetWidget<ButtonWidget>("KICK");
|
var kickButton = template.GetWidget<ButtonWidget>("KICK");
|
||||||
kickButton.IsVisible = () => Game.IsHost && client.Index != orderManager.LocalClient.Index;
|
kickButton.IsVisible = () => Game.IsHost && client.Index != orderManager.LocalClient.Index;
|
||||||
kickButton.OnMouseUp = mi =>
|
kickButton.IsDisabled = () => orderManager.LocalClient.State == Session.ClientState.Ready;
|
||||||
{
|
kickButton.OnClick = () => orderManager.IssueOrder(Order.Command("kick " + client.Index));
|
||||||
orderManager.IssueOrder(Order.Command("kick " + client.Index));
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template.IsVisible = () => true;
|
template.IsVisible = () => true;
|
||||||
@@ -636,11 +623,12 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Spectate button
|
// Spectate button
|
||||||
if (orderManager.LocalClient.Slot != null && orderManager.LocalClient.State != Session.ClientState.Ready)
|
if (orderManager.LocalClient.Slot != null)
|
||||||
{
|
{
|
||||||
var spec = NewSpectatorTemplate.Clone();
|
var spec = NewSpectatorTemplate.Clone();
|
||||||
var btn = spec.GetWidget<ButtonWidget>("SPECTATE");
|
var btn = spec.GetWidget<ButtonWidget>("SPECTATE");
|
||||||
btn.OnMouseUp = _ => { orderManager.IssueOrder(Order.Command("spectate")); return true; };
|
btn.OnClick = () => orderManager.IssueOrder(Order.Command("spectate"));
|
||||||
|
btn.IsDisabled = () => orderManager.LocalClient.State == Session.ClientState.Ready;
|
||||||
spec.IsVisible = () => true;
|
spec.IsVisible = () => true;
|
||||||
Players.AddChild(spec);
|
Players.AddChild(spec);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -208,13 +208,6 @@ Container@SERVER_LOBBY:
|
|||||||
Height:20
|
Height:20
|
||||||
ImageCollection:checkbox-bits
|
ImageCollection:checkbox-bits
|
||||||
ImageName:checked
|
ImageName:checked
|
||||||
Checkbox@STATUS_CHECKBOX:
|
|
||||||
Id:STATUS_CHECKBOX
|
|
||||||
Visible:false
|
|
||||||
X:448
|
|
||||||
Y:2
|
|
||||||
Width:20
|
|
||||||
Height:20
|
|
||||||
Container@TEMPLATE_EMPTY:
|
Container@TEMPLATE_EMPTY:
|
||||||
Id:TEMPLATE_EMPTY
|
Id:TEMPLATE_EMPTY
|
||||||
X:5
|
X:5
|
||||||
@@ -333,13 +326,6 @@ Container@SERVER_LOBBY:
|
|||||||
Height:20
|
Height:20
|
||||||
ImageCollection:checkbox-bits
|
ImageCollection:checkbox-bits
|
||||||
ImageName:checked
|
ImageName:checked
|
||||||
Checkbox@STATUS_CHECKBOX:
|
|
||||||
Id:STATUS_CHECKBOX
|
|
||||||
Visible:false
|
|
||||||
X:448
|
|
||||||
Y:2
|
|
||||||
Width:20
|
|
||||||
Height:20
|
|
||||||
Container@TEMPLATE_NEW_SPECTATOR:
|
Container@TEMPLATE_NEW_SPECTATOR:
|
||||||
Id:TEMPLATE_NEW_SPECTATOR
|
Id:TEMPLATE_NEW_SPECTATOR
|
||||||
X:5
|
X:5
|
||||||
|
|||||||
Reference in New Issue
Block a user