diff --git a/OpenRa.Game/Orders/IOrderSource.cs b/OpenRa.Game/Orders/IOrderSource.cs index 74c3d3c252..a9717de2c0 100644 --- a/OpenRa.Game/Orders/IOrderSource.cs +++ b/OpenRa.Game/Orders/IOrderSource.cs @@ -5,7 +5,7 @@ namespace OpenRa.Orders interface IOrderSource { void SendLocalOrders(int localFrame, List localOrders); - List OrdersForFrame(int currentFrame); + List OrdersForFrame(int currentFrame); bool IsReadyForFrame(int frameNumber); } } diff --git a/OpenRa.Game/Orders/LocalOrderSource.cs b/OpenRa.Game/Orders/LocalOrderSource.cs index ef6d3c61af..bf9238ffe2 100644 --- a/OpenRa.Game/Orders/LocalOrderSource.cs +++ b/OpenRa.Game/Orders/LocalOrderSource.cs @@ -1,15 +1,16 @@ using System.Collections.Generic; +using System.Linq; namespace OpenRa.Orders { class LocalOrderSource : IOrderSource { - Dictionary> orders = new Dictionary>(); + Dictionary> orders = new Dictionary>(); - public List OrdersForFrame(int currentFrame) + public List OrdersForFrame(int currentFrame) { if (!orders.ContainsKey(currentFrame)) - return new List(); + return new List(); var result = orders[currentFrame]; orders.Remove(currentFrame); @@ -19,7 +20,7 @@ namespace OpenRa.Orders public void SendLocalOrders(int localFrame, List localOrders) { if (localFrame == 0) return; - orders[localFrame] = localOrders; + orders[localFrame] = localOrders.Select(o=>o.Serialize()).ToList(); } public bool IsReadyForFrame(int frameNumber) diff --git a/OpenRa.Game/Orders/NetworkOrderSource.cs b/OpenRa.Game/Orders/NetworkOrderSource.cs index cf3c24f79c..7f4a744ff9 100644 --- a/OpenRa.Game/Orders/NetworkOrderSource.cs +++ b/OpenRa.Game/Orders/NetworkOrderSource.cs @@ -92,10 +92,9 @@ namespace OpenRa.Orders } } - public List OrdersForFrame(int currentFrame) + public List OrdersForFrame(int currentFrame) { - var orderData = ExtractOrders(currentFrame); - return orderData.SelectMany(a => a.ToOrderList()).ToList(); + return ExtractOrders(currentFrame).ToList(); } public void SendLocalOrders(int localFrame, List localOrders) diff --git a/OpenRa.Game/Orders/OrderManager.cs b/OpenRa.Game/Orders/OrderManager.cs index 1a5dfd1d2d..debcc6c362 100644 --- a/OpenRa.Game/Orders/OrderManager.cs +++ b/OpenRa.Game/Orders/OrderManager.cs @@ -58,6 +58,7 @@ namespace OpenRa.Orders { var orders = sources .SelectMany(s => s.OrdersForFrame(frame)) + .SelectMany(x => x.ToOrderList()) .Where(o => o.Validate()) /* drop bogus things */ .OrderBy(o => o.Player.Index) .ToList(); diff --git a/OpenRa.Game/Orders/ReplayOrderSource.cs b/OpenRa.Game/Orders/ReplayOrderSource.cs index d8376d0aeb..52f5b34073 100644 --- a/OpenRa.Game/Orders/ReplayOrderSource.cs +++ b/OpenRa.Game/Orders/ReplayOrderSource.cs @@ -14,25 +14,25 @@ namespace OpenRa.Orders public void SendLocalOrders(int localFrame, List localOrders) { } - public List OrdersForFrame(int frameNumber) + public List OrdersForFrame(int frameNumber) { if (frameNumber == 0) - return new List(); + return new List(); try { var len = replayReader.ReadInt32() - 4; var frame = replayReader.ReadInt32(); - var ret = replayReader.ReadBytes(len).ToOrderList(); + var ret = replayReader.ReadBytes(len); if (frameNumber != frame) throw new InvalidOperationException("Attempted time-travel in OrdersForFrame (replay)"); - return ret; + return new List { ret }; } catch (EndOfStreamException) { - return new List(); + return new List(); } }