Merge remote-tracking branch 'tuc/simplepause'

This commit is contained in:
Chris Forbes
2012-06-10 16:35:41 +12:00
8 changed files with 48 additions and 8 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;
@@ -188,6 +188,8 @@ namespace OpenRA
else else
if (orderManager.NetFrameNumber == 0) if (orderManager.NetFrameNumber == 0)
orderManager.LastTickTime = Environment.TickCount; orderManager.LastTickTime = Environment.TickCount;
viewport.Tick();
} }
} }
} }

View File

@@ -199,7 +199,18 @@ 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

@@ -94,6 +94,19 @@ namespace OpenRA.Network
Game.StartGame(orderManager.LobbyInfo.GlobalSettings.Map, false); Game.StartGame(orderManager.LobbyInfo.GlobalSettings.Map, false);
break; break;
} }
case "PauseGame":
{
var client = orderManager.LobbyInfo.ClientWithIndex(clientId);
if(client != null)
{
orderManager.GamePaused = !orderManager.GamePaused;
var pausetext = "The game is {0} by {1}".F( orderManager.GamePaused ? "paused" : "un-paused", client.Name );
Game.AddChatLine(Color.White, "", pausetext);
}
break;
}
case "HandshakeRequest": case "HandshakeRequest":
{ {

View File

@@ -348,6 +348,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":
@@ -363,17 +366,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

@@ -16,11 +16,11 @@ namespace OpenRA.Widgets
{ {
public override void Draw() public override void Draw()
{ {
var s = WidgetUtils.FormatTime(Game.LocalTick);
var font = Game.Renderer.Fonts["Title"]; var font = Game.Renderer.Fonts["Title"];
var rb = RenderBounds; var rb = RenderBounds;
var s = WidgetUtils.FormatTime(Game.LocalTick) + (Game.orderManager.GamePaused?" (paused)":"");
var pos = new float2(rb.Left - font.Measure(s).X / 2, rb.Top); var pos = new float2(rb.Left - font.Measure(s).X / 2, rb.Top);
font.DrawTextWithContrast(s, pos, Color.White, Color.Black, 1); font.DrawTextWithContrast(s, pos, Color.White, Color.Black, 1);
} }
} }

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" || e.KeyName == "f3")
{
world.IssueOrder(Order.PauseRequest());
}
bool handled = false; bool handled = false;

View File

@@ -183,7 +183,7 @@ namespace OpenRA
while (frameEndActions.Count != 0) while (frameEndActions.Count != 0)
frameEndActions.Dequeue()(this); frameEndActions.Dequeue()(this);
Game.viewport.Tick();
} }
public IEnumerable<Actor> Actors { get { return actors; } } public IEnumerable<Actor> Actors { get { return actors; } }