added ready/gamestart handling
This commit is contained in:
@@ -86,13 +86,14 @@ namespace OpenRa.Game
|
||||
buildItems.Clear();
|
||||
|
||||
renderer.Device.DisableScissor();
|
||||
renderer.DrawText(string.Format("RenderFrame {0} ({2:F1} ms)\nTick {1} ({3:F1} ms)\n$ {4}\nPower {5}",
|
||||
renderer.DrawText(string.Format("RenderFrame {0} ({2:F1} ms)\nTick {1} ({3:F1} ms)\n$ {4}\nPower {5}\nReady: {6}",
|
||||
Game.RenderFrame,
|
||||
Game.orderManager.FrameNumber,
|
||||
PerfHistory.items["render"].LastValue,
|
||||
PerfHistory.items["tick_time"].LastValue,
|
||||
Game.LocalPlayer.DisplayCash,
|
||||
Game.LocalPlayer.GetTotalPower()
|
||||
Game.LocalPlayer.GetTotalPower(),
|
||||
Game.LocalPlayer.IsReady ? "Yes" : "No"
|
||||
), new int2(140, 5), Color.White);
|
||||
|
||||
PerfHistory.Render(renderer, Game.worldRenderer.lineRenderer);
|
||||
|
||||
@@ -129,8 +129,13 @@ namespace OpenRa.Game
|
||||
base.OnKeyDown(e);
|
||||
|
||||
/* hack hack hack */
|
||||
if (e.KeyCode == Keys.F8 && !Game.orderManager.GameStarted)
|
||||
Game.orderManager.StartGame();
|
||||
if (e.KeyCode == Keys.F8)
|
||||
{
|
||||
Game.LocalPlayer.IsReady ^= true;
|
||||
Game.controller.AddOrder(
|
||||
new Order(Game.LocalPlayer,
|
||||
"ToggleReady", null, null, int2.Zero, "") { IsImmediate = true });
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnKeyPress(KeyPressEventArgs e)
|
||||
|
||||
@@ -17,7 +17,7 @@ namespace OpenRa.Game
|
||||
public readonly string TargetString;
|
||||
public bool IsImmediate;
|
||||
|
||||
Order(Player player, string orderString, Actor subject,
|
||||
public Order(Player player, string orderString, Actor subject,
|
||||
Actor targetActor, int2 targetLocation, string targetString)
|
||||
{
|
||||
this.Player = player;
|
||||
@@ -30,6 +30,17 @@ namespace OpenRa.Game
|
||||
|
||||
public byte[] Serialize()
|
||||
{
|
||||
if (IsImmediate) /* chat, whatever */
|
||||
{
|
||||
var ret = new MemoryStream();
|
||||
var w = new BinaryWriter(ret);
|
||||
w.Write((byte)0xfe);
|
||||
w.Write((uint)Player.Index);
|
||||
w.Write(OrderString);
|
||||
w.Write(TargetString);
|
||||
return ret.ToArray();
|
||||
}
|
||||
|
||||
switch (OrderString)
|
||||
{
|
||||
// Format:
|
||||
@@ -56,6 +67,13 @@ namespace OpenRa.Game
|
||||
}
|
||||
}
|
||||
|
||||
static Player LookupPlayer(uint index)
|
||||
{
|
||||
return Game.players
|
||||
.Where(x => x.Value.Index == index)
|
||||
.First().Value;
|
||||
}
|
||||
|
||||
public static Order Deserialize(BinaryReader r)
|
||||
{
|
||||
switch (r.ReadByte())
|
||||
@@ -72,9 +90,21 @@ namespace OpenRa.Game
|
||||
if (r.ReadBoolean())
|
||||
targetString = r.ReadString();
|
||||
|
||||
var player = Game.players.Where( x => x.Value.Index == playerID ).First().Value;
|
||||
return new Order( player, order, subject, targetActor, targetLocation, targetString);
|
||||
return new Order( LookupPlayer(playerID),
|
||||
order, subject, targetActor, targetLocation,
|
||||
targetString);
|
||||
}
|
||||
|
||||
case 0xfe:
|
||||
{
|
||||
var playerID = r.ReadUInt32();
|
||||
var name = r.ReadString();
|
||||
var data = r.ReadString();
|
||||
|
||||
return new Order(LookupPlayer(playerID),
|
||||
name, null, null, int2.Zero, data);
|
||||
}
|
||||
|
||||
default:
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
@@ -15,6 +15,8 @@ namespace OpenRa.Game
|
||||
int powerProvided;
|
||||
int powerDrained;
|
||||
|
||||
public bool IsReady;
|
||||
|
||||
public Player( int index, int palette, string playerName, Race race )
|
||||
{
|
||||
this.Index = index;
|
||||
|
||||
@@ -97,6 +97,22 @@ namespace OpenRa.Game
|
||||
Game.chat.AddLine(Pair.New(order.Player.PlayerName + ":", order.TargetString));
|
||||
break;
|
||||
}
|
||||
case "ToggleReady":
|
||||
{
|
||||
Game.chat.AddLine(Pair.New(order.Player.PlayerName, "toggled ready status" ));
|
||||
break;
|
||||
}
|
||||
case "AssignPlayer":
|
||||
{
|
||||
break; /* todo: set LocalPlayer based on this */
|
||||
}
|
||||
case "StartGame":
|
||||
{
|
||||
Game.chat.AddLine(Pair.New("Server:", "The game has started."));
|
||||
Game.orderManager.StartGame();
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user