diff --git a/OpenRA.Game/Game.cs b/OpenRA.Game/Game.cs index d41044ef32..90b8b53c6d 100644 --- a/OpenRA.Game/Game.cs +++ b/OpenRA.Game/Game.cs @@ -139,12 +139,12 @@ namespace OpenRA map = modData.PrepareMap(mapUID); using (new PerfTimer("NewWorld")) { - orderManager.world = new World(map, orderManager, isShellmap); - orderManager.world.Timestep = Timestep; + orderManager.World = new World(map, orderManager, isShellmap); + orderManager.World.Timestep = Timestep; } - worldRenderer = new WorldRenderer(orderManager.world); + worldRenderer = new WorldRenderer(orderManager.World); using (new PerfTimer("LoadComplete")) - orderManager.world.LoadComplete(worldRenderer); + orderManager.World.LoadComplete(worldRenderer); if (orderManager.GameStarted) return; @@ -398,7 +398,7 @@ namespace OpenRA { var tick = RunTime; - var world = orderManager.world; + var world = orderManager.World; var uiTickDelta = tick - Ui.LastTickTime; if (uiTickDelta >= Timestep) @@ -474,7 +474,7 @@ namespace OpenRA } InnerLogicTick(orderManager); - if (worldRenderer != null && orderManager.world != worldRenderer.world) + if (worldRenderer != null && orderManager.World != worldRenderer.world) InnerLogicTick(worldRenderer.world.orderManager); } @@ -506,7 +506,7 @@ namespace OpenRA } using (new PerfSample("render_flip")) - Renderer.EndFrame(new DefaultInputHandler(orderManager.world)); + Renderer.EndFrame(new DefaultInputHandler(orderManager.World)); } PerfHistory.items["render"].Tick(); @@ -663,8 +663,8 @@ namespace OpenRA public static void Disconnect() { - if (orderManager.world != null) - orderManager.world.traitDict.PrintReport(); + if (orderManager.World != null) + orderManager.World.traitDict.PrintReport(); orderManager.Dispose(); CloseServer(); @@ -704,7 +704,7 @@ namespace OpenRA public static bool IsCurrentWorld(World world) { - return orderManager != null && orderManager.world == world; + return orderManager != null && orderManager.World == world; } } } diff --git a/OpenRA.Game/Network/OrderManager.cs b/OpenRA.Game/Network/OrderManager.cs index c9540f4cad..56f221af6e 100644 --- a/OpenRA.Game/Network/OrderManager.cs +++ b/OpenRA.Game/Network/OrderManager.cs @@ -18,12 +18,14 @@ namespace OpenRA.Network { public sealed class OrderManager : IDisposable { + static readonly IEnumerable NoClients = new Session.Client[] { }; + readonly SyncReport syncReport; readonly FrameData frameData = new FrameData(); public Session LobbyInfo = new Session(); public Session.Client LocalClient { get { return LobbyInfo.ClientWithIndex(Connection.LocalClientId); } } - public World world; + public World World; public readonly string Host; public readonly int Port; @@ -46,14 +48,25 @@ namespace OpenRA.Network List localOrders = new List(); List chatCache = new List(); + public readonly ReadOnlyList ChatCache; + static void OutOfSync(int frame) + { + throw new InvalidOperationException("Out of sync in frame {0}.\n Compare syncreport.log with other players.".F(frame)); + } + + static void OutOfSync(int frame, string blame) + { + throw new InvalidOperationException("Out of sync in frame {0}: Blame {1}.\n Compare syncreport.log with other players.".F(frame, blame)); + } + public void StartGame() { if (GameStarted) return; NetFrameNumber = 1; - for (var i = NetFrameNumber ; i <= FramesAhead ; i++) + for (var i = NetFrameNumber; i <= FramesAhead; i++) Connection.Send(i, new List()); } @@ -87,15 +100,15 @@ namespace OpenRA.Network public void TickImmediate() { - var immediateOrders = localOrders.Where( o => o.IsImmediate ).ToList(); - if( immediateOrders.Count != 0 ) - Connection.SendImmediate( immediateOrders.Select( o => o.Serialize() ).ToList() ); - localOrders.RemoveAll( o => o.IsImmediate ); + var immediateOrders = localOrders.Where(o => o.IsImmediate).ToList(); + if (immediateOrders.Count != 0) + Connection.SendImmediate(immediateOrders.Select(o => o.Serialize()).ToList()); + localOrders.RemoveAll(o => o.IsImmediate); var immediatePackets = new List>(); Connection.Receive( - ( clientId, packet ) => + (clientId, packet) => { var frame = BitConverter.ToInt32(packet, 0); if (packet.Length == 5 && packet[4] == 0xBF) @@ -106,11 +119,11 @@ namespace OpenRA.Network immediatePackets.Add(Pair.New(clientId, packet)); else frameData.AddFrameOrders(clientId, frame, packet); - } ); + }); foreach (var p in immediatePackets) - foreach (var o in p.Second.ToOrderList(world)) - UnitOrders.ProcessOrder(this, world, p.First, o); + foreach (var o in p.Second.ToOrderList(World)) + UnitOrders.ProcessOrder(this, World, p.First, o); } Dictionary syncForFrame = new Dictionary(); @@ -148,7 +161,7 @@ namespace OpenRA.Network void OutOfSync(int frame, int index) { - var orders = frameData.OrdersForFrame(world, frame); + var orders = frameData.OrdersForFrame(World, frame); // Invalid index if (index >= orders.Count()) @@ -157,22 +170,11 @@ namespace OpenRA.Network throw new InvalidOperationException("Out of sync in frame {0}.\n {1}\n Compare syncreport.log with other players.".F(frame, orders.ElementAt(index).Order.ToString())); } - static void OutOfSync(int frame) - { - throw new InvalidOperationException("Out of sync in frame {0}.\n Compare syncreport.log with other players.".F(frame)); - } - - static void OutOfSync(int frame, string blame) - { - throw new InvalidOperationException("Out of sync in frame {0}: Blame {1}.\n Compare syncreport.log with other players.".F(frame, blame)); - } - public bool IsReadyForNextFrame { get { return NetFrameNumber >= 1 && frameData.IsReadyForFrame(NetFrameNumber); } } - static readonly IEnumerable NoClients = new Session.Client[] {}; public IEnumerable GetClientsNotReadyForNextFrame { get @@ -193,12 +195,12 @@ namespace OpenRA.Network localOrders.Clear(); var sync = new List(); - sync.Add(world.SyncHash()); + sync.Add(World.SyncHash()); - foreach (var order in frameData.OrdersForFrame(world, NetFrameNumber)) + foreach (var order in frameData.OrdersForFrame(World, NetFrameNumber)) { - UnitOrders.ProcessOrder(this, world, order.Client, order.Order); - sync.Add(world.SyncHash()); + UnitOrders.ProcessOrder(this, World, order.Client, order.Order); + sync.Add(World.SyncHash()); } var ss = sync.SerializeSync(); diff --git a/OpenRA.Game/Network/SyncReport.cs b/OpenRA.Game/Network/SyncReport.cs old mode 100755 new mode 100644 index cdd364c160..a967573b0b --- a/OpenRA.Game/Network/SyncReport.cs +++ b/OpenRA.Game/Network/SyncReport.cs @@ -45,10 +45,10 @@ namespace OpenRA.Network void GenerateSyncReport(Report report) { report.Frame = orderManager.NetFrameNumber; - report.SyncedRandom = orderManager.world.SharedRandom.Last; - report.TotalCount = orderManager.world.SharedRandom.TotalCount; + report.SyncedRandom = orderManager.World.SharedRandom.Last; + report.TotalCount = orderManager.World.SharedRandom.TotalCount; report.Traits.Clear(); - foreach (var a in orderManager.world.ActorsWithTrait()) + foreach (var a in orderManager.World.ActorsWithTrait()) { var sync = Sync.CalculateSyncHash(a.Trait); if (sync != 0) @@ -63,7 +63,7 @@ namespace OpenRA.Network }); } - foreach (var e in orderManager.world.Effects) + foreach (var e in orderManager.World.Effects) { var sync = e as ISync; if (sync != null) diff --git a/OpenRA.Game/Network/UnitOrders.cs b/OpenRA.Game/Network/UnitOrders.cs index 9076035e4e..faa780dc8a 100644 --- a/OpenRA.Game/Network/UnitOrders.cs +++ b/OpenRA.Game/Network/UnitOrders.cs @@ -103,14 +103,14 @@ namespace OpenRA.Network if (client != null) { var pause = order.TargetString == "Pause"; - if (orderManager.world.Paused != pause && !world.LobbyInfo.IsSinglePlayer) + if (orderManager.World.Paused != pause && !world.LobbyInfo.IsSinglePlayer) { var pausetext = "The game is {0} by {1}".F(pause ? "paused" : "un-paused", client.Name); Game.AddChatLine(Color.White, "", pausetext); } - orderManager.world.Paused = pause; - orderManager.world.PredictedPaused = pause; + orderManager.World.Paused = pause; + orderManager.World.PredictedPaused = pause; } break; } diff --git a/OpenRA.Mods.RA/Widgets/Logic/LobbyLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/LobbyLogic.cs index 1277861c43..515f01b8bc 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/LobbyLogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/LobbyLogic.cs @@ -526,7 +526,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic musicButton.OnClick = () => Ui.OpenWindow("MUSIC_PANEL", new WidgetArgs { { "onExit", DoNothing }, - { "world", orderManager.world } + { "world", orderManager.World } }); var settingsButton = lobby.GetOrNull("SETTINGS_BUTTON"); diff --git a/OpenRA.Mods.RA/Widgets/Logic/LobbyUtils.cs b/OpenRA.Mods.RA/Widgets/Logic/LobbyUtils.cs index 6666db589b..bc9c2d5523 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/LobbyUtils.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/LobbyUtils.cs @@ -138,7 +138,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic Action onChange = c => preview.Color = c; - var colorChooser = Game.LoadWidget(orderManager.world, "COLOR_CHOOSER", null, new WidgetArgs() + var colorChooser = Game.LoadWidget(orderManager.World, "COLOR_CHOOSER", null, new WidgetArgs() { { "onChange", onChange }, { "initialColor", client.Color }