startgame order and lobby changes

This commit is contained in:
alzeih
2010-07-25 21:31:17 +12:00
parent 4650642311
commit 26b5fbe9bb
4 changed files with 35 additions and 10 deletions

View File

@@ -240,11 +240,13 @@ namespace OpenRA.Server
conn.socket.RemoteEndPoint, client.State); conn.socket.RemoteEndPoint, client.State);
SyncLobbyInfo(); SyncLobbyInfo();
return true;
// start the game if everyone is ready. }},
{ "startgame",
s =>
{
if (conns.Count > 0 && conns.All(c => GetClient(c).State == Session.ClientState.Ready)) if (conns.Count > 0 && conns.All(c => GetClient(c).State == Session.ClientState.Ready))
{ {
Console.WriteLine("All players are ready. Starting the game!");
GameStarted = true; GameStarted = true;
foreach( var c in conns ) foreach( var c in conns )
foreach( var d in conns ) foreach( var d in conns )
@@ -255,7 +257,6 @@ namespace OpenRA.Server
PingMasterServer(); PingMasterServer();
} }
return true; return true;
}}, }},
{ "name", { "name",
@@ -396,7 +397,7 @@ namespace OpenRA.Server
{ {
if(GameStarted) if(GameStarted)
SendChatTo(conn, "Cannot change state when game started."); SendChatTo(conn, "Cannot change state when game started.");
else if (GetClient(conn).State == Session.ClientState.Ready && so.Data != "ready") else if (GetClient(conn).State == Session.ClientState.Ready && !(so.Data == "ready" || so.Data == "startgame") )
SendChatTo(conn, "Cannot change state when marked as ready."); SendChatTo(conn, "Cannot change state when marked as ready.");
else if (!InterpretCommand(conn, so.Data)) else if (!InterpretCommand(conn, so.Data))
{ {

View File

@@ -84,6 +84,15 @@ namespace OpenRA.Widgets.Delegates
return true; 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<CheckboxWidget>("LOCKTEAMS_CHECKBOX"); var lockTeamsCheckbox = lobby.GetWidget<CheckboxWidget>("LOCKTEAMS_CHECKBOX");
lockTeamsCheckbox.IsVisible = () => true; lockTeamsCheckbox.IsVisible = () => true;
lockTeamsCheckbox.Checked = () => Game.LobbyInfo.GlobalSettings.LockTeams; lockTeamsCheckbox.Checked = () => Game.LobbyInfo.GlobalSettings.LockTeams;
@@ -347,9 +356,6 @@ namespace OpenRA.Widgets.Delegates
bool CycleReady(MouseInput mi) bool CycleReady(MouseInput mi)
{ {
//HACK: Can't set this as part of the fuction as LocalClient/State not initalised yet
Widget.RootWidget.GetWidget("SERVER_LOBBY").GetWidget<ButtonWidget>("CHANGEMAP_BUTTON").Visible
= (Game.IsHost && Game.LocalClient.State == Session.ClientState.Ready);
Game.IssueOrder(Order.Command("ready")); Game.IssueOrder(Order.Command("ready"));
return true; return true;
} }

View File

@@ -234,10 +234,19 @@ Container@ROOT:
Y:PARENT_BOTTOM - 74 Y:PARENT_BOTTOM - 74
Width:710 Width:710
Height:25 Height:25
Button@START_GAME_BUTTON:
Id:START_GAME_BUTTON
Visible:true
X:PARENT_RIGHT-140
Y:PARENT_BOTTOM-43
Width:120
Height:25
Text:Start Game
Bold:True
Button@DISCONNECT_BUTTON: Button@DISCONNECT_BUTTON:
Id:DISCONNECT_BUTTON Id:DISCONNECT_BUTTON
Visible:true Visible:true
X:PARENT_RIGHT-140 X:20
Y:PARENT_BOTTOM-43 Y:PARENT_BOTTOM-43
Width:120 Width:120
Height:25 Height:25

View File

@@ -234,10 +234,19 @@ Container@ROOT:
Y:PARENT_BOTTOM - 74 Y:PARENT_BOTTOM - 74
Width:710 Width:710
Height:25 Height:25
Button@START_GAME_BUTTON:
Id:START_GAME_BUTTON
Visible:true
X:PARENT_RIGHT-140
Y:PARENT_BOTTOM-43
Width:120
Height:25
Text:Start Game
Bold:True
Button@DISCONNECT_BUTTON: Button@DISCONNECT_BUTTON:
Id:DISCONNECT_BUTTON Id:DISCONNECT_BUTTON
Visible:true Visible:true
X:PARENT_RIGHT-140 X:20
Y:PARENT_BOTTOM-43 Y:PARENT_BOTTOM-43
Width:120 Width:120
Height:25 Height:25