Pause the game option.

Game is paused when PAUSE on the keyboard has been hit. It can also be unpaused this way.
This commit is contained in:
Remco van der Zon
2012-05-16 17:35:10 +02:00
parent b99e664726
commit a07697be03
6 changed files with 36 additions and 5 deletions

View File

@@ -166,7 +166,7 @@ namespace OpenRA
{ {
var isNetTick = LocalTick % NetTickScale == 0; var isNetTick = LocalTick % NetTickScale == 0;
if (!isNetTick || orderManager.IsReadyForNextFrame) if ((!isNetTick || orderManager.IsReadyForNextFrame) && !orderManager.GamePaused )
{ {
++orderManager.LocalFrameNumber; ++orderManager.LocalFrameNumber;

View File

@@ -200,6 +200,17 @@ namespace OpenRA
return new Order("HandshakeResponse", null, false) { IsImmediate = true, TargetString = text }; return new Order("HandshakeResponse", null, false) { IsImmediate = true, TargetString = text };
} }
public static Order PauseRequest()
{
return new Order("PauseRequest", null, false) { IsImmediate = true, TargetString="" }; //TODO: targetbool?
}
public static Order PauseGame()
{
return new Order("PauseGame", null, false) { IsImmediate = true, TargetString=""}; //TODO: targetbool?
}
public static Order Command(string text) public static Order Command(string text)
{ {
return new Order("Command", null, false) { IsImmediate = true, TargetString = text }; return new Order("Command", null, false) { IsImmediate = true, TargetString = text };

View File

@@ -36,6 +36,7 @@ namespace OpenRA.Network
public int LastTickTime = Environment.TickCount; public int LastTickTime = Environment.TickCount;
public bool GameStarted { get { return NetFrameNumber != 0; } } public bool GameStarted { get { return NetFrameNumber != 0; } }
public bool GamePaused {get; set;}
public IConnection Connection { get; private set; } public IConnection Connection { get; private set; }
public readonly int SyncHeaderSize = 9; public readonly int SyncHeaderSize = 9;

View File

@@ -95,6 +95,12 @@ namespace OpenRA.Network
break; break;
} }
case "PauseGame":
{
orderManager.GamePaused = !orderManager.GamePaused;
break;
}
case "HandshakeRequest": case "HandshakeRequest":
{ {
var request = HandshakeRequest.Deserialize(order.TargetString); var request = HandshakeRequest.Deserialize(order.TargetString);

View File

@@ -332,6 +332,9 @@ namespace OpenRA.Server
void InterpretServerOrder(Connection conn, ServerOrder so) void InterpretServerOrder(Connection conn, ServerOrder so)
{ {
var fromClient = GetClient(conn);
var fromIndex = fromClient != null ? fromClient.Index : 0;
switch (so.Name) switch (so.Name)
{ {
case "Command": case "Command":
@@ -347,17 +350,23 @@ namespace OpenRA.Server
} }
break; break;
case "HandshakeResponse": case "HandshakeResponse":
ValidateClient(conn, so.Data); ValidateClient(conn, so.Data);
break; break;
case "Chat": case "Chat":
case "TeamChat": case "TeamChat":
var fromClient = GetClient(conn);
var fromIndex = fromClient != null ? fromClient.Index : 0;
foreach (var c in conns.Except(conn).ToArray()) foreach (var c in conns.Except(conn).ToArray())
DispatchOrdersToClient(c, fromIndex, 0, so.Serialize()); DispatchOrdersToClient(c, fromIndex, 0, so.Serialize());
break; break;
case "PauseRequest":
foreach (var c in conns.ToArray())
{ var x = Order.PauseGame();
DispatchOrdersToClient(c, fromIndex, 0, x.Serialize());
}
break;
} }
} }

View File

@@ -148,6 +148,10 @@ namespace OpenRA.Widgets
world.Selection.DoControlGroup(world, e.KeyName[0] - '0', e.Modifiers); world.Selection.DoControlGroup(world, e.KeyName[0] - '0', e.Modifiers);
return true; return true;
} }
else if(e.KeyName == "pause")
{
world.IssueOrder(Order.PauseRequest());
}
bool handled = false; bool handled = false;