diff --git a/OpenRa.Game/Game.cs b/OpenRa.Game/Game.cs index acc01f93b2..ba262b2a24 100644 --- a/OpenRa.Game/Game.cs +++ b/OpenRa.Game/Game.cs @@ -125,11 +125,11 @@ namespace OpenRa lastTime += Settings.Timestep; chrome.Tick(); - orderManager.TickImmediate(); + orderManager.TickImmediate( world ); if (orderManager.IsReadyForNextFrame) { - orderManager.Tick(); + orderManager.Tick( world ); if (controller.orderGenerator != null) controller.orderGenerator.Tick( world ); diff --git a/OpenRa.Game/Orders/Order.cs b/OpenRa.Game/Orders/Order.cs index 37daf1d52b..b568523f99 100644 --- a/OpenRa.Game/Orders/Order.cs +++ b/OpenRa.Game/Orders/Order.cs @@ -64,14 +64,14 @@ namespace OpenRa } } - static Player LookupPlayer(uint index) + static Player LookupPlayer(World world, uint index) { return Game.world.players .Where(x => x.Value.Index == index) .First().Value; } - public static Order Deserialize(BinaryReader r) + public static Order Deserialize(World world, BinaryReader r) { switch (r.ReadByte()) { @@ -87,7 +87,7 @@ namespace OpenRa targetString = r.ReadString(); Actor subject, targetActor; - if( !TryGetActorFromUInt( subjectId, out subject ) || !TryGetActorFromUInt( targetActorId, out targetActor ) ) + if( !TryGetActorFromUInt( world, subjectId, out subject ) || !TryGetActorFromUInt( world, targetActorId, out targetActor ) ) return null; return new Order( order, subject, targetActor, targetLocation, targetString); @@ -99,7 +99,7 @@ namespace OpenRa var name = r.ReadString(); var data = r.ReadString(); - return new Order( name, LookupPlayer( playerID ).PlayerActor, null, int2.Zero, data ) { IsImmediate = true }; + return new Order( name, LookupPlayer( world, playerID ).PlayerActor, null, int2.Zero, data ) { IsImmediate = true }; } default: @@ -113,7 +113,7 @@ namespace OpenRa return a.ActorID; } - static bool TryGetActorFromUInt(uint aID, out Actor ret ) + static bool TryGetActorFromUInt(World world, uint aID, out Actor ret ) { if( aID == 0xFFFFFFFF ) { @@ -122,7 +122,7 @@ namespace OpenRa } else { - foreach( var a in Game.world.Actors.Where( x => x.ActorID == aID ) ) + foreach( var a in world.Actors.Where( x => x.ActorID == aID ) ) { ret = a; return true; diff --git a/OpenRa.Game/Orders/OrderIO.cs b/OpenRa.Game/Orders/OrderIO.cs index cc2d52fe69..9fdd5edc33 100644 --- a/OpenRa.Game/Orders/OrderIO.cs +++ b/OpenRa.Game/Orders/OrderIO.cs @@ -22,14 +22,14 @@ namespace OpenRa.Orders ms.WriteTo(s); } - public static List ToOrderList(this byte[] bytes) + public static List ToOrderList(this byte[] bytes, World world) { var ms = new MemoryStream(bytes); var reader = new BinaryReader(ms); var ret = new List(); while( ms.Position < ms.Length ) { - var o = Order.Deserialize( reader ); + var o = Order.Deserialize( world, reader ); if( o != null ) ret.Add( o ); } diff --git a/OpenRa.Game/Orders/OrderManager.cs b/OpenRa.Game/Orders/OrderManager.cs index 85edf10ac4..97986034a9 100644 --- a/OpenRa.Game/Orders/OrderManager.cs +++ b/OpenRa.Game/Orders/OrderManager.cs @@ -54,11 +54,11 @@ namespace OpenRa.Orders } } - void ProcessOrders(int frame, bool save) + void ProcessOrders(World world, int frame, bool save) { var orders = sources .SelectMany(s => s.OrdersForFrame(frame)) - .SelectMany(x => x.ToOrderList()) + .SelectMany(x => x.ToOrderList(world)) .OrderBy(o => o.Player.Index) .ToList(); @@ -69,24 +69,24 @@ namespace OpenRa.Orders savingReplay.WriteFrameData(orders, frame); } - public void TickImmediate() + public void TickImmediate( World world ) { var localOrders = Game.controller.GetRecentOrders(true); if (localOrders.Count > 0) foreach (var p in sources) p.SendLocalOrders(0, localOrders); - ProcessOrders(0, false); + ProcessOrders(world, 0, false); } - public void Tick() + public void Tick( World world ) { var localOrders = Game.controller.GetRecentOrders(false); foreach( var p in sources ) p.SendLocalOrders( frameNumber + FramesAhead, localOrders ); - ProcessOrders(frameNumber, true); + ProcessOrders(world, frameNumber, true); ++frameNumber; diff --git a/OpenRa.Game/Orders/UnitOrders.cs b/OpenRa.Game/Orders/UnitOrders.cs index c5c9986928..4a67d593c4 100644 --- a/OpenRa.Game/Orders/UnitOrders.cs +++ b/OpenRa.Game/Orders/UnitOrders.cs @@ -19,7 +19,7 @@ namespace OpenRa.Orders } case "AssignPlayer": { - Game.world.LocalPlayer = order.Player; + order.Player.World.LocalPlayer = order.Player; Game.chat.AddLine(order.Player, "is now YOU."); break; }