diff --git a/OpenRA.Game/Server/Server.cs b/OpenRA.Game/Server/Server.cs index efb41acf81..451ccfe387 100644 --- a/OpenRA.Game/Server/Server.cs +++ b/OpenRA.Game/Server/Server.cs @@ -240,23 +240,24 @@ namespace OpenRA.Server conn.socket.RemoteEndPoint, client.State); SyncLobbyInfo(); + + if (conns.Count > 0 && conns.All(c => GetClient(c).State == Session.ClientState.Ready)) + InterpretCommand(conn, "startgame"); + return true; }}, { "startgame", s => { - if (conns.Count > 0 && conns.All(c => GetClient(c).State == Session.ClientState.Ready)) - { - GameStarted = true; - foreach( var c in conns ) - foreach( var d in conns ) - DispatchOrdersToClient( c, d.PlayerIndex, 0x7FFFFFFF, new byte[] { 0xBF } ); + GameStarted = true; + foreach( var c in conns ) + foreach( var d in conns ) + DispatchOrdersToClient( c, d.PlayerIndex, 0x7FFFFFFF, new byte[] { 0xBF } ); - DispatchOrders(null, 0, - new ServerOrder("StartGame", "").Serialize()); + DispatchOrders(null, 0, + new ServerOrder("StartGame", "").Serialize()); - PingMasterServer(); - } + PingMasterServer(); return true; }}, { "name", diff --git a/OpenRA.Game/Widgets/Delegates/ConnectionDialogsDelegate.cs b/OpenRA.Game/Widgets/Delegates/ConnectionDialogsDelegate.cs index bef03f0898..aedc5ec365 100644 --- a/OpenRA.Game/Widgets/Delegates/ConnectionDialogsDelegate.cs +++ b/OpenRA.Game/Widgets/Delegates/ConnectionDialogsDelegate.cs @@ -54,8 +54,13 @@ namespace OpenRA.Widgets.Delegates break; case ConnectionState.Connected: r.OpenWindow("SERVER_LOBBY"); - r.GetWidget("SERVER_LOBBY").GetWidget("CHAT_DISPLAY").ClearChat(); - r.GetWidget("INGAME_ROOT").GetWidget("CHAT_DISPLAY").ClearChat(); + + var lobby = r.GetWidget("SERVER_LOBBY"); + lobby.GetWidget("CHAT_DISPLAY").ClearChat(); + lobby.GetWidget("CHANGEMAP_BUTTON").Visible = true; + lobby.GetWidget("LOCKTEAMS_CHECKBOX").Visible = true; + lobby.GetWidget("DISCONNECT_BUTTON").Visible = true; + r.GetWidget("INGAME_ROOT").GetWidget("CHAT_DISPLAY").ClearChat(); break; } }; diff --git a/OpenRA.Game/Widgets/Delegates/LobbyDelegate.cs b/OpenRA.Game/Widgets/Delegates/LobbyDelegate.cs index 06f527e7fc..e3bd43dce1 100644 --- a/OpenRA.Game/Widgets/Delegates/LobbyDelegate.cs +++ b/OpenRA.Game/Widgets/Delegates/LobbyDelegate.cs @@ -83,18 +83,9 @@ namespace OpenRA.Widgets.Delegates Game.Disconnect(); return true; }; - - var startGameButton = lobby.GetWidget("START_GAME_BUTTON"); - startGameButton.OnMouseUp = mi => - { - mapButton.Visible = false; - Game.IssueOrder(Order.Command("startgame")); - return true; - }; - startGameButton.IsVisible = () => Game.IsHost && Game.LobbyInfo.Clients.All(c => c.State == Session.ClientState.Ready); var lockTeamsCheckbox = lobby.GetWidget("LOCKTEAMS_CHECKBOX"); - lockTeamsCheckbox.IsVisible = () => true; + lockTeamsCheckbox.IsVisible = () => lockTeamsCheckbox.Visible && true; lockTeamsCheckbox.Checked = () => Game.LobbyInfo.GlobalSettings.LockTeams; lockTeamsCheckbox.OnMouseDown = mi => { @@ -103,6 +94,18 @@ namespace OpenRA.Widgets.Delegates "lockteams {0}".F(!Game.LobbyInfo.GlobalSettings.LockTeams))); return true; }; + + var startGameButton = lobby.GetWidget("START_GAME_BUTTON"); + startGameButton.OnMouseUp = mi => + { + mapButton.Visible = false; + disconnectButton.Visible = false; + lockTeamsCheckbox.Visible = false; + Game.IssueOrder(Order.Command("startgame")); + return true; + }; + startGameButton.IsVisible = () => Game.IsHost; + Game.LobbyInfoChanged += JoinedServer; Game.LobbyInfoChanged += UpdatePlayerList; Game.AddChatLine += lobby.GetWidget("CHAT_DISPLAY").AddLine; diff --git a/mods/cnc/chrome/gamelobby.yaml b/mods/cnc/chrome/gamelobby.yaml index 5a6193d1a2..79b8808cdf 100644 --- a/mods/cnc/chrome/gamelobby.yaml +++ b/mods/cnc/chrome/gamelobby.yaml @@ -205,8 +205,8 @@ Container@ROOT: Button@CHANGEMAP_BUTTON: Id:CHANGEMAP_BUTTON Visible:true - X:PARENT_RIGHT-140 - Y:300 + X:PARENT_RIGHT-160 + Y:PARENT_BOTTOM-269 Width:120 Height:25 Text:Change Map @@ -215,30 +215,30 @@ Container@ROOT: Id:CHAT_DISPLAY Visible:true X:20 - Y:PARENT_BOTTOM - 269 - Width:PARENT_RIGHT - 40 - Height:190 Notification: beepy2.aud + Height:230 + Y:PARENT_BOTTOM - 289 + Width:PARENT_RIGHT - 200 Label@LABEL_CHATTYPE: Id:LABEL_CHATTYPE Width:65 Height:25 X:0 - Y:PARENT_BOTTOM - 75 + Y:PARENT_BOTTOM - 50 Text:Chat: Align:Right TextField@CHAT_TEXTFIELD: Id:CHAT_TEXTFIELD Visible:true X:70 - Y:PARENT_BOTTOM - 74 - Width:710 + Y:PARENT_BOTTOM - 49 + Width:550 Height:25 Button@START_GAME_BUTTON: Id:START_GAME_BUTTON Visible:true - X:PARENT_RIGHT-140 - Y:PARENT_BOTTOM-43 + X:PARENT_RIGHT-160 + Y:PARENT_BOTTOM-49 Width:120 Height:25 Text:Start Game @@ -246,8 +246,8 @@ Container@ROOT: Button@DISCONNECT_BUTTON: Id:DISCONNECT_BUTTON Visible:true - X:20 - Y:PARENT_BOTTOM-43 + X:PARENT_RIGHT-160 + Y:PARENT_BOTTOM-189 Width:120 Height:25 Text:Disconnect @@ -255,8 +255,8 @@ Container@ROOT: Checkbox@LOCKTEAMS_CHECKBOX: Id:LOCKTEAMS_CHECKBOX Visible: true - X: PARENT_RIGHT-300 - Y: PARENT_BOTTOM-38 + X: PARENT_RIGHT-160 + Y: PARENT_BOTTOM-229 Width: 80 Height: 20 Text: Lock Teams diff --git a/mods/ra/chrome/gamelobby.yaml b/mods/ra/chrome/gamelobby.yaml index eadeeefb4a..a7cdccc064 100644 --- a/mods/ra/chrome/gamelobby.yaml +++ b/mods/ra/chrome/gamelobby.yaml @@ -205,8 +205,8 @@ Container@ROOT: Button@CHANGEMAP_BUTTON: Id:CHANGEMAP_BUTTON Visible:true - X:PARENT_RIGHT-140 - Y:300 + X:PARENT_RIGHT-160 + Y:PARENT_BOTTOM-269 Width:120 Height:25 Text:Change Map @@ -215,30 +215,30 @@ Container@ROOT: Id:CHAT_DISPLAY Visible:true X:20 - Y:PARENT_BOTTOM - 269 - Width:PARENT_RIGHT - 40 - Height:190 + Height:230 + Y:PARENT_BOTTOM - 289 + Width:PARENT_RIGHT - 200 Notification: rabeep1.aud Label@LABEL_CHATTYPE: Id:LABEL_CHATTYPE Width:65 Height:25 X:0 - Y:PARENT_BOTTOM - 75 + Y:PARENT_BOTTOM - 50 Text:Chat: Align:Right TextField@CHAT_TEXTFIELD: Id:CHAT_TEXTFIELD Visible:true X:70 - Y:PARENT_BOTTOM - 74 - Width:710 + Y:PARENT_BOTTOM - 49 + Width:550 Height:25 Button@START_GAME_BUTTON: Id:START_GAME_BUTTON Visible:true - X:PARENT_RIGHT-140 - Y:PARENT_BOTTOM-43 + X:PARENT_RIGHT-160 + Y:PARENT_BOTTOM-49 Width:120 Height:25 Text:Start Game @@ -246,8 +246,8 @@ Container@ROOT: Button@DISCONNECT_BUTTON: Id:DISCONNECT_BUTTON Visible:true - X:20 - Y:PARENT_BOTTOM-43 + X:PARENT_RIGHT-160 + Y:PARENT_BOTTOM-189 Width:120 Height:25 Text:Disconnect @@ -255,8 +255,8 @@ Container@ROOT: Checkbox@LOCKTEAMS_CHECKBOX: Id:LOCKTEAMS_CHECKBOX Visible: true - X: PARENT_RIGHT-300 - Y: PARENT_BOTTOM-38 + X: PARENT_RIGHT-160 + Y: PARENT_BOTTOM-229 Width: 80 Height: 20 Text: Lock Teams