From d7be2b0dd34bf5b917da228cd69b836461701987 Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 21 Jan 2010 12:31:44 +1300 Subject: [PATCH 01/18] moved Game.palette into WorldRenderer --- OpenRa.Game/Game.cs | 15 --------------- OpenRa.Game/Graphics/HardwarePalette.cs | 12 ++++++++++++ OpenRa.Game/Graphics/Viewport.cs | 3 +++ OpenRa.Game/Graphics/WorldRenderer.cs | 6 ++++-- 4 files changed, 19 insertions(+), 17 deletions(-) diff --git a/OpenRa.Game/Game.cs b/OpenRa.Game/Game.cs index 14a1e96041..43820d20d3 100644 --- a/OpenRa.Game/Game.cs +++ b/OpenRa.Game/Game.cs @@ -28,7 +28,6 @@ namespace OpenRa internal static Renderer renderer; static int2 clientSize; - static HardwarePalette palette; static string mapName; internal static Session LobbyInfo = new Session(); static bool changePending; @@ -57,8 +56,6 @@ namespace OpenRa a.Owner.Shroud.Explore(a); }; - palette = new HardwarePalette(renderer, world.Map); - SequenceProvider.Initialize(manifest.Sequences); viewport = new Viewport(clientSize, Game.world.Map.Offset, Game.world.Map.Offset + Game.world.Map.Size, renderer); @@ -147,8 +144,6 @@ namespace OpenRa using (new PerfSample("render")) { - UpdatePalette(world.Actors.SelectMany( - a => a.traits.WithInterface())); ++RenderFrame; viewport.DrawRegions(); } @@ -157,16 +152,6 @@ namespace OpenRa PerfHistory.items["batches"].Tick(); } - static void UpdatePalette(IEnumerable paletteMods) - { - var b = new Bitmap(palette.Bitmap); - foreach (var mod in paletteMods) - mod.AdjustPalette(b); - - palette.Texture.SetData(b); - renderer.PaletteTexture = palette.Texture; - } - public static Random SharedRandom = new Random(0); /* for things that require sync */ public static Random CosmeticRandom = new Random(); /* for things that are just fluff */ diff --git a/OpenRa.Game/Graphics/HardwarePalette.cs b/OpenRa.Game/Graphics/HardwarePalette.cs index c5e784e4a2..51a95e7bf2 100644 --- a/OpenRa.Game/Graphics/HardwarePalette.cs +++ b/OpenRa.Game/Graphics/HardwarePalette.cs @@ -1,5 +1,7 @@ +using System.Collections.Generic; using System.Drawing; using OpenRa.FileFormats; +using OpenRa.Traits; namespace OpenRa.Graphics { @@ -38,5 +40,15 @@ namespace OpenRa.Graphics return allocated++; } + + public void Update(IEnumerable paletteMods) + { + var b = new Bitmap(Bitmap); + foreach (var mod in paletteMods) + mod.AdjustPalette(b); + + Texture.SetData(b); + Game.renderer.PaletteTexture = Texture; + } } } diff --git a/OpenRa.Game/Graphics/Viewport.cs b/OpenRa.Game/Graphics/Viewport.cs index 9d923cddaf..b412177374 100644 --- a/OpenRa.Game/Graphics/Viewport.cs +++ b/OpenRa.Game/Graphics/Viewport.cs @@ -44,6 +44,9 @@ namespace OpenRa.Graphics public void DrawRegions() { + Game.world.WorldRenderer.palette.Update(Game.world.Actors.SelectMany( + a => a.traits.WithInterface())); + float2 r1 = new float2(2, -2) / screenSize; float2 r2 = new float2(-1, 1); diff --git a/OpenRa.Game/Graphics/WorldRenderer.cs b/OpenRa.Game/Graphics/WorldRenderer.cs index 5683a72832..0f20b3f601 100644 --- a/OpenRa.Game/Graphics/WorldRenderer.cs +++ b/OpenRa.Game/Graphics/WorldRenderer.cs @@ -12,17 +12,19 @@ namespace OpenRa.Graphics internal readonly LineRenderer lineRenderer; internal readonly UiOverlay uiOverlay; internal readonly Renderer renderer; + internal readonly HardwarePalette palette; public static bool ShowUnitPaths = false; internal WorldRenderer(World world, Renderer renderer) { - terrainRenderer = new TerrainRenderer(world, renderer); - this.renderer = renderer; + + terrainRenderer = new TerrainRenderer(world, renderer); spriteRenderer = new SpriteRenderer(renderer, true); lineRenderer = new LineRenderer(renderer); uiOverlay = new UiOverlay(spriteRenderer); + palette = new HardwarePalette(renderer, world.Map); } void DrawSpriteList(RectangleF rect, From d32461a9403a7fdbea885dc98de7043f60146fde Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 21 Jan 2010 12:37:19 +1300 Subject: [PATCH 02/18] moved some input stuff from MainWindow to Game --- OpenRa.Game/Game.cs | 58 +++++++++++++++++++++++++++++++++++++++ OpenRa.Game/MainWindow.cs | 57 ++++---------------------------------- 2 files changed, 63 insertions(+), 52 deletions(-) diff --git a/OpenRa.Game/Game.cs b/OpenRa.Game/Game.cs index 43820d20d3..293342084b 100644 --- a/OpenRa.Game/Game.cs +++ b/OpenRa.Game/Game.cs @@ -9,6 +9,7 @@ using OpenRa.Graphics; using OpenRa.Orders; using OpenRa.Support; using OpenRa.Traits; +using System.Windows.Forms; namespace OpenRa { @@ -231,5 +232,62 @@ namespace OpenRa taken.Add(sp); return sp; } + + internal static void DispatchMouseInput(MouseInputEvent ev, MouseEventArgs e, Keys ModifierKeys) + { + int sync = Game.world.SyncHash(); + + Game.viewport.DispatchMouseInput( + new MouseInput + { + Button = (MouseButton)(int)e.Button, + Event = ev, + Location = new int2(e.Location), + Modifiers = (Modifiers)(int)ModifierKeys, + }); + + if( sync != Game.world.SyncHash() ) + throw new InvalidOperationException( "Desync in DispatchMouseInput" ); + } + + internal static void HandleKeyDown( KeyEventArgs e ) + { + int sync = Game.world.SyncHash(); + + /* hack hack hack */ + if( e.KeyCode == Keys.F8 && !Game.orderManager.GameStarted ) + { + Game.controller.AddOrder( + new Order( "ToggleReady", Game.world.LocalPlayer.PlayerActor, null, int2.Zero, "" ) { IsImmediate = true } ); + } + + /* temporary hack: DO NOT LEAVE IN */ + if( e.KeyCode == Keys.F2 ) + Game.world.LocalPlayer = Game.world.players[ ( Game.world.LocalPlayer.Index + 1 ) % 4 ]; + if( e.KeyCode == Keys.F3 ) + Game.controller.orderGenerator = new SellOrderGenerator(); + if( e.KeyCode == Keys.F4 ) + Game.controller.orderGenerator = new RepairOrderGenerator(); + + if( !Game.chat.isChatting ) + if( e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9 ) + Game.controller.DoControlGroup( (int)e.KeyCode - (int)Keys.D0, (Modifiers)(int)e.Modifiers ); + + if( sync != Game.world.SyncHash() ) + throw new InvalidOperationException( "Desync in OnKeyDown" ); + } + + internal static void HandleKeyPress( KeyPressEventArgs e ) + { + int sync = Game.world.SyncHash(); + + if( e.KeyChar == '\r' ) + Game.chat.Toggle(); + else if( Game.chat.isChatting ) + Game.chat.TypeChar( e.KeyChar ); + + if( sync != Game.world.SyncHash() ) + throw new InvalidOperationException( "Desync in OnKeyPress" ); + } } } diff --git a/OpenRa.Game/MainWindow.cs b/OpenRa.Game/MainWindow.cs index ab8652ddea..30f8d9c5fc 100755 --- a/OpenRa.Game/MainWindow.cs +++ b/OpenRa.Game/MainWindow.cs @@ -90,28 +90,11 @@ namespace OpenRa int2 lastPos; - void DispatchMouseInput(MouseInputEvent ev, MouseEventArgs e) - { - int sync = Game.world.SyncHash(); - - Game.viewport.DispatchMouseInput( - new MouseInput - { - Button = (MouseButton)(int)e.Button, - Event = ev, - Location = new int2(e.Location), - Modifiers = (Modifiers)(int)ModifierKeys, - }); - - if( sync != Game.world.SyncHash() ) - throw new InvalidOperationException( "Desync in DispatchMouseInput" ); - } - protected override void OnMouseDown(MouseEventArgs e) { base.OnMouseDown(e); lastPos = new int2(e.Location); - DispatchMouseInput(MouseInputEvent.Down, e); + Game.DispatchMouseInput(MouseInputEvent.Down, e, ModifierKeys); } protected override void OnMouseMove(MouseEventArgs e) @@ -125,57 +108,27 @@ namespace OpenRa lastPos = p; } - DispatchMouseInput(MouseInputEvent.Move, e); + Game.DispatchMouseInput(MouseInputEvent.Move, e, ModifierKeys); } protected override void OnMouseUp(MouseEventArgs e) { base.OnMouseUp(e); - DispatchMouseInput(MouseInputEvent.Up, e); + Game.DispatchMouseInput(MouseInputEvent.Up, e, ModifierKeys); } protected override void OnKeyDown(KeyEventArgs e) { base.OnKeyDown(e); - int sync = Game.world.SyncHash(); - - /* hack hack hack */ - if (e.KeyCode == Keys.F8 && !Game.orderManager.GameStarted) - { - Game.controller.AddOrder( - new Order( "ToggleReady", Game.world.LocalPlayer.PlayerActor, null, int2.Zero, "") { IsImmediate = true }); - } - - /* temporary hack: DO NOT LEAVE IN */ - if (e.KeyCode == Keys.F2) - Game.world.LocalPlayer = Game.world.players[(Game.world.LocalPlayer.Index + 1) % 4]; - if (e.KeyCode == Keys.F3) - Game.controller.orderGenerator = new SellOrderGenerator(); - if (e.KeyCode == Keys.F4) - Game.controller.orderGenerator = new RepairOrderGenerator(); - - if (!Game.chat.isChatting) - if (e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9) - Game.controller.DoControlGroup( (int)e.KeyCode - (int)Keys.D0, (Modifiers)(int)e.Modifiers ); - - if( sync != Game.world.SyncHash() ) - throw new InvalidOperationException( "Desync in OnKeyDown" ); + Game.HandleKeyDown( e ); } protected override void OnKeyPress(KeyPressEventArgs e) { base.OnKeyPress(e); - int sync = Game.world.SyncHash(); - - if (e.KeyChar == '\r') - Game.chat.Toggle(); - else if (Game.chat.isChatting) - Game.chat.TypeChar(e.KeyChar); - - if( sync != Game.world.SyncHash() ) - throw new InvalidOperationException( "Desync in OnKeyPress" ); + Game.HandleKeyPress( e ); } } From 8729d049f17c6f304f4e75c6af37ab24e100998b Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 21 Jan 2010 12:39:31 +1300 Subject: [PATCH 03/18] naming. --- OpenRa.Game/Traits/ProductionSurround.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OpenRa.Game/Traits/ProductionSurround.cs b/OpenRa.Game/Traits/ProductionSurround.cs index aeca50ad11..6944e986f4 100644 --- a/OpenRa.Game/Traits/ProductionSurround.cs +++ b/OpenRa.Game/Traits/ProductionSurround.cs @@ -12,9 +12,9 @@ namespace OpenRa.Traits { public ProductionSurround(Actor self) : base(self) { } - static int2? FindAdjacentTile(Actor a, UnitMovementType umt) + static int2? FindAdjacentTile(Actor self, UnitMovementType umt) { - var tiles = Footprint.Tiles(a, a.traits.Get()); + var tiles = Footprint.Tiles(self, self.traits.Get()); var min = tiles.Aggregate(int2.Min) - new int2(1, 1); var max = tiles.Aggregate(int2.Max) + new int2(1, 1); From 71cd7b8fe01ba06ec00a6c294ffed66f30cf749f Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 21 Jan 2010 12:42:58 +1300 Subject: [PATCH 04/18] added ref to World in UIM, PathFinder, WorldRenderer --- OpenRa.Game/Graphics/WorldRenderer.cs | 12 +++++++----- OpenRa.Game/PathFinder.cs | 8 +++++--- OpenRa.Game/UnitInfluenceMap.cs | 8 +++++--- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/OpenRa.Game/Graphics/WorldRenderer.cs b/OpenRa.Game/Graphics/WorldRenderer.cs index 0f20b3f601..28a394c9ab 100644 --- a/OpenRa.Game/Graphics/WorldRenderer.cs +++ b/OpenRa.Game/Graphics/WorldRenderer.cs @@ -7,6 +7,7 @@ namespace OpenRa.Graphics { public class WorldRenderer { + readonly World world; internal readonly TerrainRenderer terrainRenderer; internal readonly SpriteRenderer spriteRenderer; internal readonly LineRenderer lineRenderer; @@ -18,6 +19,7 @@ namespace OpenRa.Graphics internal WorldRenderer(World world, Renderer renderer) { + this.world = world; this.renderer = renderer; terrainRenderer = new TerrainRenderer(world, renderer); @@ -66,13 +68,13 @@ namespace OpenRa.Graphics new SizeF( Game.viewport.Width, Game.viewport.Height )); /* todo: cull to screen again */ - var renderables = Game.world.Actors.SelectMany(a => a.Render()) + var renderables = world.Actors.SelectMany(a => a.Render()) .OrderBy(r => r, comparer); foreach (var r in renderables) spriteRenderer.DrawSprite(r.Sprite, r.Pos, r.Palette); - foreach (var e in Game.world.Effects) + foreach (var e in world.Effects) DrawSpriteList(rect, e.Render()); uiOverlay.Draw(); @@ -84,7 +86,7 @@ namespace OpenRa.Graphics if (Game.controller.orderGenerator != null) Game.controller.orderGenerator.Render(); - Game.world.LocalPlayer.Shroud.Draw(spriteRenderer); + world.LocalPlayer.Shroud.Draw(spriteRenderer); lineRenderer.Flush(); spriteRenderer.Flush(); @@ -104,7 +106,7 @@ namespace OpenRa.Graphics lineRenderer.DrawLine(a + b + c, a + c, Color.White, Color.White); lineRenderer.DrawLine(a, a + c, Color.White, Color.White); - foreach (var u in Game.world.SelectActorsInBox(selbox.Value.First, selbox.Value.Second)) + foreach (var u in world.SelectActorsInBox(selbox.Value.First, selbox.Value.Second)) DrawSelectionBox(u, Color.Yellow, false); } @@ -133,7 +135,7 @@ namespace OpenRa.Graphics DrawControlGroup(selectedUnit, xy); // Only display pips and tags to the owner - if (selectedUnit.Owner == Game.world.LocalPlayer) + if (selectedUnit.Owner == world.LocalPlayer) { DrawPips(selectedUnit, xY); DrawTags(selectedUnit, new float2(.5f * (bounds.Left + bounds.Right ), xy.Y)); diff --git a/OpenRa.Game/PathFinder.cs b/OpenRa.Game/PathFinder.cs index aabf600d62..7c47e00825 100644 --- a/OpenRa.Game/PathFinder.cs +++ b/OpenRa.Game/PathFinder.cs @@ -10,10 +10,12 @@ namespace OpenRa { public class PathFinder { + readonly World world; float[][,] passableCost = new float[4][,]; public PathFinder( World world ) { + this.world = world; for (var umt = UnitMovementType.Foot; umt <= UnitMovementType.Float; umt++) passableCost[(int)umt] = new float[128, 128]; for( int x = 0 ; x < 128 ; x++ ) @@ -41,8 +43,8 @@ namespace OpenRa { using( new PerfSample( "find_unit_path_multiple_src" ) ) { - var tilesInRange = Game.world.FindTilesInCircle(target, range) - .Where( t => Game.world.IsCellBuildable( t, umt ) ); + var tilesInRange = world.FindTilesInCircle(target, range) + .Where( t => world.IsCellBuildable( t, umt ) ); var path = FindPath( PathSearch.FromPoints( tilesInRange, src, umt, false ).WithCustomBlocker(AvoidUnitsNear(src, 4))); path.Reverse(); @@ -55,7 +57,7 @@ namespace OpenRa return q => p != q && ((p - q).LengthSquared < dist * dist) && - (Game.world.UnitInfluence.GetUnitsAt(q).Any()); + (world.UnitInfluence.GetUnitsAt(q).Any()); } public List FindPath( PathSearch search ) diff --git a/OpenRa.Game/UnitInfluenceMap.cs b/OpenRa.Game/UnitInfluenceMap.cs index e884cc5273..114523f091 100644 --- a/OpenRa.Game/UnitInfluenceMap.cs +++ b/OpenRa.Game/UnitInfluenceMap.cs @@ -8,11 +8,13 @@ namespace OpenRa { public class UnitInfluenceMap { + readonly World world; List[,] influence = new List[128, 128]; readonly int2 searchDistance = new int2(2,2); public UnitInfluenceMap( World world ) { + this.world = world; for (int i = 0; i < 128; i++) for (int j = 0; j < 128; j++) influence[ i, j ] = new List(); @@ -25,7 +27,7 @@ namespace OpenRa // Does this belong here? NO, but it's your mess. // Get the crushable actors - foreach (var a in Game.world.Actors.Where(b => b.traits.Contains())) + foreach (var a in world.Actors.Where(b => b.traits.Contains())) { // Are there any units in the same cell that can crush this? foreach( var ios in a.traits.WithInterface() ) @@ -33,7 +35,7 @@ namespace OpenRa { // There should only be one (counterexample: An infantry and a tank try to pick up a crate at the same time.) // If there is more than one, do action on the first crusher - var crusher = GetUnitsAt(cell).Where(b => a != b && Game.world.IsActorCrushableByActor(a, b)).FirstOrDefault(); + var crusher = GetUnitsAt(cell).Where(b => a != b && world.IsActorCrushableByActor(a, b)).FirstOrDefault(); if (crusher != null) { Log.Write("{0} crushes {1}", crusher.Info.Name, a.Info.Name); @@ -56,7 +58,7 @@ namespace OpenRa if (!a.traits.Get().OccupiedCells().Contains( new int2( x, y ) ) ) throw new InvalidOperationException( "UIM: Sanity check failed A" ); - foreach( Actor a in Game.world.Actors ) + foreach( Actor a in world.Actors ) foreach( var ios in a.traits.WithInterface() ) foreach( var cell in ios.OccupiedCells() ) if (!influence[cell.X, cell.Y].Contains(a)) From dd93ee014a56eee092a6830324691fa165c263a8 Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 21 Jan 2010 13:13:19 +1300 Subject: [PATCH 05/18] Actor stores a ref to World --- OpenRa.Game/Actor.cs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/OpenRa.Game/Actor.cs b/OpenRa.Game/Actor.cs index a715ebe391..bf5a6c7f23 100755 --- a/OpenRa.Game/Actor.cs +++ b/OpenRa.Game/Actor.cs @@ -14,7 +14,10 @@ namespace OpenRa [Sync] public readonly TypeDictionary traits = new TypeDictionary(); public readonly ActorInfo Info; + + public readonly World World; public readonly uint ActorID; + [Sync] public int2 Location; [Sync] @@ -25,6 +28,7 @@ namespace OpenRa public Actor( World world, string name, int2 location, Player owner ) { + World = world; ActorID = world.NextAID(); Location = location; CenterLocation = Traits.Util.CenterOfCell(Location); @@ -82,14 +86,14 @@ namespace OpenRa public Order Order( int2 xy, MouseInput mi ) { - if (Owner != Game.world.LocalPlayer) + if (Owner != World.LocalPlayer) return null; - if (!Game.world.Map.IsInMap(xy.X, xy.Y)) + if (!World.Map.IsInMap(xy.X, xy.Y)) return null; var loc = mi.Location + Game.viewport.Location; - var underCursor = Game.world.FindUnits(loc, loc).FirstOrDefault(); + var underCursor = World.FindUnits(loc, loc).FirstOrDefault(); if (underCursor != null && !underCursor.traits.Contains()) underCursor = null; @@ -147,7 +151,7 @@ namespace OpenRa attacker.Owner.Kills++; if (RemoveOnDeath) - Game.world.AddFrameEndTask(w => w.Remove(this)); + World.AddFrameEndTask(w => w.Remove(this)); } var maxHP = this.GetMaxHP(); From 6688716aa5f4e3fe6c16461982b757003312ae23 Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 21 Jan 2010 13:15:05 +1300 Subject: [PATCH 06/18] find/replace "Game.world." -> "self.World." in all traits and activities. --- OpenRa.Game/Traits/AcceptsOre.cs | 2 +- OpenRa.Game/Traits/Activities/DeliverOre.cs | 4 ++-- OpenRa.Game/Traits/Activities/DeployMcv.cs | 8 ++++---- .../Traits/Activities/EnterTransport.cs | 2 +- OpenRa.Game/Traits/Activities/Harvest.cs | 8 ++++---- OpenRa.Game/Traits/Activities/HeliLand.cs | 2 +- OpenRa.Game/Traits/Activities/HeliReturn.cs | 2 +- OpenRa.Game/Traits/Activities/Move.cs | 18 ++++++++--------- OpenRa.Game/Traits/Activities/Rearm.cs | 2 +- OpenRa.Game/Traits/Activities/Repair.cs | 2 +- OpenRa.Game/Traits/Activities/ReturnToBase.cs | 2 +- OpenRa.Game/Traits/Activities/Sell.cs | 2 +- OpenRa.Game/Traits/Activities/UndeployMcv.cs | 2 +- OpenRa.Game/Traits/Activities/UnloadCargo.cs | 6 +++--- OpenRa.Game/Traits/AttackBase.cs | 10 +++++----- OpenRa.Game/Traits/AutoHeal.cs | 2 +- OpenRa.Game/Traits/AutoTarget.cs | 2 +- OpenRa.Game/Traits/Building.cs | 4 ++-- OpenRa.Game/Traits/Cloak.cs | 2 +- OpenRa.Game/Traits/ConstructionYard.cs | 12 +++++------ OpenRa.Game/Traits/Explodes.cs | 2 +- OpenRa.Game/Traits/GeneratesGap.cs | 2 +- OpenRa.Game/Traits/Harvester.cs | 2 +- OpenRa.Game/Traits/InvisibleToOthers.cs | 2 +- OpenRa.Game/Traits/IronCurtainable.cs | 2 +- OpenRa.Game/Traits/McvDeploy.cs | 2 +- OpenRa.Game/Traits/Mobile.cs | 20 +++++++++---------- OpenRa.Game/Traits/PlaceBuilding.cs | 6 +++--- OpenRa.Game/Traits/Production.cs | 6 +++--- OpenRa.Game/Traits/ProductionQueue.cs | 8 ++++---- OpenRa.Game/Traits/ProductionSurround.cs | 2 +- OpenRa.Game/Traits/RallyPoint.cs | 2 +- OpenRa.Game/Traits/RenderBuilding.cs | 10 +++++----- .../Traits/RenderBuildingWarFactory.cs | 2 +- OpenRa.Game/Traits/RenderInfantry.cs | 2 +- OpenRa.Game/Traits/SeedsOre.cs | 4 ++-- OpenRa.Game/Traits/SquishByTank.cs | 2 +- OpenRa.Game/Traits/StoresOre.cs | 4 ++-- OpenRa.Game/Traits/Submarine.cs | 2 +- OpenRa.Game/Traits/Unit.cs | 2 +- OpenRa.Mods.Aftermath/ChronoshiftDeploy.cs | 2 +- OpenRa.Mods.Aftermath/DemoTruck.cs | 4 ++-- OpenRa.Mods.RA/Activities/CaptureBuilding.cs | 2 +- OpenRa.Mods.RA/Activities/Demolish.cs | 2 +- OpenRa.Mods.RA/Activities/Infiltrate.cs | 2 +- OpenRa.Mods.RA/Activities/Steal.cs | 2 +- OpenRa.Mods.RA/Mine.cs | 10 +++++----- OpenRa.Mods.RA/Minelayer.cs | 4 ++-- OpenRa.Mods.RA/RenderSpy.cs | 6 +++--- 49 files changed, 106 insertions(+), 106 deletions(-) diff --git a/OpenRa.Game/Traits/AcceptsOre.cs b/OpenRa.Game/Traits/AcceptsOre.cs index 9b77613595..18145caa21 100644 --- a/OpenRa.Game/Traits/AcceptsOre.cs +++ b/OpenRa.Game/Traits/AcceptsOre.cs @@ -11,7 +11,7 @@ namespace OpenRa.Traits { public AcceptsOre(Actor self) { - Game.world.AddFrameEndTask( + self.World.AddFrameEndTask( w => { /* create the free harvester! */ var harvester = w.CreateActor("harv", self.Location + new int2(1, 2), self.Owner); diff --git a/OpenRa.Game/Traits/Activities/DeliverOre.cs b/OpenRa.Game/Traits/Activities/DeliverOre.cs index 93b7d4b1f0..fe20499cd9 100644 --- a/OpenRa.Game/Traits/Activities/DeliverOre.cs +++ b/OpenRa.Game/Traits/Activities/DeliverOre.cs @@ -42,7 +42,7 @@ namespace OpenRa.Traits.Activities umt = mobile.GetMovementType(), checkForBlocked = false, }; - var refineries = Game.world.Actors.Where( x => x.traits.Contains() + var refineries = self.World.Actors.Where( x => x.traits.Contains() && x.Owner == self.Owner ).ToList(); if( refinery != null ) search.AddInitialCell( refinery.Location + refineryDeliverOffset ); @@ -50,7 +50,7 @@ namespace OpenRa.Traits.Activities foreach( var r in refineries ) search.AddInitialCell( r.Location + refineryDeliverOffset ); - var path = Game.world.PathFinder.FindPath( search ); + var path = self.World.PathFinder.FindPath( search ); path.Reverse(); if( path.Count != 0 ) { diff --git a/OpenRa.Game/Traits/Activities/DeployMcv.cs b/OpenRa.Game/Traits/Activities/DeployMcv.cs index be7bd22ee5..f3bf4c9fc7 100755 --- a/OpenRa.Game/Traits/Activities/DeployMcv.cs +++ b/OpenRa.Game/Traits/Activities/DeployMcv.cs @@ -8,16 +8,16 @@ namespace OpenRa.Traits.Activities public IActivity Tick( Actor self ) { - Game.world.AddFrameEndTask( _ => + self.World.AddFrameEndTask( _ => { self.Health = 0; - Game.world.Remove( self ); - if (self.Owner == Game.world.LocalPlayer) + self.World.Remove( self ); + if (self.Owner == self.World.LocalPlayer) { Sound.Play("placbldg.aud"); Sound.Play("build5.aud"); } - Game.world.CreateActor( "fact", self.Location - new int2( 1, 1 ), self.Owner ); + self.World.CreateActor( "fact", self.Location - new int2( 1, 1 ), self.Owner ); } ); return this; } diff --git a/OpenRa.Game/Traits/Activities/EnterTransport.cs b/OpenRa.Game/Traits/Activities/EnterTransport.cs index d320b04929..5acfe04a1d 100644 --- a/OpenRa.Game/Traits/Activities/EnterTransport.cs +++ b/OpenRa.Game/Traits/Activities/EnterTransport.cs @@ -26,7 +26,7 @@ namespace OpenRa.Traits.Activities return NextActivity; cargo.Load(transport, self); - Game.world.AddFrameEndTask(w => w.Remove(self)); + self.World.AddFrameEndTask(w => w.Remove(self)); return this; } diff --git a/OpenRa.Game/Traits/Activities/Harvest.cs b/OpenRa.Game/Traits/Activities/Harvest.cs index 3e2c8516e2..9ac0d84089 100644 --- a/OpenRa.Game/Traits/Activities/Harvest.cs +++ b/OpenRa.Game/Traits/Activities/Harvest.cs @@ -36,8 +36,8 @@ namespace OpenRa.Traits.Activities var renderUnit = self.traits.Get(); /* better have one of these! */ var isGem = false; - if (!Game.world.Map.ContainsResource(self.Location) || - !Game.world.Map.Harvest(self.Location, out isGem)) + if (!self.World.Map.ContainsResource(self.Location) || + !self.World.Map.Harvest(self.Location, out isGem)) return false; var harvestAnim = "harvest" + Util.QuantizeFacing(unit.Facing, 8); @@ -58,12 +58,12 @@ namespace OpenRa.Traits.Activities { var search = new PathSearch { - heuristic = loc => (Game.world.Map.ContainsResource(loc) ? 0 : 1), + heuristic = loc => (self.World.Map.ContainsResource(loc) ? 0 : 1), umt = UnitMovementType.Wheel, checkForBlocked = true }; search.AddInitialCell(self.Location); - return Game.world.PathFinder.FindPath(search); + return self.World.PathFinder.FindPath(search); })); self.QueueActivity(new Harvest()); } diff --git a/OpenRa.Game/Traits/Activities/HeliLand.cs b/OpenRa.Game/Traits/Activities/HeliLand.cs index 4d1600962b..c9d7e983f2 100644 --- a/OpenRa.Game/Traits/Activities/HeliLand.cs +++ b/OpenRa.Game/Traits/Activities/HeliLand.cs @@ -16,7 +16,7 @@ namespace OpenRa.Traits.Activities if (unit.Altitude == 0) return NextActivity; - if (requireSpace && !Game.world.IsCellBuildable(self.Location, UnitMovementType.Foot)) + if (requireSpace && !self.World.IsCellBuildable(self.Location, UnitMovementType.Foot)) return this; // fail to land if no space --unit.Altitude; diff --git a/OpenRa.Game/Traits/Activities/HeliReturn.cs b/OpenRa.Game/Traits/Activities/HeliReturn.cs index e5fbc74a25..6646d5e83c 100644 --- a/OpenRa.Game/Traits/Activities/HeliReturn.cs +++ b/OpenRa.Game/Traits/Activities/HeliReturn.cs @@ -9,7 +9,7 @@ namespace OpenRa.Traits.Activities static Actor ChooseHelipad(Actor self) { - return Game.world.Actors.FirstOrDefault( + return self.World.Actors.FirstOrDefault( a => a.Info.Name == "hpad" && a.Owner == self.Owner && !Reservable.IsReserved(a)); diff --git a/OpenRa.Game/Traits/Activities/Move.cs b/OpenRa.Game/Traits/Activities/Move.cs index c39abdeb6c..c016f87264 100755 --- a/OpenRa.Game/Traits/Activities/Move.cs +++ b/OpenRa.Game/Traits/Activities/Move.cs @@ -20,7 +20,7 @@ namespace OpenRa.Traits.Activities public Move( int2 destination, int nearEnough ) { - this.getPath = ( self, mobile ) => Game.world.PathFinder.FindUnitPath( + this.getPath = ( self, mobile ) => self.World.PathFinder.FindUnitPath( self.Location, destination, mobile.GetMovementType() ); this.destination = destination; @@ -30,9 +30,9 @@ namespace OpenRa.Traits.Activities public Move(int2 destination, Actor ignoreBuilding) { this.getPath = (self, mobile) => - Game.world.PathFinder.FindPath( + self.World.PathFinder.FindPath( PathSearch.FromPoint( self.Location, destination, mobile.GetMovementType(), false ) - .WithCustomBlocker( Game.world.PathFinder.AvoidUnitsNear( self.Location, 4 )).WithIgnoredBuilding( ignoreBuilding )); + .WithCustomBlocker( self.World.PathFinder.AvoidUnitsNear( self.Location, 4 )).WithIgnoredBuilding( ignoreBuilding )); this.destination = destination; this.nearEnough = 0; @@ -41,7 +41,7 @@ namespace OpenRa.Traits.Activities public Move( Actor target, int range ) { - this.getPath = ( self, mobile ) => Game.world.PathFinder.FindUnitPathToRange( + this.getPath = ( self, mobile ) => self.World.PathFinder.FindUnitPathToRange( self.Location, target.Location, mobile.GetMovementType(), range ); this.destination = null; @@ -57,13 +57,13 @@ namespace OpenRa.Traits.Activities bool CanEnterCell( int2 c, Actor self ) { - if (!Game.world.BuildingInfluence.CanMoveHere(c) - && Game.world.BuildingInfluence.GetBuildingAt(c) != ignoreBuilding) + if (!self.World.BuildingInfluence.CanMoveHere(c) + && self.World.BuildingInfluence.GetBuildingAt(c) != ignoreBuilding) return false; // Cannot enter a cell if any unit inside is uncrushable // This will need to be updated for multiple-infantry-in-a-cell - return (!Game.world.UnitInfluence.GetUnitsAt(c).Any(a => a != self && !Game.world.IsActorCrushableByActor(a, self))); + return (!self.World.UnitInfluence.GetUnitsAt(c).Any(a => a != self && !self.World.IsActorCrushableByActor(a, self))); } public IActivity Tick( Actor self ) @@ -144,10 +144,10 @@ namespace OpenRa.Traits.Activities return null; } - Game.world.UnitInfluence.Remove( self, mobile ); + self.World.UnitInfluence.Remove( self, mobile ); var newPath = getPath(self, mobile).TakeWhile(a => a != self.Location).ToList(); - Game.world.UnitInfluence.Add( self, mobile ); + self.World.UnitInfluence.Add( self, mobile ); if (newPath.Count != 0) path = newPath; diff --git a/OpenRa.Game/Traits/Activities/Rearm.cs b/OpenRa.Game/Traits/Activities/Rearm.cs index 479f55d449..e8c7df209d 100644 --- a/OpenRa.Game/Traits/Activities/Rearm.cs +++ b/OpenRa.Game/Traits/Activities/Rearm.cs @@ -20,7 +20,7 @@ namespace OpenRa.Traits.Activities { if (!limitedAmmo.GiveAmmo()) return NextActivity; - var hostBuilding = Game.world.FindUnits(self.CenterLocation, self.CenterLocation) + var hostBuilding = self.World.FindUnits(self.CenterLocation, self.CenterLocation) .FirstOrDefault(a => a.traits.Contains()); if (hostBuilding != null) diff --git a/OpenRa.Game/Traits/Activities/Repair.cs b/OpenRa.Game/Traits/Activities/Repair.cs index 49254828df..6d5445257a 100644 --- a/OpenRa.Game/Traits/Activities/Repair.cs +++ b/OpenRa.Game/Traits/Activities/Repair.cs @@ -35,7 +35,7 @@ namespace OpenRa.Traits.Activities if (self.Health == hp) return NextActivity; - var hostBuilding = Game.world.FindUnits(self.CenterLocation, self.CenterLocation) + var hostBuilding = self.World.FindUnits(self.CenterLocation, self.CenterLocation) .FirstOrDefault(a => a.traits.Contains()); if (hostBuilding != null) diff --git a/OpenRa.Game/Traits/Activities/ReturnToBase.cs b/OpenRa.Game/Traits/Activities/ReturnToBase.cs index b366fbc3e8..3374fe7128 100644 --- a/OpenRa.Game/Traits/Activities/ReturnToBase.cs +++ b/OpenRa.Game/Traits/Activities/ReturnToBase.cs @@ -18,7 +18,7 @@ namespace OpenRa.Traits.Activities Actor ChooseAirfield(Actor self) { - var airfield = Game.world.Actors + var airfield = self.World.Actors .Where(a => a.Info.Name == "afld" && a.Owner == self.Owner && !Reservable.IsReserved(a)) diff --git a/OpenRa.Game/Traits/Activities/Sell.cs b/OpenRa.Game/Traits/Activities/Sell.cs index 917678ed36..e5189bac57 100644 --- a/OpenRa.Game/Traits/Activities/Sell.cs +++ b/OpenRa.Game/Traits/Activities/Sell.cs @@ -23,7 +23,7 @@ namespace OpenRa.Traits.Activities self.Health = 0; foreach (var ns in self.traits.WithInterface()) ns.Sold(self); - Game.world.AddFrameEndTask( _ => Game.world.Remove( self ) ); + self.World.AddFrameEndTask( _ => self.World.Remove( self ) ); // todo: give dudes } diff --git a/OpenRa.Game/Traits/Activities/UndeployMcv.cs b/OpenRa.Game/Traits/Activities/UndeployMcv.cs index 54f295d59d..4f5f23c6c9 100644 --- a/OpenRa.Game/Traits/Activities/UndeployMcv.cs +++ b/OpenRa.Game/Traits/Activities/UndeployMcv.cs @@ -24,7 +24,7 @@ namespace OpenRa.Traits.Activities { var rb = self.traits.Get(); rb.PlayCustomAnimBackwards(self, "make", - () => Game.world.AddFrameEndTask(w => DoUndeploy(w,self))); + () => self.World.AddFrameEndTask(w => DoUndeploy(w,self))); Sound.Play("cashturn.aud"); started = true; diff --git a/OpenRa.Game/Traits/Activities/UnloadCargo.cs b/OpenRa.Game/Traits/Activities/UnloadCargo.cs index 06c59333ca..2d4ac9f803 100644 --- a/OpenRa.Game/Traits/Activities/UnloadCargo.cs +++ b/OpenRa.Game/Traits/Activities/UnloadCargo.cs @@ -13,13 +13,13 @@ namespace OpenRa.Traits.Activities int2? ChooseExitTile(Actor self) { // is anyone still hogging this tile? - if (Game.world.UnitInfluence.GetUnitsAt(self.Location).Count() > 1) + if (self.World.UnitInfluence.GetUnitsAt(self.Location).Count() > 1) return null; for (var i = -1; i < 2; i++) for (var j = -1; j < 2; j++) if ((i != 0 || j != 0) && - Game.world.IsCellBuildable(self.Location + new int2(i, j), + self.World.IsCellBuildable(self.Location + new int2(i, j), UnitMovementType.Foot)) return self.Location + new int2(i, j); @@ -54,7 +54,7 @@ namespace OpenRa.Traits.Activities var actor = cargo.Unload(self); - Game.world.AddFrameEndTask(w => + self.World.AddFrameEndTask(w => { w.Add(actor); actor.traits.Get().TeleportTo(actor, self.Location); diff --git a/OpenRa.Game/Traits/AttackBase.cs b/OpenRa.Game/Traits/AttackBase.cs index 58d95cdbce..af9dcfb010 100644 --- a/OpenRa.Game/Traits/AttackBase.cs +++ b/OpenRa.Game/Traits/AttackBase.cs @@ -150,18 +150,18 @@ namespace OpenRa.Traits var destAltitude = destUnit != null ? destUnit.Altitude : 0; if( weapon.RenderAsTesla ) - Game.world.Add( new TeslaZap( firePos, thisTarget.CenterLocation.ToInt2() ) ); + self.World.Add( new TeslaZap( firePos, thisTarget.CenterLocation.ToInt2() ) ); if (Rules.ProjectileInfo[weapon.Projectile].ROT != 0) { var fireFacing = thisLocalOffset.ElementAtOrDefault(2) + (self.traits.Contains() ? self.traits.Get().turretFacing : unit.Facing); - Game.world.Add(new Missile(weapon, self.Owner, self, + self.World.Add(new Missile(weapon, self.Owner, self, firePos, thisTarget, srcAltitude, fireFacing)); } else - Game.world.Add(new Bullet(weapon, self.Owner, self, + self.World.Add(new Bullet(weapon, self.Owner, self, firePos, thisTarget.CenterLocation.ToInt2(), srcAltitude, destAltitude)); if (!string.IsNullOrEmpty(weapon.Report)) @@ -205,8 +205,8 @@ namespace OpenRa.Traits self.CancelActivity(); QueueAttack(self, order); - if (self.Owner == Game.world.LocalPlayer) - Game.world.AddFrameEndTask(w => w.Add(new FlashTarget(order.TargetActor))); + if (self.Owner == self.World.LocalPlayer) + self.World.AddFrameEndTask(w => w.Add(new FlashTarget(order.TargetActor))); } else target = null; diff --git a/OpenRa.Game/Traits/AutoHeal.cs b/OpenRa.Game/Traits/AutoHeal.cs index ebaa115fac..f81564e3b9 100644 --- a/OpenRa.Game/Traits/AutoHeal.cs +++ b/OpenRa.Game/Traits/AutoHeal.cs @@ -43,7 +43,7 @@ namespace OpenRa.Traits Actor ChooseTarget(Actor self, float range) { - var inRange = Game.world.FindUnitsInCircle(self.CenterLocation, Game.CellSize * range); + var inRange = self.World.FindUnitsInCircle(self.CenterLocation, Game.CellSize * range); return inRange .Where(a => a.Owner == self.Owner && a != self) /* todo: one day deal with friendly players */ diff --git a/OpenRa.Game/Traits/AutoTarget.cs b/OpenRa.Game/Traits/AutoTarget.cs index 7044fb240c..cef1214bc9 100644 --- a/OpenRa.Game/Traits/AutoTarget.cs +++ b/OpenRa.Game/Traits/AutoTarget.cs @@ -27,7 +27,7 @@ namespace OpenRa.Traits Actor ChooseTarget(Actor self, float range) { - var inRange = Game.world.FindUnitsInCircle(self.CenterLocation, Game.CellSize * range); + var inRange = self.World.FindUnitsInCircle(self.CenterLocation, Game.CellSize * range); return inRange .Where(a => a.Owner != null && a.Owner != self.Owner) /* todo: one day deal with friendly players */ diff --git a/OpenRa.Game/Traits/Building.cs b/OpenRa.Game/Traits/Building.cs index 2c61fa4d68..7aa7582137 100644 --- a/OpenRa.Game/Traits/Building.cs +++ b/OpenRa.Game/Traits/Building.cs @@ -97,7 +97,7 @@ namespace OpenRa.Traits // If the disabled state has changed since the last frame if (Disabled ^ wasDisabled && (wasDisabled = Disabled)) // Yes, I mean assignment - Game.world.AddFrameEndTask(w => w.Add(new PowerDownIndicator(self))); + self.World.AddFrameEndTask(w => w.Add(new PowerDownIndicator(self))); if (!isRepairing) return; @@ -113,7 +113,7 @@ namespace OpenRa.Traits return; } - Game.world.AddFrameEndTask(w => w.Add(new RepairIndicator(self))); + self.World.AddFrameEndTask(w => w.Add(new RepairIndicator(self))); self.InflictDamage(self, -hpToRepair, Rules.WarheadInfo["Super"]); if (self.Health == maxHP) { diff --git a/OpenRa.Game/Traits/Cloak.cs b/OpenRa.Game/Traits/Cloak.cs index 7af40d6f5b..6bd0b9fe1f 100644 --- a/OpenRa.Game/Traits/Cloak.cs +++ b/OpenRa.Game/Traits/Cloak.cs @@ -30,7 +30,7 @@ namespace OpenRa.Traits if (remainingUncloakTime > 0) return rs; - if (self.Owner == Game.world.LocalPlayer) + if (self.Owner == self.World.LocalPlayer) return rs.Select(a => a.WithPalette(PaletteType.Shadow)); else return new Renderable[] { }; diff --git a/OpenRa.Game/Traits/ConstructionYard.cs b/OpenRa.Game/Traits/ConstructionYard.cs index c4b1e915eb..36486265d7 100644 --- a/OpenRa.Game/Traits/ConstructionYard.cs +++ b/OpenRa.Game/Traits/ConstructionYard.cs @@ -27,7 +27,7 @@ namespace OpenRa.Traits { // force-move if (!mi.Modifiers.HasModifier(Modifiers.Alt)) return null; - if (!Game.world.IsActorCrushableByActor(underCursor, self)) return null; + if (!self.World.IsActorCrushableByActor(underCursor, self)) return null; } return new Order("Move", self, null, xy, null); @@ -50,14 +50,14 @@ namespace OpenRa.Traits public bool CanEnterCell(int2 a) { - if (!Game.world.BuildingInfluence.CanMoveHere(a)) return false; + if (!self.World.BuildingInfluence.CanMoveHere(a)) return false; var crushable = true; - foreach (Actor actor in Game.world.UnitInfluence.GetUnitsAt(a)) + foreach (Actor actor in self.World.UnitInfluence.GetUnitsAt(a)) { if (actor == self) continue; - if (!Game.world.IsActorCrushableByActor(actor, self)) + if (!self.World.IsActorCrushableByActor(actor, self)) { crushable = false; break; @@ -66,9 +66,9 @@ namespace OpenRa.Traits if (!crushable) return false; - return Game.world.Map.IsInMap(a.X, a.Y) && + return self.World.Map.IsInMap(a.X, a.Y) && TerrainCosts.Cost(GetMovementType(), - Game.world.TileSet.GetWalkability(Game.world.Map.MapTiles[a.X, a.Y])) < double.PositiveInfinity; + self.World.TileSet.GetWalkability(self.World.Map.MapTiles[a.X, a.Y])) < double.PositiveInfinity; } } } diff --git a/OpenRa.Game/Traits/Explodes.cs b/OpenRa.Game/Traits/Explodes.cs index 3cfc307bdf..4becd48968 100644 --- a/OpenRa.Game/Traits/Explodes.cs +++ b/OpenRa.Game/Traits/Explodes.cs @@ -13,7 +13,7 @@ namespace OpenRa.Traits var unit = self.traits.GetOrDefault(); var altitude = unit != null ? unit.Altitude : 0; - Game.world.AddFrameEndTask( + self.World.AddFrameEndTask( w => w.Add(new Bullet("UnitExplode", e.Attacker.Owner, e.Attacker, self.CenterLocation.ToInt2(), self.CenterLocation.ToInt2(), altitude, altitude))); diff --git a/OpenRa.Game/Traits/GeneratesGap.cs b/OpenRa.Game/Traits/GeneratesGap.cs index 3ed67c8322..e07ad73b69 100644 --- a/OpenRa.Game/Traits/GeneratesGap.cs +++ b/OpenRa.Game/Traits/GeneratesGap.cs @@ -28,7 +28,7 @@ namespace OpenRa.Traits // Gap Generator building; powered down return (self.traits.Contains() && self.traits.Get().Disabled) ? new int2[] {} - : Game.world.FindTilesInCircle(self.Location, range); + : self.World.FindTilesInCircle(self.Location, range); } } } diff --git a/OpenRa.Game/Traits/Harvester.cs b/OpenRa.Game/Traits/Harvester.cs index 904defe75c..a6e6acbfb8 100644 --- a/OpenRa.Game/Traits/Harvester.cs +++ b/OpenRa.Game/Traits/Harvester.cs @@ -41,7 +41,7 @@ namespace OpenRa.Traits && underCursor.traits.Contains() && !IsEmpty) return new Order("Deliver", self, underCursor, int2.Zero, null); - if (underCursor == null && Game.world.Map.ContainsResource(xy)) + if (underCursor == null && self.World.Map.ContainsResource(xy)) return new Order("Harvest", self, null, xy, null); return null; diff --git a/OpenRa.Game/Traits/InvisibleToOthers.cs b/OpenRa.Game/Traits/InvisibleToOthers.cs index c42e12b3de..bfec6d643f 100644 --- a/OpenRa.Game/Traits/InvisibleToOthers.cs +++ b/OpenRa.Game/Traits/InvisibleToOthers.cs @@ -8,7 +8,7 @@ namespace OpenRa.Traits { public IEnumerable ModifyRender(Actor self, IEnumerable r) { - return Game.world.LocalPlayer == self.Owner + return self.World.LocalPlayer == self.Owner ? r : new Renderable[] { }; } } diff --git a/OpenRa.Game/Traits/IronCurtainable.cs b/OpenRa.Game/Traits/IronCurtainable.cs index 3645556022..4d761fc2a7 100644 --- a/OpenRa.Game/Traits/IronCurtainable.cs +++ b/OpenRa.Game/Traits/IronCurtainable.cs @@ -29,7 +29,7 @@ namespace OpenRa.Traits { var power = self.Owner.SupportPowers[order.TargetString].Impl; power.OnFireNotification(self, self.Location); - Game.world.AddFrameEndTask(w => w.Add(new InvulnEffect(self))); + self.World.AddFrameEndTask(w => w.Add(new InvulnEffect(self))); RemainingTicks = (int)(Rules.General.IronCurtain * 60 * 25); } } diff --git a/OpenRa.Game/Traits/McvDeploy.cs b/OpenRa.Game/Traits/McvDeploy.cs index 9876423e14..72c75ab5a5 100644 --- a/OpenRa.Game/Traits/McvDeploy.cs +++ b/OpenRa.Game/Traits/McvDeploy.cs @@ -25,7 +25,7 @@ namespace OpenRa.Traits if( order.OrderString == "DeployMcv" ) { var factBuildingInfo = Rules.Info[ "fact" ].Traits.Get(); - if( Game.world.CanPlaceBuilding( "fact", factBuildingInfo, self.Location - new int2( 1, 1 ), self ) ) + if( self.World.CanPlaceBuilding( "fact", factBuildingInfo, self.Location - new int2( 1, 1 ), self ) ) { self.CancelActivity(); self.QueueActivity( new Turn( 96 ) ); diff --git a/OpenRa.Game/Traits/Mobile.cs b/OpenRa.Game/Traits/Mobile.cs index d0ad28b242..0ccdda4176 100644 --- a/OpenRa.Game/Traits/Mobile.cs +++ b/OpenRa.Game/Traits/Mobile.cs @@ -21,7 +21,7 @@ namespace OpenRa.Traits public int2 fromCell { get { return __fromCell; } - set { Game.world.UnitInfluence.Remove(self, this); __fromCell = value; Game.world.UnitInfluence.Add(self, this); } + set { self.World.UnitInfluence.Remove(self, this); __fromCell = value; self.World.UnitInfluence.Add(self, this); } } public int2 toCell { @@ -30,11 +30,11 @@ namespace OpenRa.Traits { if (self.Location != value) { - Game.world.UnitInfluence.Remove(self, this); + self.World.UnitInfluence.Remove(self, this); self.Location = value; self.Owner.Shroud.Explore(self); } - Game.world.UnitInfluence.Add(self, this); + self.World.UnitInfluence.Add(self, this); } } @@ -42,7 +42,7 @@ namespace OpenRa.Traits { this.self = self; __fromCell = toCell; - Game.world.UnitInfluence.Add(self, this); + self.World.UnitInfluence.Add(self, this); } public void TeleportTo(Actor self, int2 xy) @@ -62,7 +62,7 @@ namespace OpenRa.Traits { // force-move if (!mi.Modifiers.HasModifier(Modifiers.Alt)) return null; - if (!Game.world.IsActorCrushableByActor(underCursor, self)) return null; + if (!self.World.IsActorCrushableByActor(underCursor, self)) return null; } if (Util.GetEffectiveSpeed(self) == 0) return null; /* allow disabling move orders from modifiers */ @@ -93,14 +93,14 @@ namespace OpenRa.Traits public bool CanEnterCell(int2 a) { - if (!Game.world.BuildingInfluence.CanMoveHere(a)) return false; + if (!self.World.BuildingInfluence.CanMoveHere(a)) return false; var crushable = true; - foreach (Actor actor in Game.world.UnitInfluence.GetUnitsAt(a)) + foreach (Actor actor in self.World.UnitInfluence.GetUnitsAt(a)) { if (actor == self) continue; - if (!Game.world.IsActorCrushableByActor(actor, self)) + if (!self.World.IsActorCrushableByActor(actor, self)) { crushable = false; break; @@ -109,9 +109,9 @@ namespace OpenRa.Traits if (!crushable) return false; - return Game.world.Map.IsInMap(a.X, a.Y) && + return self.World.Map.IsInMap(a.X, a.Y) && TerrainCosts.Cost(GetMovementType(), - Game.world.TileSet.GetWalkability(Game.world.Map.MapTiles[a.X, a.Y])) < double.PositiveInfinity; + self.World.TileSet.GetWalkability(self.World.Map.MapTiles[a.X, a.Y])) < double.PositiveInfinity; } public IEnumerable GetCurrentPath() diff --git a/OpenRa.Game/Traits/PlaceBuilding.cs b/OpenRa.Game/Traits/PlaceBuilding.cs index 64ff2ccac6..bd28b1ff04 100755 --- a/OpenRa.Game/Traits/PlaceBuilding.cs +++ b/OpenRa.Game/Traits/PlaceBuilding.cs @@ -14,7 +14,7 @@ namespace OpenRa.Traits { if( order.OrderString == "PlaceBuilding" ) { - Game.world.AddFrameEndTask( _ => + self.World.AddFrameEndTask( _ => { var queue = self.traits.Get(); var unit = Rules.Info[ order.TargetString ]; @@ -22,8 +22,8 @@ namespace OpenRa.Traits if( producing == null || producing.Item != order.TargetString || producing.RemainingTime != 0 ) return; - Game.world.CreateActor( order.TargetString, order.TargetLocation, order.Player ); - if (order.Player == Game.world.LocalPlayer) + self.World.CreateActor( order.TargetString, order.TargetLocation, order.Player ); + if (order.Player == self.World.LocalPlayer) { Sound.Play("placbldg.aud"); Sound.Play("build5.aud"); diff --git a/OpenRa.Game/Traits/Production.cs b/OpenRa.Game/Traits/Production.cs index 5562c043e5..a15ebdb240 100755 --- a/OpenRa.Game/Traits/Production.cs +++ b/OpenRa.Game/Traits/Production.cs @@ -32,10 +32,10 @@ namespace OpenRa.Traits public bool Produce( Actor self, ActorInfo producee ) { var location = CreationLocation( self, producee ); - if( location == null || Game.world.UnitInfluence.GetUnitsAt( location.Value ).Any() ) + if( location == null || self.World.UnitInfluence.GetUnitsAt( location.Value ).Any() ) return false; - var newUnit = Game.world.CreateActor( producee.Name, location.Value, self.Owner ); + var newUnit = self.World.CreateActor( producee.Name, location.Value, self.Owner ); newUnit.traits.Get().Facing = CreationFacing( self, newUnit ); ; var rp = self.traits.GetOrDefault(); @@ -86,7 +86,7 @@ namespace OpenRa.Traits // Cancel existing primaries foreach (var p in self.Info.Traits.Get().Produces) { - foreach (var b in Game.world.Actors.Where(x => x.traits.Contains() + foreach (var b in self.World.Actors.Where(x => x.traits.Contains() && x.Owner == self.Owner && x.traits.Get().IsPrimary == true && (x.Info.Traits.Get().Produces.Contains(p)))) diff --git a/OpenRa.Game/Traits/ProductionQueue.cs b/OpenRa.Game/Traits/ProductionQueue.cs index 01585f6a2d..7f698f3ce7 100755 --- a/OpenRa.Game/Traits/ProductionQueue.cs +++ b/OpenRa.Game/Traits/ProductionQueue.cs @@ -49,11 +49,11 @@ namespace OpenRa.Traits BeginProduction( unit.Category, new ProductionItem( order.TargetString, (int)time, ui.Cost, - () => Game.world.AddFrameEndTask( + () => self.World.AddFrameEndTask( _ => { var isBuilding = unit.Traits.Contains(); - if( !hasPlayedSound && order.Player == Game.world.LocalPlayer ) + if( !hasPlayedSound && order.Player == self.World.LocalPlayer ) { Sound.Play( isBuilding ? "conscmp1.aud" : "unitrdy1.aud" ); hasPlayedSound = true; @@ -131,7 +131,7 @@ namespace OpenRa.Traits Actor producer = null; // Prioritise primary structure in build order - var primaryProducers = Game.world.Actors + var primaryProducers = self.World.Actors .Where(x => x.traits.Contains() && producerTypes.Contains(x.Info) && x.Owner == self.Owner @@ -152,7 +152,7 @@ namespace OpenRa.Traits // Pick the first available producer if (producer == null) { - producer = Game.world.Actors + producer = self.World.Actors .Where( x => producerTypes.Contains( x.Info ) && x.Owner == self.Owner ) .FirstOrDefault(); } diff --git a/OpenRa.Game/Traits/ProductionSurround.cs b/OpenRa.Game/Traits/ProductionSurround.cs index 6944e986f4..00f06e2426 100644 --- a/OpenRa.Game/Traits/ProductionSurround.cs +++ b/OpenRa.Game/Traits/ProductionSurround.cs @@ -20,7 +20,7 @@ namespace OpenRa.Traits for (var j = min.Y; j <= max.Y; j++) for (var i = min.X; i <= max.X; i++) - if (Game.world.IsCellBuildable(new int2(i, j), umt)) + if (self.World.IsCellBuildable(new int2(i, j), umt)) return new int2(i, j); return null; diff --git a/OpenRa.Game/Traits/RallyPoint.cs b/OpenRa.Game/Traits/RallyPoint.cs index e53b225122..570e346af3 100644 --- a/OpenRa.Game/Traits/RallyPoint.cs +++ b/OpenRa.Game/Traits/RallyPoint.cs @@ -28,7 +28,7 @@ namespace OpenRa.Traits public IEnumerable Render(Actor self) { var uog = Game.controller.orderGenerator as UnitOrderGenerator; - if (uog != null && self.Owner == Game.world.LocalPlayer && uog.selection.Contains(self)) + if (uog != null && self.Owner == self.World.LocalPlayer && uog.selection.Contains(self)) yield return Util.Centered(self, anim.Image, Util.CenterOfCell(rallyPoint)); } diff --git a/OpenRa.Game/Traits/RenderBuilding.cs b/OpenRa.Game/Traits/RenderBuilding.cs index 38c2b08f21..b2fdc5b3d6 100644 --- a/OpenRa.Game/Traits/RenderBuilding.cs +++ b/OpenRa.Game/Traits/RenderBuilding.cs @@ -19,7 +19,7 @@ namespace OpenRa.Traits if( Game.skipMakeAnims ) Complete( self ); else - anim.PlayThen( "make", () => Game.world.AddFrameEndTask( _ => Complete( self ) ) ); + anim.PlayThen( "make", () => self.World.AddFrameEndTask( _ => Complete( self ) ) ); DoBib(self, false); } @@ -45,11 +45,11 @@ namespace OpenRa.Traits var p = self.Location + new int2(i % size, i / size + bibOffset); if (isRemove) { - if (Game.world.Map.MapTiles[p.X, p.Y].smudge == (byte)(i + startIndex)) - Game.world.Map.MapTiles[ p.X, p.Y ].smudge = 0; + if (self.World.Map.MapTiles[p.X, p.Y].smudge == (byte)(i + startIndex)) + self.World.Map.MapTiles[ p.X, p.Y ].smudge = 0; } else - Game.world.Map.MapTiles[p.X, p.Y].smudge = (byte)(i + startIndex); + self.World.Map.MapTiles[p.X, p.Y].smudge = (byte)(i + startIndex); } } } @@ -87,7 +87,7 @@ namespace OpenRa.Traits break; case DamageState.Dead: DoBib(self, true); - Game.world.AddFrameEndTask(w => w.Add(new Explosion(self.CenterLocation.ToInt2(), 7, false))); + self.World.AddFrameEndTask(w => w.Add(new Explosion(self.CenterLocation.ToInt2(), 7, false))); break; } } diff --git a/OpenRa.Game/Traits/RenderBuildingWarFactory.cs b/OpenRa.Game/Traits/RenderBuildingWarFactory.cs index 4cabc0f7e9..0270bc73e3 100644 --- a/OpenRa.Game/Traits/RenderBuildingWarFactory.cs +++ b/OpenRa.Game/Traits/RenderBuildingWarFactory.cs @@ -34,7 +34,7 @@ namespace OpenRa.Traits public void Tick(Actor self) { var b = self.GetBounds(false); - if (isOpen && !Game.world.UnitInfluence.GetUnitsAt(((1/24f) * self.CenterLocation).ToInt2()).Any()) + if (isOpen && !self.World.UnitInfluence.GetUnitsAt(((1/24f) * self.CenterLocation).ToInt2()).Any()) { isOpen = false; roof.PlayBackwardsThen(GetPrefix(self) + "build-top", () => roof.Play(GetPrefix(self) + "idle-top")); diff --git a/OpenRa.Game/Traits/RenderInfantry.cs b/OpenRa.Game/Traits/RenderInfantry.cs index ac186c25d6..6336c7ed2e 100644 --- a/OpenRa.Game/Traits/RenderInfantry.cs +++ b/OpenRa.Game/Traits/RenderInfantry.cs @@ -77,7 +77,7 @@ namespace OpenRa.Traits if (e.DamageState == DamageState.Dead) { Sound.PlayVoice("Die", self); - Game.world.AddFrameEndTask(w => w.Add(new Corpse(self, e.Warhead.InfDeath))); + self.World.AddFrameEndTask(w => w.Add(new Corpse(self, e.Warhead.InfDeath))); } } } diff --git a/OpenRa.Game/Traits/SeedsOre.cs b/OpenRa.Game/Traits/SeedsOre.cs index 08bd8ae6f8..139b5c8881 100644 --- a/OpenRa.Game/Traits/SeedsOre.cs +++ b/OpenRa.Game/Traits/SeedsOre.cs @@ -22,8 +22,8 @@ namespace OpenRa.Traits for (var j = -1; j < 2; j++) for (var i = -1; i < 2; i++) if (Game.SharedRandom.NextDouble() < info.Chance) - if (Game.world.OreCanSpreadInto(self.Location.X + i, self.Location.Y + j)) - Game.world.Map.AddOre(self.Location.X + i, self.Location.Y + j); + if (self.World.OreCanSpreadInto(self.Location.X + i, self.Location.Y + j)) + self.World.Map.AddOre(self.Location.X + i, self.Location.Y + j); ticks = info.Interval; } diff --git a/OpenRa.Game/Traits/SquishByTank.cs b/OpenRa.Game/Traits/SquishByTank.cs index 46584a8901..9c12eec3be 100644 --- a/OpenRa.Game/Traits/SquishByTank.cs +++ b/OpenRa.Game/Traits/SquishByTank.cs @@ -30,7 +30,7 @@ namespace OpenRa.Traits public bool IsCrushableBy(UnitMovementType umt, Player player) { - if (player == Game.world.LocalPlayer) return false; + if (player == self.World.LocalPlayer) return false; switch (umt) { case UnitMovementType.Track: return true; diff --git a/OpenRa.Game/Traits/StoresOre.cs b/OpenRa.Game/Traits/StoresOre.cs index fd9233cbcf..ef99c154c9 100644 --- a/OpenRa.Game/Traits/StoresOre.cs +++ b/OpenRa.Game/Traits/StoresOre.cs @@ -18,7 +18,7 @@ namespace OpenRa.Traits self.Owner.TakeCash(toSteal); thief.Owner.GiveCash(toSteal); - if (Game.world.LocalPlayer == thief.Owner) + if (self.World.LocalPlayer == thief.Owner) Sound.Play("credit1.aud"); } @@ -27,7 +27,7 @@ namespace OpenRa.Traits var numPips = self.Info.Traits.Get().Pips; return Graphics.Util.MakeArray( numPips, - i => (Game.world.LocalPlayer.GetSiloFullness() > i * 1.0f / numPips) + i => (self.World.LocalPlayer.GetSiloFullness() > i * 1.0f / numPips) ? PipType.Yellow : PipType.Transparent ); } } diff --git a/OpenRa.Game/Traits/Submarine.cs b/OpenRa.Game/Traits/Submarine.cs index cd157a46ff..6a589d472a 100644 --- a/OpenRa.Game/Traits/Submarine.cs +++ b/OpenRa.Game/Traits/Submarine.cs @@ -33,7 +33,7 @@ namespace OpenRa.Traits if (remainingSurfaceTime > 0) return rs; - if (self.Owner == Game.world.LocalPlayer) + if (self.Owner == self.World.LocalPlayer) return rs.Select(a => a.WithPalette(PaletteType.Shadow)); else return new Renderable[] { }; diff --git a/OpenRa.Game/Traits/Unit.cs b/OpenRa.Game/Traits/Unit.cs index a1b9875803..0c1a423afc 100755 --- a/OpenRa.Game/Traits/Unit.cs +++ b/OpenRa.Game/Traits/Unit.cs @@ -23,7 +23,7 @@ namespace OpenRa.Traits public void Damaged(Actor self, AttackInfo e) { if (e.DamageState == DamageState.Dead) - if (self.Owner == Game.world.LocalPlayer) + if (self.Owner == self.World.LocalPlayer) Sound.Play(self.Info.Traits.Get().WaterBound ? "navylst1.aud" : "unitlst1.aud"); } diff --git a/OpenRa.Mods.Aftermath/ChronoshiftDeploy.cs b/OpenRa.Mods.Aftermath/ChronoshiftDeploy.cs index cec1075f5e..9fb760b74f 100644 --- a/OpenRa.Mods.Aftermath/ChronoshiftDeploy.cs +++ b/OpenRa.Mods.Aftermath/ChronoshiftDeploy.cs @@ -55,7 +55,7 @@ namespace OpenRa.Mods.Aftermath Sound.Play("chrotnk1.aud"); chargeTick = chargeLength; - foreach (var a in Game.world.Actors.Where(a => a.traits.Contains())) + foreach (var a in self.World.Actors.Where(a => a.traits.Contains())) a.traits.Get().DoChronoshift(); } } diff --git a/OpenRa.Mods.Aftermath/DemoTruck.cs b/OpenRa.Mods.Aftermath/DemoTruck.cs index 03ec10db80..8ff1eb2159 100644 --- a/OpenRa.Mods.Aftermath/DemoTruck.cs +++ b/OpenRa.Mods.Aftermath/DemoTruck.cs @@ -20,7 +20,7 @@ namespace OpenRa.Mods.Aftermath { // Override chronoshifting action to detonate vehicle var movement = self.traits.GetOrDefault(); - var chronosphere = Game.world.Actors.Where(a => a.Owner == order.Subject.Owner && a.traits.Contains()).FirstOrDefault(); + var chronosphere = self.World.Actors.Where(a => a.Owner == order.Subject.Owner && a.traits.Contains()).FirstOrDefault(); if (order.OrderString == "Chronoshift" && movement.CanEnterCell(order.TargetLocation)) { self.InflictDamage(chronosphere, self.Health, Rules.WarheadInfo["Super"]); @@ -44,7 +44,7 @@ namespace OpenRa.Mods.Aftermath var altitude = unit != null ? unit.Altitude : 0; int2 detonateLocation = self.CenterLocation.ToInt2(); - Game.world.AddFrameEndTask( + self.World.AddFrameEndTask( w => w.Add(new Bullet(self.Info.Traits.Get().PrimaryWeapon, detonatedBy.Owner, detonatedBy, detonateLocation, detonateLocation, altitude, altitude))); } diff --git a/OpenRa.Mods.RA/Activities/CaptureBuilding.cs b/OpenRa.Mods.RA/Activities/CaptureBuilding.cs index 362bf33c2f..cc96f690e0 100644 --- a/OpenRa.Mods.RA/Activities/CaptureBuilding.cs +++ b/OpenRa.Mods.RA/Activities/CaptureBuilding.cs @@ -37,7 +37,7 @@ namespace OpenRa.Mods.RA.Activities } // the engineer is sacrificed. - Game.world.AddFrameEndTask(w => w.Remove(self)); + self.World.AddFrameEndTask(w => w.Remove(self)); return NextActivity; } diff --git a/OpenRa.Mods.RA/Activities/Demolish.cs b/OpenRa.Mods.RA/Activities/Demolish.cs index fad7cb0244..b82ef9b3f9 100644 --- a/OpenRa.Mods.RA/Activities/Demolish.cs +++ b/OpenRa.Mods.RA/Activities/Demolish.cs @@ -16,7 +16,7 @@ namespace OpenRa.Mods.RA.Activities public IActivity Tick(Actor self) { if (target == null || target.IsDead) return NextActivity; - Game.world.AddFrameEndTask(w => w.Add(new DelayedAction(25*2, + self.World.AddFrameEndTask(w => w.Add(new DelayedAction(25*2, () => target.InflictDamage(self, target.Health, Rules.WarheadInfo["DemolishWarhead"])))); return NextActivity; } diff --git a/OpenRa.Mods.RA/Activities/Infiltrate.cs b/OpenRa.Mods.RA/Activities/Infiltrate.cs index 2e3b0b3d53..d3199ab12e 100644 --- a/OpenRa.Mods.RA/Activities/Infiltrate.cs +++ b/OpenRa.Mods.RA/Activities/Infiltrate.cs @@ -17,7 +17,7 @@ namespace OpenRa.Mods.RA.Activities foreach (var t in target.traits.WithInterface()) t.OnInfiltrate(target, self); - Game.world.AddFrameEndTask(w => w.Remove(self)); + self.World.AddFrameEndTask(w => w.Remove(self)); return NextActivity; } diff --git a/OpenRa.Mods.RA/Activities/Steal.cs b/OpenRa.Mods.RA/Activities/Steal.cs index 7d51b25b35..027aa98c62 100644 --- a/OpenRa.Mods.RA/Activities/Steal.cs +++ b/OpenRa.Mods.RA/Activities/Steal.cs @@ -23,7 +23,7 @@ namespace OpenRa.Mods.RA.Activities foreach (var t in target.traits.WithInterface()) t.OnSteal(target, self); - Game.world.AddFrameEndTask(w => w.Remove(self)); + self.World.AddFrameEndTask(w => w.Remove(self)); return NextActivity; } diff --git a/OpenRa.Mods.RA/Mine.cs b/OpenRa.Mods.RA/Mine.cs index 03883b9209..9b8ae4744b 100644 --- a/OpenRa.Mods.RA/Mine.cs +++ b/OpenRa.Mods.RA/Mine.cs @@ -21,7 +21,7 @@ namespace OpenRa.Mods.RA public Mine(Actor self) { this.self = self; - Game.world.UnitInfluence.Add(self, this); + self.World.UnitInfluence.Add(self, this); } public void OnCrush(Actor crusher) @@ -32,17 +32,17 @@ namespace OpenRa.Mods.RA var info = self.Info.Traits.Get(); var warhead = Rules.WarheadInfo[info.Warhead]; - Game.world.AddFrameEndTask(_ => + self.World.AddFrameEndTask(_ => { - Game.world.Remove(self); - Game.world.Add(new Explosion(self.CenterLocation.ToInt2(), warhead.Explosion, false)); + self.World.Remove(self); + self.World.Add(new Explosion(self.CenterLocation.ToInt2(), warhead.Explosion, false)); crusher.InflictDamage(crusher, info.Damage, warhead); }); } public bool IsPathableCrush(UnitMovementType umt, Player player) { - return !self.Info.Traits.Get().AvoidFriendly || (player != Game.world.LocalPlayer); + return !self.Info.Traits.Get().AvoidFriendly || (player != self.World.LocalPlayer); } public bool IsCrushableBy(UnitMovementType umt, Player player) diff --git a/OpenRa.Mods.RA/Minelayer.cs b/OpenRa.Mods.RA/Minelayer.cs index 770772ba69..8ae75d9059 100644 --- a/OpenRa.Mods.RA/Minelayer.cs +++ b/OpenRa.Mods.RA/Minelayer.cs @@ -17,7 +17,7 @@ namespace OpenRa.Mods.RA return null; // Ensure that the cell is empty except for the minelayer - if (Game.world.UnitInfluence.GetUnitsAt(xy).Any(a => a != self)) + if (self.World.UnitInfluence.GetUnitsAt(xy).Any(a => a != self)) return null; if (mi.Button == MouseButton.Right && underCursor == self) @@ -36,7 +36,7 @@ namespace OpenRa.Mods.RA // todo: delay a bit? (req making deploy-mine an activity) - Game.world.AddFrameEndTask( + self.World.AddFrameEndTask( w => w.CreateActor(self.Info.Traits.Get().Mine, self.Location, self.Owner)); } } diff --git a/OpenRa.Mods.RA/RenderSpy.cs b/OpenRa.Mods.RA/RenderSpy.cs index 122ad6612a..c8528b6375 100644 --- a/OpenRa.Mods.RA/RenderSpy.cs +++ b/OpenRa.Mods.RA/RenderSpy.cs @@ -21,15 +21,15 @@ namespace OpenRa.Mods.RA public IEnumerable ModifyRender(Actor self, IEnumerable r) { - if (self.Owner == Game.world.LocalPlayer) + if (self.Owner == self.World.LocalPlayer) return r; - return r.Select(a => a.WithPalette(Game.world.LocalPlayer.Palette)); + return r.Select(a => a.WithPalette(self.World.LocalPlayer.Palette)); } public override void Tick(Actor self) { - anim.ChangeImage(self.Owner == Game.world.LocalPlayer ? GetImage(self) : "e1"); + anim.ChangeImage(self.Owner == self.World.LocalPlayer ? GetImage(self) : "e1"); base.Tick(self); } } From 7f5c59a9677d3baeca4511394a898c1780b1fa19 Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 21 Jan 2010 13:20:46 +1300 Subject: [PATCH 07/18] passing refs to World in Chrome --- OpenRa.Game/Chrome.cs | 130 +++++++++++++++---------------- OpenRa.Game/Game.cs | 2 +- OpenRa.Game/Graphics/Viewport.cs | 8 +- 3 files changed, 70 insertions(+), 70 deletions(-) diff --git a/OpenRa.Game/Chrome.cs b/OpenRa.Game/Chrome.cs index 4eadafea70..d21745005b 100644 --- a/OpenRa.Game/Chrome.cs +++ b/OpenRa.Game/Chrome.cs @@ -144,14 +144,14 @@ namespace OpenRa TickRadarAnimation(); } - public void Draw() + public void Draw( World world ) { DrawDownloadBar(); - chromeCollection = (Game.world.LocalPlayer.Race == Race.Allies) ? "chrome-allies" : "chrome-soviet"; - radarCollection = (Game.world.LocalPlayer.Race == Race.Allies) ? "radar-allies" : "radar-soviet"; - paletteCollection = (Game.world.LocalPlayer.Race == Race.Allies) ? "palette-allies" : "palette-soviet"; - digitCollection = (Game.world.LocalPlayer.Race == Race.Allies) ? "digits-allies" : "digits-soviet"; + chromeCollection = (world.LocalPlayer.Race == Race.Allies) ? "chrome-allies" : "chrome-soviet"; + radarCollection = (world.LocalPlayer.Race == Race.Allies) ? "radar-allies" : "radar-soviet"; + paletteCollection = (world.LocalPlayer.Race == Race.Allies) ? "palette-allies" : "palette-soviet"; + digitCollection = (world.LocalPlayer.Race == Race.Allies) ? "digits-allies" : "digits-soviet"; buttons.Clear(); @@ -164,18 +164,18 @@ namespace OpenRa new int2(140, 15), Color.White); if (Game.Settings.PerfGraph) - PerfHistory.Render(renderer, Game.world.WorldRenderer.lineRenderer); + PerfHistory.Render(renderer, world.WorldRenderer.lineRenderer); - DrawRadar(); - DrawPower(); + DrawRadar( world ); + DrawPower( world ); rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer, chromeCollection, "moneybin"), new float2(Game.viewport.Width - 320, 0), PaletteType.Chrome); - DrawMoney(); + DrawMoney( world ); rgbaRenderer.Flush(); - DrawButtons(); + DrawButtons( world ); - int paletteHeight = DrawBuildPalette(currentTab); - DrawSupportPowers(); - DrawBuildTabs(paletteHeight); + int paletteHeight = DrawBuildPalette(world, currentTab); + DrawSupportPowers( world ); + DrawBuildTabs(world, paletteHeight); DrawChat(); DrawOptionsMenu(); } @@ -222,7 +222,7 @@ namespace OpenRa AddButton(r, _ => { }); } - public void DrawLobby() + public void DrawLobby( World world ) { DrawDownloadBar(); @@ -238,8 +238,8 @@ namespace OpenRa DrawDialogBackground(new Rectangle(r.Right - 330, r.Top + 40, 310, r.Bottom - 273 - r.Top - 40), panelSprites, false); - Game.world.Minimap.Update(); - Game.world.Minimap.Draw(new Rectangle(r.Right - 325, r.Top + 45, 300, 277), true); + world.Minimap.Update(); + world.Minimap.Draw(new Rectangle(r.Right - 325, r.Top + 45, 300, 277), true); renderer.DrawText2("Name", new int2(r.Left + 30, r.Top + 50), Color.White); renderer.DrawText2("Color", new int2(r.Left + 230, r.Top + 50), Color.White); @@ -303,9 +303,9 @@ namespace OpenRa } } - void DrawRadar() + void DrawRadar( World world ) { - var hasNewRadar = Game.world.Actors.Any(a => a.Owner == Game.world.LocalPlayer + var hasNewRadar = world.Actors.Any(a => a.Owner == world.LocalPlayer && a.traits.Contains() && a.traits.Get().IsActive(a)); @@ -328,36 +328,36 @@ namespace OpenRa if (radarAnimationFrame >= radarSlideAnimationLength) { RectangleF mapRect = new RectangleF(radarOrigin.X + 9, radarOrigin.Y+(192-radarMinimapHeight)/2, 192, radarMinimapHeight); - Game.world.Minimap.Draw(mapRect, false); + world.Minimap.Draw(mapRect, false); } } void AddButton(RectangleF r, Action b) { buttons.Add(Pair.New(r, b)); } - void DrawBuildTabs(int paletteHeight) + void DrawBuildTabs( World world, int paletteHeight) { const int tabWidth = 24; const int tabHeight = 40; var x = paletteOrigin.X - tabWidth; var y = paletteOrigin.Y + 9; - if (currentTab == null || !Rules.TechTree.BuildableItems(Game.world.LocalPlayer, currentTab).Any()) - ChooseAvailableTab(); + if (currentTab == null || !Rules.TechTree.BuildableItems(world.LocalPlayer, currentTab).Any()) + ChooseAvailableTab( world ); - var queue = Game.world.LocalPlayer.PlayerActor.traits.Get(); + var queue = world.LocalPlayer.PlayerActor.traits.Get(); foreach (var q in tabImageNames) { var groupName = q.Key; - if (!Rules.TechTree.BuildableItems(Game.world.LocalPlayer, groupName).Any()) + if (!Rules.TechTree.BuildableItems(world.LocalPlayer, groupName).Any()) { - CheckDeadTab(groupName); + CheckDeadTab( world, groupName ); continue; } string[] tabKeys = { "normal", "ready", "selected" }; var producing = queue.CurrentItem(groupName); var index = q.Key == currentTab ? 2 : (producing != null && producing.Done) ? 1 : 0; - var race = (Game.world.LocalPlayer.Race == Race.Allies) ? "allies" : "soviet"; + var race = (world.LocalPlayer.Race == Race.Allies) ? "allies" : "soviet"; rgbaRenderer.DrawSprite(ChromeProvider.GetImage(renderer,"tabs-"+tabKeys[index], race+"-"+q.Key), new float2(x, y), PaletteType.Chrome); buttons.Add(Pair.New(new RectangleF(x, y, tabWidth, tabHeight), @@ -378,22 +378,22 @@ namespace OpenRa paletteAnimating = true; } - void CheckDeadTab( string groupName ) + void CheckDeadTab( World world, string groupName ) { - var queue = Game.world.LocalPlayer.PlayerActor.traits.Get(); + var queue = world.LocalPlayer.PlayerActor.traits.Get(); foreach( var item in queue.AllItems( groupName ) ) - Game.controller.AddOrder(Order.CancelProduction(Game.world.LocalPlayer, item.Item)); + Game.controller.AddOrder(Order.CancelProduction(world.LocalPlayer, item.Item)); } - void ChooseAvailableTab() + void ChooseAvailableTab( World world ) { currentTab = tabImageNames.Select(q => q.Key).FirstOrDefault( - t => Rules.TechTree.BuildableItems(Game.world.LocalPlayer, t).Any()); + t => Rules.TechTree.BuildableItems(world.LocalPlayer, t).Any()); } - void DrawMoney() + void DrawMoney( World world ) { - var moneyDigits = Game.world.LocalPlayer.DisplayCash.ToString(); + var moneyDigits = world.LocalPlayer.DisplayCash.ToString(); var x = Game.viewport.Width - 65; foreach (var d in moneyDigits.Reverse()) { @@ -405,10 +405,10 @@ namespace OpenRa float? lastPowerProvidedPos; float? lastPowerDrainedPos; - void DrawPower() + void DrawPower( World world ) { // Nothing to draw - if (Game.world.LocalPlayer.PowerProvided == 0 && Game.world.LocalPlayer.PowerDrained == 0) + if (world.LocalPlayer.PowerProvided == 0 && world.LocalPlayer.PowerDrained == 0) return; // Draw bar horizontally @@ -416,18 +416,18 @@ namespace OpenRa var barEnd = barStart + new float2(powerSize.Width, 0); float powerScaleBy = 100; - var maxPower = Math.Max(Game.world.LocalPlayer.PowerProvided, Game.world.LocalPlayer.PowerDrained); + var maxPower = Math.Max(world.LocalPlayer.PowerProvided, world.LocalPlayer.PowerDrained); while (maxPower >= powerScaleBy) powerScaleBy *= 2; // Current power supply - var powerLevelTemp = barStart.X + (barEnd.X - barStart.X) * (Game.world.LocalPlayer.PowerProvided / powerScaleBy); + var powerLevelTemp = barStart.X + (barEnd.X - barStart.X) * (world.LocalPlayer.PowerProvided / powerScaleBy); lastPowerProvidedPos = float2.Lerp(lastPowerProvidedPos.GetValueOrDefault(powerLevelTemp), powerLevelTemp, .3f); float2 powerLevel = new float2(lastPowerProvidedPos.Value, barStart.Y); var color = Color.LimeGreen; - if (Game.world.LocalPlayer.GetPowerState() == PowerState.Low) + if (world.LocalPlayer.GetPowerState() == PowerState.Low) color = Color.Orange; - if (Game.world.LocalPlayer.GetPowerState() == PowerState.Critical) + if (world.LocalPlayer.GetPowerState() == PowerState.Critical) color = Color.Red; var colorDark = Graphics.Util.Lerp(0.25f, color, Color.Black); @@ -448,7 +448,7 @@ namespace OpenRa // Power usage indicator var indicator = ChromeProvider.GetImage(renderer, radarCollection, "power-indicator"); - var powerDrainedTemp = barStart.X + (barEnd.X - barStart.X) * (Game.world.LocalPlayer.PowerDrained / powerScaleBy); + var powerDrainedTemp = barStart.X + (barEnd.X - barStart.X) * (world.LocalPlayer.PowerDrained / powerScaleBy); lastPowerDrainedPos = float2.Lerp(lastPowerDrainedPos.GetValueOrDefault(powerDrainedTemp), powerDrainedTemp, .3f); float2 powerDrainLevel = new float2(lastPowerDrainedPos.Value-indicator.size.X/2, barStart.Y-1); @@ -456,14 +456,14 @@ namespace OpenRa rgbaRenderer.Flush(); } - void DrawButtons() + void DrawButtons( World world ) { int2 buttonOrigin = new int2(Game.viewport.Width - 320, 2); // Repair Rectangle repairRect = new Rectangle(buttonOrigin.X, buttonOrigin.Y, repairButton.Image.bounds.Width, repairButton.Image.bounds.Height); var repairDrawPos = new float2(repairRect.Location); - var hasFact = Game.world.Actors.Any(a => a.Owner == Game.world.LocalPlayer && a.traits.Contains()); + var hasFact = world.Actors.Any(a => a.Owner == world.LocalPlayer && a.traits.Contains()); if (Game.Settings.RepairRequiresConyard && !hasFact) repairButton.ReplaceAnim("disabled"); @@ -630,7 +630,7 @@ namespace OpenRa // Return an int telling us the y coordinate at the bottom of the palette - int DrawBuildPalette(string queueName) + int DrawBuildPalette( World world, string queueName ) { // Hack int columns = paletteColumns; @@ -641,14 +641,14 @@ namespace OpenRa var x = 0; var y = 0; - var buildableItems = Rules.TechTree.BuildableItems(Game.world.LocalPlayer, queueName).ToArray(); + var buildableItems = Rules.TechTree.BuildableItems(world.LocalPlayer, queueName).ToArray(); - var allBuildables = Rules.TechTree.AllBuildables(Game.world.LocalPlayer, queueName) + var allBuildables = Rules.TechTree.AllBuildables(world.LocalPlayer, queueName) .Where(a => a.Traits.Contains()) - .Where(a => a.Traits.Get().Owner.Contains(Game.world.LocalPlayer.Race)) + .Where(a => a.Traits.Get().Owner.Contains(world.LocalPlayer.Race)) .OrderBy(a => a.Traits.Get().TechLevel); - var queue = Game.world.LocalPlayer.PlayerActor.traits.Get(); + var queue = world.LocalPlayer.PlayerActor.traits.Get(); var overlayBits = new List>(); @@ -722,7 +722,7 @@ namespace OpenRa var closureItemName = item.Name; AddButton(rect, buildableItems.Contains(item.Name) - ? isLmb => HandleBuildPalette(closureItemName, isLmb) + ? isLmb => HandleBuildPalette(world, closureItemName, isLmb) : (Action)(_ => Sound.Play("briefing.aud"))); if (++x == columns) { x = 0; y++; } @@ -751,21 +751,21 @@ namespace OpenRa rgbaRenderer.Flush(); if (tooltipItem != null) - DrawProductionTooltip(tooltipItem, new float2(Game.viewport.Width, origin.Y + y * 48 + 9).ToInt2()/*tooltipPos*/); + DrawProductionTooltip(world, tooltipItem, new float2(Game.viewport.Width, origin.Y + y * 48 + 9).ToInt2()/*tooltipPos*/); return y*48+9; } - void StartProduction( string item ) + void StartProduction( World world, string item ) { var unit = Rules.Info[item]; Sound.Play(unit.Traits.Contains() ? "abldgin1.aud" : "train1.aud"); - Game.controller.AddOrder(Order.StartProduction(Game.world.LocalPlayer, item)); + Game.controller.AddOrder(Order.StartProduction(world.LocalPlayer, item)); } - void HandleBuildPalette(string item, bool isLmb) + void HandleBuildPalette( World world, string item, bool isLmb ) { - var player = Game.world.LocalPlayer; + var player = world.LocalPlayer; var unit = Rules.Info[item]; var queue = player.PlayerActor.traits.Get(); var producing = queue.AllItems(unit.Category).FirstOrDefault( a => a.Item == item ); @@ -790,7 +790,7 @@ namespace OpenRa } } - StartProduction(item); + StartProduction(world, item); } else { @@ -844,7 +844,7 @@ namespace OpenRa renderer.DrawText2(text, pos - new int2(renderer.MeasureText2(text).X/2, 0), c); } - void DrawProductionTooltip(string unit, int2 pos) + void DrawProductionTooltip(World world, string unit, int2 pos) { var tooltipSprite = ChromeProvider.GetImage(renderer, chromeCollection, "tooltip-bg"); var p = pos.ToFloat2() - new float2(tooltipSprite.size.X, 0); @@ -857,18 +857,18 @@ namespace OpenRa renderer.DrawText2(buildable.Description, p.ToInt2() + new int2(5,5), Color.White); DrawRightAligned( "${0}".F(buildable.Cost), pos + new int2(-5,5), - Game.world.LocalPlayer.Cash + Game.world.LocalPlayer.Ore >= buildable.Cost ? Color.White : Color.Red); + world.LocalPlayer.Cash + world.LocalPlayer.Ore >= buildable.Cost ? Color.White : Color.Red); var bi = info.Traits.GetOrDefault(); if (bi != null) DrawRightAligned("ϟ{0}".F(bi.Power), pos + new int2(-5, 20), - Game.world.LocalPlayer.PowerProvided - Game.world.LocalPlayer.PowerDrained + bi.Power >= 0 + world.LocalPlayer.PowerProvided - world.LocalPlayer.PowerDrained + bi.Power >= 0 ? Color.White : Color.Red); - var buildings = Rules.TechTree.GatherBuildings( Game.world.LocalPlayer ); + var buildings = Rules.TechTree.GatherBuildings( world.LocalPlayer ); p += new int2(5, 5); p += new int2(0, 15); - if (!Rules.TechTree.CanBuild(info, Game.world.LocalPlayer, buildings)) + if (!Rules.TechTree.CanBuild(info, world.LocalPlayer, buildings)) { var prereqs = buildable.Prerequisites .Select( a => Description( a ) ); @@ -891,9 +891,9 @@ namespace OpenRa return Rules.Info[ a.ToLowerInvariant() ].Traits.Get().Description; } - void DrawSupportPowers() + void DrawSupportPowers( World world ) { - var numPowers = Game.world.LocalPlayer.SupportPowers.Values + var numPowers = world.LocalPlayer.SupportPowers.Values .Where(a => a.IsAvailable).Count(); if (numPowers == 0) return; @@ -910,7 +910,7 @@ namespace OpenRa string tooltipItem = null; int2 tooltipPos = int2.Zero; - foreach (var sp in Game.world.LocalPlayer.SupportPowers) + foreach (var sp in world.LocalPlayer.SupportPowers) { var image = spsprites[sp.Key]; if (sp.Value.IsAvailable) @@ -949,7 +949,7 @@ namespace OpenRa shpRenderer.Flush(); if (tooltipItem != null) - DrawSupportPowerTooltip(tooltipItem, tooltipPos); + DrawSupportPowerTooltip(world, tooltipItem, tooltipPos); } Action HandleSupportPower(SupportPower sp) @@ -965,7 +965,7 @@ namespace OpenRa return "{0:D2}:{1:D2}".F(minutes, seconds % 60); } - void DrawSupportPowerTooltip(string sp, int2 pos) + void DrawSupportPowerTooltip(World world, string sp, int2 pos) { var tooltipSprite = ChromeProvider.GetImage(renderer, chromeCollection, "tooltip-bg"); rgbaRenderer.DrawSprite(tooltipSprite, pos, PaletteType.Chrome); @@ -977,7 +977,7 @@ namespace OpenRa renderer.DrawText2(info.Description, pos, Color.White); - var timer = "Charge Time: {0}".F(FormatTime(Game.world.LocalPlayer.SupportPowers[sp].RemainingTime)); + var timer = "Charge Time: {0}".F(FormatTime(world.LocalPlayer.SupportPowers[sp].RemainingTime)); DrawRightAligned(timer, pos + new int2((int)tooltipSprite.size.X - 10, 0), Color.White); if (info.LongDesc != null) diff --git a/OpenRa.Game/Game.cs b/OpenRa.Game/Game.cs index 293342084b..2f3e5c075f 100644 --- a/OpenRa.Game/Game.cs +++ b/OpenRa.Game/Game.cs @@ -146,7 +146,7 @@ namespace OpenRa using (new PerfSample("render")) { ++RenderFrame; - viewport.DrawRegions(); + viewport.DrawRegions( world ); } PerfHistory.items["render"].Tick(); diff --git a/OpenRa.Game/Graphics/Viewport.cs b/OpenRa.Game/Graphics/Viewport.cs index b412177374..18fe71cb75 100644 --- a/OpenRa.Game/Graphics/Viewport.cs +++ b/OpenRa.Game/Graphics/Viewport.cs @@ -42,7 +42,7 @@ namespace OpenRa.Graphics this.scrollPosition = Game.CellSize* mapStart; } - public void DrawRegions() + public void DrawRegions( World world ) { Game.world.WorldRenderer.palette.Update(Game.world.Actors.SelectMany( a => a.traits.WithInterface())); @@ -55,7 +55,7 @@ namespace OpenRa.Graphics if( Game.orderManager.GameStarted ) { Game.world.WorldRenderer.Draw(); - Game.chrome.Draw(); + Game.chrome.Draw( world ); if (Game.orderManager.IsNetplay && Game.orderManager.Sources.OfType().First().State == ConnectionState.NotConnected) @@ -77,12 +77,12 @@ namespace OpenRa.Graphics Game.chrome.DrawDialog("Connection failed."); break; case ConnectionState.Connected: - Game.chrome.DrawLobby(); + Game.chrome.DrawLobby( world ); break; } } else - Game.chrome.DrawLobby(); + Game.chrome.DrawLobby( world ); } var c = Game.chrome.HitTest(mousePos) ? Cursor.Default : Game.controller.ChooseCursor(); From 90b5df73b574c9219bf0d28de00ebd3987653078 Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 21 Jan 2010 13:22:39 +1300 Subject: [PATCH 08/18] Ditto combat --- OpenRa.Game/Combat.cs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/OpenRa.Game/Combat.cs b/OpenRa.Game/Combat.cs index fac6a77d45..7dc43a24db 100644 --- a/OpenRa.Game/Combat.cs +++ b/OpenRa.Game/Combat.cs @@ -13,13 +13,15 @@ namespace OpenRa public static void DoImpact(int2 loc, int2 visualLoc, WeaponInfo weapon, ProjectileInfo projectile, WarheadInfo warhead, Actor firedBy) { + var world = firedBy.World; + var targetTile = ((1f / Game.CellSize) * loc.ToFloat2()).ToInt2(); - var isWater = Game.world.IsWater(targetTile); - var hitWater = Game.world.IsCellBuildable(targetTile, UnitMovementType.Float); + var isWater = world.IsWater(targetTile); + var hitWater = world.IsCellBuildable(targetTile, UnitMovementType.Float); if (warhead.Explosion != 0) - Game.world.AddFrameEndTask( + world.AddFrameEndTask( w => w.Add(new Explosion(visualLoc, warhead.Explosion, hitWater))); var impactSound = warhead.ImpactSound; @@ -28,10 +30,10 @@ namespace OpenRa if (impactSound != null) Sound.Play(impactSound + ".aud"); if (!isWater) Smudge.AddSmudge(targetTile, warhead); - if (warhead.Ore) Game.world.Map.DestroyOre(targetTile.X, targetTile.Y); + if (warhead.Ore) world.Map.DestroyOre(targetTile.X, targetTile.Y); var maxSpread = GetMaximumSpread(weapon, warhead); - var hitActors = Game.world.FindUnitsInCircle(loc, maxSpread); + var hitActors = world.FindUnitsInCircle(loc, maxSpread); foreach (var victim in hitActors) victim.InflictDamage(firedBy, (int)GetDamageToInflict(victim, loc, weapon, warhead), warhead); From 4fa56f16c0fe2dd3081ecd198fc433c842720863 Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 21 Jan 2010 13:27:44 +1300 Subject: [PATCH 09/18] pass World to Effects/* --- OpenRa.Game/Combat.cs | 2 +- OpenRa.Game/Controller.cs | 2 +- OpenRa.Game/Effects/Bullet.cs | 4 ++-- OpenRa.Game/Effects/Corpse.cs | 4 ++-- OpenRa.Game/Effects/DelayedAction.cs | 4 ++-- OpenRa.Game/Effects/Explosion.cs | 6 +++--- OpenRa.Game/Effects/FlashTarget.cs | 8 ++++---- OpenRa.Game/Effects/GpsSatellite.cs | 4 ++-- OpenRa.Game/Effects/IEffect.cs | 2 +- OpenRa.Game/Effects/InvulnEffect.cs | 4 ++-- OpenRa.Game/Effects/Missile.cs | 6 +++--- OpenRa.Game/Effects/MoveFlash.cs | 6 +++--- OpenRa.Game/Effects/PowerDownIndicator.cs | 4 ++-- OpenRa.Game/Effects/RepairIndicator.cs | 4 ++-- OpenRa.Game/Effects/SatelliteLaunch.cs | 6 +++--- OpenRa.Game/Effects/Smoke.cs | 6 +++--- OpenRa.Game/Effects/TeslaZap.cs | 4 ++-- OpenRa.Game/Traits/RenderBuilding.cs | 2 +- OpenRa.Game/World.cs | 2 +- OpenRa.Mods.RA/Mine.cs | 6 +++--- 20 files changed, 43 insertions(+), 43 deletions(-) diff --git a/OpenRa.Game/Combat.cs b/OpenRa.Game/Combat.cs index 7dc43a24db..efc99d224c 100644 --- a/OpenRa.Game/Combat.cs +++ b/OpenRa.Game/Combat.cs @@ -22,7 +22,7 @@ namespace OpenRa if (warhead.Explosion != 0) world.AddFrameEndTask( - w => w.Add(new Explosion(visualLoc, warhead.Explosion, hitWater))); + w => w.Add(new Explosion(w, visualLoc, warhead.Explosion, hitWater))); var impactSound = warhead.ImpactSound; if (hitWater && warhead.WaterImpactSound != null) diff --git a/OpenRa.Game/Controller.cs b/OpenRa.Game/Controller.cs index 9053b2eafd..3862ea1f5a 100644 --- a/OpenRa.Game/Controller.cs +++ b/OpenRa.Game/Controller.cs @@ -61,7 +61,7 @@ namespace OpenRa Sound.PlayVoice(isAttack ? "Attack" : "Move", voicedActor); if (isMove) - Game.world.Add(new Effects.MoveFlash(Game.CellSize * xy)); + Game.world.Add(new Effects.MoveFlash(Game.world, Game.CellSize * xy)); } } diff --git a/OpenRa.Game/Effects/Bullet.cs b/OpenRa.Game/Effects/Bullet.cs index 9d672f35a8..051a00bae5 100755 --- a/OpenRa.Game/Effects/Bullet.cs +++ b/OpenRa.Game/Effects/Bullet.cs @@ -56,13 +56,13 @@ namespace OpenRa.Effects int TotalTime() { return (Dest - Src).Length * BaseBulletSpeed / Weapon.Speed; } - public void Tick() + public void Tick( World world ) { t += 40; if (t > TotalTime()) /* remove finished bullets */ { - Game.world.AddFrameEndTask(w => w.Remove(this)); + world.AddFrameEndTask(w => w.Remove(this)); Combat.DoImpact(Dest, VisualDest - new int2( 0, DestAltitude ), Weapon, Projectile, Warhead, FiredBy); } diff --git a/OpenRa.Game/Effects/Corpse.cs b/OpenRa.Game/Effects/Corpse.cs index bae41ef8a0..f4119aabc9 100755 --- a/OpenRa.Game/Effects/Corpse.cs +++ b/OpenRa.Game/Effects/Corpse.cs @@ -15,13 +15,13 @@ namespace OpenRa.Effects { anim = new Animation(fromActor.traits.GetOrDefault().GetImage(fromActor)); anim.PlayThen("die{0}".F(death + 1), - () => Game.world.AddFrameEndTask(w => w.Remove(this))); + () => fromActor.World.AddFrameEndTask(w => w.Remove(this))); pos = fromActor.CenterLocation; owner = fromActor.Owner; } - public void Tick() { anim.Tick(); } + public void Tick( World world ) { anim.Tick(); } public IEnumerable Render() { diff --git a/OpenRa.Game/Effects/DelayedAction.cs b/OpenRa.Game/Effects/DelayedAction.cs index 91ae9bdc2e..bb691aa628 100755 --- a/OpenRa.Game/Effects/DelayedAction.cs +++ b/OpenRa.Game/Effects/DelayedAction.cs @@ -15,10 +15,10 @@ namespace OpenRa.Effects this.delay = delay; } - public void Tick() + public void Tick( World world ) { if (--delay <= 0) - Game.world.AddFrameEndTask(w => { w.Remove(this); a(); }); + world.AddFrameEndTask(w => { w.Remove(this); a(); }); } public IEnumerable Render() { yield break; } diff --git a/OpenRa.Game/Effects/Explosion.cs b/OpenRa.Game/Effects/Explosion.cs index e6ac46ccb2..19215cb6fb 100755 --- a/OpenRa.Game/Effects/Explosion.cs +++ b/OpenRa.Game/Effects/Explosion.cs @@ -9,16 +9,16 @@ namespace OpenRa.Effects Animation anim; int2 pos; - public Explosion(int2 pixelPos, int style, bool isWater) + public Explosion( World world, int2 pixelPos, int style, bool isWater) { this.pos = pixelPos; var variantSuffix = isWater ? "w" : ""; anim = new Animation("explosion"); anim.PlayThen(style.ToString() + variantSuffix, - () => Game.world.AddFrameEndTask(w => w.Remove(this))); + () => world.AddFrameEndTask(w => w.Remove(this))); } - public void Tick() { anim.Tick(); } + public void Tick( World world ) { anim.Tick(); } public IEnumerable Render() { diff --git a/OpenRa.Game/Effects/FlashTarget.cs b/OpenRa.Game/Effects/FlashTarget.cs index 7029b2c820..8d9fdf2412 100755 --- a/OpenRa.Game/Effects/FlashTarget.cs +++ b/OpenRa.Game/Effects/FlashTarget.cs @@ -15,14 +15,14 @@ namespace OpenRa.Effects public FlashTarget(Actor target) { this.target = target; - foreach (var e in Game.world.Effects.OfType().Where(a => a.target == target).ToArray()) - Game.world.Remove(e); + foreach (var e in target.World.Effects.OfType().Where(a => a.target == target).ToArray()) + target.World.Remove(e); } - public void Tick() + public void Tick( World world ) { if (--remainingTicks == 0) - Game.world.AddFrameEndTask(w => w.Remove(this)); + world.AddFrameEndTask(w => w.Remove(this)); } public IEnumerable Render() diff --git a/OpenRa.Game/Effects/GpsSatellite.cs b/OpenRa.Game/Effects/GpsSatellite.cs index d008fdda22..7dbab9fd15 100755 --- a/OpenRa.Game/Effects/GpsSatellite.cs +++ b/OpenRa.Game/Effects/GpsSatellite.cs @@ -16,13 +16,13 @@ namespace OpenRa.Effects anim.PlayRepeating("idle"); } - public void Tick() + public void Tick( World world ) { anim.Tick(); offset.Y -= heightPerTick; if (offset.Y < 0) - Game.world.AddFrameEndTask(w => w.Remove(this)); + world.AddFrameEndTask(w => w.Remove(this)); } public IEnumerable Render() diff --git a/OpenRa.Game/Effects/IEffect.cs b/OpenRa.Game/Effects/IEffect.cs index 73cfc5e2a8..12d0ccd158 100755 --- a/OpenRa.Game/Effects/IEffect.cs +++ b/OpenRa.Game/Effects/IEffect.cs @@ -6,7 +6,7 @@ namespace OpenRa.Effects { public interface IEffect { - void Tick(); + void Tick( World world ); IEnumerable Render(); } } diff --git a/OpenRa.Game/Effects/InvulnEffect.cs b/OpenRa.Game/Effects/InvulnEffect.cs index 9f59bb9d8d..e17dfd8382 100755 --- a/OpenRa.Game/Effects/InvulnEffect.cs +++ b/OpenRa.Game/Effects/InvulnEffect.cs @@ -15,10 +15,10 @@ namespace OpenRa.Effects this.b = a.traits.Get(); } - public void Tick() + public void Tick( World world ) { if (a.IsDead || b.GetDamageModifier() > 0) - Game.world.AddFrameEndTask(w => w.Remove(this)); + world.AddFrameEndTask(w => w.Remove(this)); } public IEnumerable Render() diff --git a/OpenRa.Game/Effects/Missile.cs b/OpenRa.Game/Effects/Missile.cs index da221bccad..8d4a63c1c8 100755 --- a/OpenRa.Game/Effects/Missile.cs +++ b/OpenRa.Game/Effects/Missile.cs @@ -47,7 +47,7 @@ namespace OpenRa.Effects const int MissileCloseEnough = 7; const float Scale = .2f; - public void Tick() + public void Tick( World world ) { t += 40; @@ -64,7 +64,7 @@ namespace OpenRa.Effects var dist = Target.CenterLocation - Pos; if (dist.LengthSquared < MissileCloseEnough * MissileCloseEnough || Target.IsDead) { - Game.world.AddFrameEndTask(w => w.Remove(this)); + world.AddFrameEndTask(w => w.Remove(this)); if (t > Projectile.Arm * 40) /* don't blow up in our launcher's face! */ Combat.DoImpact(Pos.ToInt2(), Pos.ToInt2(), Weapon, Projectile, Warhead, FiredBy); @@ -78,7 +78,7 @@ namespace OpenRa.Effects Pos += move; if (Projectile.Animates) - Game.world.AddFrameEndTask(w => w.Add(new Smoke((Pos - 1.5f * move - new int2( 0, Altitude )).ToInt2()))); + world.AddFrameEndTask(w => w.Add(new Smoke(w, (Pos - 1.5f * move - new int2( 0, Altitude )).ToInt2()))); // todo: running out of fuel } diff --git a/OpenRa.Game/Effects/MoveFlash.cs b/OpenRa.Game/Effects/MoveFlash.cs index 4105da8fb9..7aa214f0a5 100755 --- a/OpenRa.Game/Effects/MoveFlash.cs +++ b/OpenRa.Game/Effects/MoveFlash.cs @@ -12,15 +12,15 @@ namespace OpenRa.Effects Animation anim = new Animation("moveflsh"); float2 pos; - public MoveFlash( float2 pos ) + public MoveFlash( World world, float2 pos ) { this.pos = pos; anim.PlayThen( "idle", - () => Game.world.AddFrameEndTask( + () => world.AddFrameEndTask( w => w.Remove( this ) ) ); } - public void Tick() { anim.Tick(); } + public void Tick( World world ) { anim.Tick(); } public IEnumerable Render() { diff --git a/OpenRa.Game/Effects/PowerDownIndicator.cs b/OpenRa.Game/Effects/PowerDownIndicator.cs index ee7e1032ac..dc064e4484 100755 --- a/OpenRa.Game/Effects/PowerDownIndicator.cs +++ b/OpenRa.Game/Effects/PowerDownIndicator.cs @@ -20,10 +20,10 @@ namespace OpenRa.Effects anim.PlayRepeating("disabled"); } - public void Tick() + public void Tick( World world ) { if (removeNextFrame == true) - Game.world.AddFrameEndTask(w => w.Remove(this)); + world.AddFrameEndTask(w => w.Remove(this)); // Fix off-by one frame bug with undisabling causing low-power if (!b.Disabled || a.IsDead) diff --git a/OpenRa.Game/Effects/RepairIndicator.cs b/OpenRa.Game/Effects/RepairIndicator.cs index c017176b3f..988c21bf3b 100755 --- a/OpenRa.Game/Effects/RepairIndicator.cs +++ b/OpenRa.Game/Effects/RepairIndicator.cs @@ -12,10 +12,10 @@ namespace OpenRa.Effects public RepairIndicator(Actor a) { this.a = a; anim.PlayRepeating("repair"); } - public void Tick() + public void Tick( World world ) { if (--framesLeft == 0 || a.IsDead) - Game.world.AddFrameEndTask(w => w.Remove(this)); + world.AddFrameEndTask(w => w.Remove(this)); } public IEnumerable Render() diff --git a/OpenRa.Game/Effects/SatelliteLaunch.cs b/OpenRa.Game/Effects/SatelliteLaunch.cs index 0b3b267c24..441f4c4cf8 100755 --- a/OpenRa.Game/Effects/SatelliteLaunch.cs +++ b/OpenRa.Game/Effects/SatelliteLaunch.cs @@ -15,16 +15,16 @@ namespace OpenRa.Effects { this.a = a; doors.PlayThen("active", - () => Game.world.AddFrameEndTask(w => w.Remove(this))); + () => a.World.AddFrameEndTask(w => w.Remove(this))); } - public void Tick() + public void Tick( World world ) { doors.Tick(); if (++frame == 19) { - Game.world.AddFrameEndTask(w => w.Add(new GpsSatellite(a.CenterLocation - .5f * doors.Image.size + doorOffset))); + world.AddFrameEndTask(w => w.Add(new GpsSatellite(a.CenterLocation - .5f * doors.Image.size + doorOffset))); } } diff --git a/OpenRa.Game/Effects/Smoke.cs b/OpenRa.Game/Effects/Smoke.cs index 1f515f01fa..33a04604d7 100755 --- a/OpenRa.Game/Effects/Smoke.cs +++ b/OpenRa.Game/Effects/Smoke.cs @@ -9,14 +9,14 @@ namespace OpenRa.Effects readonly int2 pos; readonly Animation anim = new Animation("smokey"); - public Smoke(int2 pos) + public Smoke(World world, int2 pos) { this.pos = pos; anim.PlayThen("idle", - () => Game.world.AddFrameEndTask(w => w.Remove(this))); + () => world.AddFrameEndTask(w => w.Remove(this))); } - public void Tick() + public void Tick( World world ) { anim.Tick(); } diff --git a/OpenRa.Game/Effects/TeslaZap.cs b/OpenRa.Game/Effects/TeslaZap.cs index ffc18611ef..f9baeb8d65 100755 --- a/OpenRa.Game/Effects/TeslaZap.cs +++ b/OpenRa.Game/Effects/TeslaZap.cs @@ -20,10 +20,10 @@ namespace OpenRa.Effects this.tesla = SequenceProvider.GetSequence( "litning", "bright" ); } - public void Tick() + public void Tick( World world ) { if( timeUntilRemove <= 0 ) - Game.world.AddFrameEndTask( w => w.Remove( this ) ); + world.AddFrameEndTask( w => w.Remove( this ) ); --timeUntilRemove; } diff --git a/OpenRa.Game/Traits/RenderBuilding.cs b/OpenRa.Game/Traits/RenderBuilding.cs index b2fdc5b3d6..1e0e41a5e7 100644 --- a/OpenRa.Game/Traits/RenderBuilding.cs +++ b/OpenRa.Game/Traits/RenderBuilding.cs @@ -87,7 +87,7 @@ namespace OpenRa.Traits break; case DamageState.Dead: DoBib(self, true); - self.World.AddFrameEndTask(w => w.Add(new Explosion(self.CenterLocation.ToInt2(), 7, false))); + self.World.AddFrameEndTask(w => w.Add(new Explosion(w, self.CenterLocation.ToInt2(), 7, false))); break; } } diff --git a/OpenRa.Game/World.cs b/OpenRa.Game/World.cs index f970f2995f..cd3793f964 100644 --- a/OpenRa.Game/World.cs +++ b/OpenRa.Game/World.cs @@ -110,7 +110,7 @@ namespace OpenRa } foreach (var a in actors) a.Tick(); - foreach (var e in effects) e.Tick(); + foreach (var e in effects) e.Tick( this ); Game.viewport.Tick(); diff --git a/OpenRa.Mods.RA/Mine.cs b/OpenRa.Mods.RA/Mine.cs index 9b8ae4744b..a499cdf604 100644 --- a/OpenRa.Mods.RA/Mine.cs +++ b/OpenRa.Mods.RA/Mine.cs @@ -32,10 +32,10 @@ namespace OpenRa.Mods.RA var info = self.Info.Traits.Get(); var warhead = Rules.WarheadInfo[info.Warhead]; - self.World.AddFrameEndTask(_ => + self.World.AddFrameEndTask(w => { - self.World.Remove(self); - self.World.Add(new Explosion(self.CenterLocation.ToInt2(), warhead.Explosion, false)); + w.Remove(self); + w.Add(new Explosion(w, self.CenterLocation.ToInt2(), warhead.Explosion, false)); crusher.InflictDamage(crusher, info.Damage, warhead); }); } From 6ac384669ba1f587a8abc7fa9558fd44624e9a58 Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 21 Jan 2010 13:37:45 +1300 Subject: [PATCH 10/18] Ditto for OrderGenerators. --- OpenRa.Game/Controller.cs | 4 ++-- OpenRa.Game/Game.cs | 2 +- OpenRa.Game/Graphics/WorldRenderer.cs | 2 +- .../ChronoshiftDestinationOrderGenerator.cs | 12 +++++----- .../ChronosphereSelectOrderGenerator.cs | 22 +++++++++---------- OpenRa.Game/Orders/IOrderGenerator.cs | 8 +++---- .../Orders/IronCurtainOrderGenerator.cs | 22 +++++++++---------- .../Orders/PlaceBuildingOrderGenerator.cs | 18 +++++++-------- OpenRa.Game/Orders/PowerDownOrderGenerator.cs | 18 +++++++-------- OpenRa.Game/Orders/RepairOrderGenerator.cs | 22 +++++++++---------- OpenRa.Game/Orders/SellOrderGenerator.cs | 18 +++++++-------- OpenRa.Game/Orders/UnitOrderGenerator.cs | 20 ++++++++--------- .../Orders/SetChronoTankDestination.cs | 12 +++++----- 13 files changed, 90 insertions(+), 90 deletions(-) diff --git a/OpenRa.Game/Controller.cs b/OpenRa.Game/Controller.cs index 3862ea1f5a..743468a466 100644 --- a/OpenRa.Game/Controller.cs +++ b/OpenRa.Game/Controller.cs @@ -47,7 +47,7 @@ namespace OpenRa { if (orderGenerator == null) return; - var orders = orderGenerator.Order(xy.ToInt2(), mi).ToArray(); + var orders = orderGenerator.Order(Game.world, xy.ToInt2(), mi).ToArray(); recentOrders.AddRange( orders ); var voicedActor = orders.Select(o => o.Subject) @@ -157,7 +157,7 @@ namespace OpenRa Modifiers = GetModifierKeys(), }; - return orderGenerator.GetCursor( MousePosition.ToInt2(), mi ); + return orderGenerator.GetCursor( Game.world, MousePosition.ToInt2(), mi ); } finally { diff --git a/OpenRa.Game/Game.cs b/OpenRa.Game/Game.cs index 2f3e5c075f..464bb457c1 100644 --- a/OpenRa.Game/Game.cs +++ b/OpenRa.Game/Game.cs @@ -131,7 +131,7 @@ namespace OpenRa { orderManager.Tick(); if (controller.orderGenerator != null) - controller.orderGenerator.Tick(); + controller.orderGenerator.Tick( world ); world.Tick(); } diff --git a/OpenRa.Game/Graphics/WorldRenderer.cs b/OpenRa.Game/Graphics/WorldRenderer.cs index 28a394c9ab..c6c1d9faad 100644 --- a/OpenRa.Game/Graphics/WorldRenderer.cs +++ b/OpenRa.Game/Graphics/WorldRenderer.cs @@ -84,7 +84,7 @@ namespace OpenRa.Graphics DrawBandBox(); if (Game.controller.orderGenerator != null) - Game.controller.orderGenerator.Render(); + Game.controller.orderGenerator.Render( world ); world.LocalPlayer.Shroud.Draw(spriteRenderer); diff --git a/OpenRa.Game/Orders/ChronoshiftDestinationOrderGenerator.cs b/OpenRa.Game/Orders/ChronoshiftDestinationOrderGenerator.cs index 95f6c95cb5..7ce28e2851 100644 --- a/OpenRa.Game/Orders/ChronoshiftDestinationOrderGenerator.cs +++ b/OpenRa.Game/Orders/ChronoshiftDestinationOrderGenerator.cs @@ -18,7 +18,7 @@ namespace OpenRa.Orders this.power = power; } - public IEnumerable Order(int2 xy, MouseInput mi) + public IEnumerable Order(World world, int2 xy, MouseInput mi) { if (mi.Button == MouseButton.Left) { @@ -29,15 +29,15 @@ namespace OpenRa.Orders power != null ? power.Name : null); } - public void Tick() {} - public void Render() + public void Tick( World world ) {} + public void Render( World world ) { - Game.world.WorldRenderer.DrawSelectionBox(self, Color.White, true); + world.WorldRenderer.DrawSelectionBox(self, Color.White, true); } - public Cursor GetCursor(int2 xy, MouseInput mi) + public Cursor GetCursor(World world, int2 xy, MouseInput mi) { - if (!Game.world.LocalPlayer.Shroud.IsExplored(xy)) + if (!world.LocalPlayer.Shroud.IsExplored(xy)) return Cursor.MoveBlocked; var movement = self.traits.GetOrDefault(); diff --git a/OpenRa.Game/Orders/ChronosphereSelectOrderGenerator.cs b/OpenRa.Game/Orders/ChronosphereSelectOrderGenerator.cs index 7e9d39b5ae..011c47f345 100644 --- a/OpenRa.Game/Orders/ChronosphereSelectOrderGenerator.cs +++ b/OpenRa.Game/Orders/ChronosphereSelectOrderGenerator.cs @@ -15,21 +15,21 @@ namespace OpenRa.Orders this.power = power; } - public IEnumerable Order(int2 xy, MouseInput mi) + public IEnumerable Order(World world, int2 xy, MouseInput mi) { if (mi.Button == MouseButton.Right) Game.controller.CancelInputMode(); - return OrderInner(xy, mi); + return OrderInner(world, xy, mi); } - IEnumerable OrderInner(int2 xy, MouseInput mi) + IEnumerable OrderInner(World world, int2 xy, MouseInput mi) { if (mi.Button == MouseButton.Left) { var loc = mi.Location + Game.viewport.Location; - var underCursor = Game.world.FindUnits(loc, loc) - .Where(a => a.Owner == Game.world.LocalPlayer + var underCursor = world.FindUnits(loc, loc) + .Where(a => a.Owner == world.LocalPlayer && a.traits.Contains() && a.traits.Contains()).FirstOrDefault(); @@ -38,21 +38,21 @@ namespace OpenRa.Orders } } - public void Tick() + public void Tick( World world ) { - var hasChronosphere = Game.world.Actors - .Any(a => a.Owner == Game.world.LocalPlayer && a.traits.Contains()); + var hasChronosphere = world.Actors + .Any(a => a.Owner == world.LocalPlayer && a.traits.Contains()); if (!hasChronosphere) Game.controller.CancelInputMode(); } - public void Render() { } + public void Render( World world ) { } - public Cursor GetCursor(int2 xy, MouseInput mi) + public Cursor GetCursor(World world, int2 xy, MouseInput mi) { mi.Button = MouseButton.Left; - return OrderInner(xy, mi).Any() + return OrderInner(world, xy, mi).Any() ? Cursor.ChronoshiftSelect : Cursor.MoveBlocked; } } diff --git a/OpenRa.Game/Orders/IOrderGenerator.cs b/OpenRa.Game/Orders/IOrderGenerator.cs index 17c1cb39bd..6d6bf57294 100644 --- a/OpenRa.Game/Orders/IOrderGenerator.cs +++ b/OpenRa.Game/Orders/IOrderGenerator.cs @@ -4,9 +4,9 @@ namespace OpenRa { public interface IOrderGenerator { - IEnumerable Order( int2 xy, MouseInput mi ); - void Tick(); - void Render(); - Cursor GetCursor(int2 xy, MouseInput mi); + IEnumerable Order( World world, int2 xy, MouseInput mi ); + void Tick( World world ); + void Render( World world ); + Cursor GetCursor( World world, int2 xy, MouseInput mi ); } } diff --git a/OpenRa.Game/Orders/IronCurtainOrderGenerator.cs b/OpenRa.Game/Orders/IronCurtainOrderGenerator.cs index 6c5e747b8e..d8bbbd77e5 100644 --- a/OpenRa.Game/Orders/IronCurtainOrderGenerator.cs +++ b/OpenRa.Game/Orders/IronCurtainOrderGenerator.cs @@ -15,21 +15,21 @@ namespace OpenRa.Orders this.power = power; } - public IEnumerable Order(int2 xy, MouseInput mi) + public IEnumerable Order(World world, int2 xy, MouseInput mi) { if (mi.Button == MouseButton.Right) Game.controller.CancelInputMode(); - return OrderInner(xy, mi); + return OrderInner(world, xy, mi); } - IEnumerable OrderInner(int2 xy, MouseInput mi) + IEnumerable OrderInner(World world, int2 xy, MouseInput mi) { if (mi.Button == MouseButton.Left) { var loc = mi.Location + Game.viewport.Location; - var underCursor = Game.world.FindUnits(loc, loc) - .Where(a => a.Owner == Game.world.LocalPlayer + var underCursor = world.FindUnits(loc, loc) + .Where(a => a.Owner == world.LocalPlayer && a.traits.Contains() && a.traits.Contains()).FirstOrDefault(); @@ -38,21 +38,21 @@ namespace OpenRa.Orders } } - public void Tick() + public void Tick( World world ) { - var hasStructure = Game.world.Actors - .Any(a => a.Owner == Game.world.LocalPlayer && a.traits.Contains()); + var hasStructure = world.Actors + .Any(a => a.Owner == world.LocalPlayer && a.traits.Contains()); if (!hasStructure) Game.controller.CancelInputMode(); } - public void Render() { } + public void Render( World world ) { } - public Cursor GetCursor(int2 xy, MouseInput mi) + public Cursor GetCursor(World world, int2 xy, MouseInput mi) { mi.Button = MouseButton.Left; - return OrderInner(xy, mi).Any() + return OrderInner(world, xy, mi).Any() ? Cursor.Ability : Cursor.MoveBlocked; } } diff --git a/OpenRa.Game/Orders/PlaceBuildingOrderGenerator.cs b/OpenRa.Game/Orders/PlaceBuildingOrderGenerator.cs index 9996b680f6..12a565fb88 100644 --- a/OpenRa.Game/Orders/PlaceBuildingOrderGenerator.cs +++ b/OpenRa.Game/Orders/PlaceBuildingOrderGenerator.cs @@ -16,21 +16,21 @@ namespace OpenRa.Orders Building = name; } - public IEnumerable Order(int2 xy, MouseInput mi) + public IEnumerable Order(World world, int2 xy, MouseInput mi) { if (mi.Button == MouseButton.Right) Game.controller.CancelInputMode(); - return InnerOrder(xy, mi); + return InnerOrder(world, xy, mi); } - IEnumerable InnerOrder(int2 xy, MouseInput mi) + IEnumerable InnerOrder(World world, int2 xy, MouseInput mi) { if (mi.Button == MouseButton.Left) { var topLeft = xy - Footprint.AdjustForBuildingSize( BuildingInfo ); - if (!Game.world.CanPlaceBuilding( Building, BuildingInfo, topLeft, null) - || !Game.world.IsCloseEnoughToBase(Producer.Owner, Building, BuildingInfo, topLeft)) + if (!world.CanPlaceBuilding( Building, BuildingInfo, topLeft, null) + || !world.IsCloseEnoughToBase(Producer.Owner, Building, BuildingInfo, topLeft)) { Sound.Play("nodeply1.aud"); yield break; @@ -40,19 +40,19 @@ namespace OpenRa.Orders } } - public void Tick() + public void Tick( World world ) { var producing = Producer.traits.Get().CurrentItem( Rules.Info[ Building ].Category ); if (producing == null || producing.Item != Building || producing.RemainingTime != 0) Game.controller.CancelInputMode(); } - public void Render() + public void Render( World world ) { - Game.world.WorldRenderer.uiOverlay.DrawBuildingGrid( Building, BuildingInfo ); + world.WorldRenderer.uiOverlay.DrawBuildingGrid( Building, BuildingInfo ); } - public Cursor GetCursor(int2 xy, MouseInput mi) + public Cursor GetCursor(World world, int2 xy, MouseInput mi) { return Cursor.Default; } diff --git a/OpenRa.Game/Orders/PowerDownOrderGenerator.cs b/OpenRa.Game/Orders/PowerDownOrderGenerator.cs index 9ed1da8b51..3ecb702812 100644 --- a/OpenRa.Game/Orders/PowerDownOrderGenerator.cs +++ b/OpenRa.Game/Orders/PowerDownOrderGenerator.cs @@ -9,21 +9,21 @@ namespace OpenRa.Orders { class PowerDownOrderGenerator : IOrderGenerator { - public IEnumerable Order(int2 xy, MouseInput mi) + public IEnumerable Order(World world, int2 xy, MouseInput mi) { if (mi.Button == MouseButton.Right) Game.controller.CancelInputMode(); - return OrderInner(xy, mi); + return OrderInner(world, xy, mi); } - IEnumerable OrderInner(int2 xy, MouseInput mi) + IEnumerable OrderInner(World world, int2 xy, MouseInput mi) { if (mi.Button == MouseButton.Left) { var loc = mi.Location + Game.viewport.Location; - var underCursor = Game.world.FindUnits(loc, loc) - .Where(a => a.Owner == Game.world.LocalPlayer + var underCursor = world.FindUnits(loc, loc) + .Where(a => a.Owner == world.LocalPlayer && a.traits.Contains() && a.traits.Contains()).FirstOrDefault(); @@ -32,13 +32,13 @@ namespace OpenRa.Orders } } - public void Tick() { } - public void Render() { } + public void Tick( World world ) { } + public void Render( World world ) { } - public Cursor GetCursor(int2 xy, MouseInput mi) + public Cursor GetCursor(World world, int2 xy, MouseInput mi) { mi.Button = MouseButton.Left; - return OrderInner(xy, mi).Any() + return OrderInner(world, xy, mi).Any() ? Cursor.PowerDown : Cursor.PowerDown; } } diff --git a/OpenRa.Game/Orders/RepairOrderGenerator.cs b/OpenRa.Game/Orders/RepairOrderGenerator.cs index a46eb568ff..b4e8cf1bb1 100644 --- a/OpenRa.Game/Orders/RepairOrderGenerator.cs +++ b/OpenRa.Game/Orders/RepairOrderGenerator.cs @@ -9,21 +9,21 @@ namespace OpenRa.Orders { class RepairOrderGenerator : IOrderGenerator { - public IEnumerable Order(int2 xy, MouseInput mi) + public IEnumerable Order(World world, int2 xy, MouseInput mi) { if (mi.Button == MouseButton.Right) Game.controller.CancelInputMode(); - return OrderInner(xy, mi); + return OrderInner(world, xy, mi); } - IEnumerable OrderInner(int2 xy, MouseInput mi) + IEnumerable OrderInner(World world, int2 xy, MouseInput mi) { if (mi.Button == MouseButton.Left) { var loc = mi.Location + Game.viewport.Location; - var underCursor = Game.world.FindUnits(loc, loc) - .Where(a => a.Owner == Game.world.LocalPlayer + var underCursor = world.FindUnits(loc, loc) + .Where(a => a.Owner == world.LocalPlayer && a.traits.Contains() && a.traits.Contains()).FirstOrDefault(); @@ -34,24 +34,24 @@ namespace OpenRa.Orders } } - public void Tick() + public void Tick( World world ) { if (!Game.Settings.RepairRequiresConyard) return; - var hasFact = Game.world.Actors - .Any(a => a.Owner == Game.world.LocalPlayer && a.traits.Contains()); + var hasFact = world.Actors + .Any(a => a.Owner == world.LocalPlayer && a.traits.Contains()); if (!hasFact) Game.controller.CancelInputMode(); } - public void Render() {} + public void Render( World world ) {} - public Cursor GetCursor(int2 xy, MouseInput mi) + public Cursor GetCursor(World world, int2 xy, MouseInput mi) { mi.Button = MouseButton.Left; - return OrderInner(xy, mi).Any() + return OrderInner(world, xy, mi).Any() ? Cursor.Repair : Cursor.RepairBlocked; } } diff --git a/OpenRa.Game/Orders/SellOrderGenerator.cs b/OpenRa.Game/Orders/SellOrderGenerator.cs index 05aef8547d..7c34244dfb 100644 --- a/OpenRa.Game/Orders/SellOrderGenerator.cs +++ b/OpenRa.Game/Orders/SellOrderGenerator.cs @@ -9,21 +9,21 @@ namespace OpenRa.Orders { class SellOrderGenerator : IOrderGenerator { - public IEnumerable Order(int2 xy, MouseInput mi) + public IEnumerable Order(World world, int2 xy, MouseInput mi) { if (mi.Button == MouseButton.Right) Game.controller.CancelInputMode(); - return OrderInner(xy, mi); + return OrderInner(world, xy, mi); } - IEnumerable OrderInner(int2 xy, MouseInput mi) + IEnumerable OrderInner(World world, int2 xy, MouseInput mi) { if (mi.Button == MouseButton.Left) { var loc = mi.Location + Game.viewport.Location; - var underCursor = Game.world.FindUnits(loc, loc) - .Where(a => a.Owner == Game.world.LocalPlayer + var underCursor = world.FindUnits(loc, loc) + .Where(a => a.Owner == world.LocalPlayer && a.traits.Contains() && a.traits.Contains()).FirstOrDefault(); @@ -34,13 +34,13 @@ namespace OpenRa.Orders } } - public void Tick() {} - public void Render() {} + public void Tick( World world ) {} + public void Render( World world ) {} - public Cursor GetCursor(int2 xy, MouseInput mi) + public Cursor GetCursor(World world, int2 xy, MouseInput mi) { mi.Button = MouseButton.Left; - return OrderInner(xy, mi).Any() + return OrderInner(world, xy, mi).Any() ? Cursor.Sell : Cursor.SellBlocked; } } diff --git a/OpenRa.Game/Orders/UnitOrderGenerator.cs b/OpenRa.Game/Orders/UnitOrderGenerator.cs index 38c6b09009..945b8d1cfa 100644 --- a/OpenRa.Game/Orders/UnitOrderGenerator.cs +++ b/OpenRa.Game/Orders/UnitOrderGenerator.cs @@ -15,7 +15,7 @@ namespace OpenRa.Orders selection = selected.ToList(); } - public IEnumerable Order( int2 xy, MouseInput mi ) + public IEnumerable Order( World world, int2 xy, MouseInput mi ) { foreach( var unit in selection ) { @@ -25,31 +25,31 @@ namespace OpenRa.Orders } } - public void Tick() + public void Tick( World world ) { selection.RemoveAll(a => !a.IsInWorld); } - public void Render() + public void Render( World world ) { foreach( var a in selection ) - Game.world.WorldRenderer.DrawSelectionBox( a, Color.White, true ); + world.WorldRenderer.DrawSelectionBox( a, Color.White, true ); } - public Cursor GetCursor(int2 xy, MouseInput mi) + public Cursor GetCursor( World world, int2 xy, MouseInput mi ) { - return ChooseCursor(mi); + return ChooseCursor(world, mi); } - Cursor ChooseCursor( MouseInput mi ) + Cursor ChooseCursor( World world, MouseInput mi ) { var p = Game.controller.MousePosition; - var c = Order(p.ToInt2(), mi) + var c = Order(world, p.ToInt2(), mi) .Select(o => CursorForOrderString(o.OrderString, o.Subject, o.TargetLocation)) .FirstOrDefault(a => a != null); return c ?? - (Game.world.SelectActorsInBox(Game.CellSize * p, + (world.SelectActorsInBox(Game.CellSize * p, Game.CellSize * p).Any() ? Cursor.Select : Cursor.Default); } @@ -69,7 +69,7 @@ namespace OpenRa.Orders return Cursor.MoveBlocked; case "DeployMcv": var factBuildingInfo = Rules.Info["fact"].Traits.Get(); - if (Game.world.CanPlaceBuilding("fact", factBuildingInfo, a.Location - new int2(1, 1), a)) + if (a.World.CanPlaceBuilding("fact", factBuildingInfo, a.Location - new int2(1, 1), a)) return Cursor.Deploy; else return Cursor.DeployBlocked; diff --git a/OpenRa.Mods.Aftermath/Orders/SetChronoTankDestination.cs b/OpenRa.Mods.Aftermath/Orders/SetChronoTankDestination.cs index efc999aef9..dd69faa23a 100644 --- a/OpenRa.Mods.Aftermath/Orders/SetChronoTankDestination.cs +++ b/OpenRa.Mods.Aftermath/Orders/SetChronoTankDestination.cs @@ -13,7 +13,7 @@ namespace OpenRa.Mods.Aftermath.Orders this.self = self; } - public IEnumerable Order(int2 xy, MouseInput mi) + public IEnumerable Order(World world, int2 xy, MouseInput mi) { if (mi.Button == MouseButton.Left) { @@ -24,15 +24,15 @@ namespace OpenRa.Mods.Aftermath.Orders yield return new Order("ChronoshiftSelf", self, null, xy, null); } - public void Tick() { } - public void Render() + public void Tick( World world ) { } + public void Render( World world ) { - Game.world.WorldRenderer.DrawSelectionBox(self, Color.White, true); + world.WorldRenderer.DrawSelectionBox(self, Color.White, true); } - public Cursor GetCursor(int2 xy, MouseInput mi) + public Cursor GetCursor(World world, int2 xy, MouseInput mi) { - if (!Game.world.LocalPlayer.Shroud.IsExplored(xy)) + if (!world.LocalPlayer.Shroud.IsExplored(xy)) return Cursor.MoveBlocked; var movement = self.traits.GetOrDefault(); From bb5f7dac6bc298784d6fa632faa09cb487e2b411 Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 21 Jan 2010 13:41:22 +1300 Subject: [PATCH 11/18] Ditto Player, Shroud, and Smudge --- OpenRa.Game/Combat.cs | 2 +- OpenRa.Game/Player.cs | 12 +++++++----- OpenRa.Game/Shroud.cs | 6 +++--- OpenRa.Game/Smudge.cs | 15 ++++++++------- 4 files changed, 19 insertions(+), 16 deletions(-) diff --git a/OpenRa.Game/Combat.cs b/OpenRa.Game/Combat.cs index efc99d224c..7146fe1fc8 100644 --- a/OpenRa.Game/Combat.cs +++ b/OpenRa.Game/Combat.cs @@ -29,7 +29,7 @@ namespace OpenRa impactSound = warhead.WaterImpactSound; if (impactSound != null) Sound.Play(impactSound + ".aud"); - if (!isWater) Smudge.AddSmudge(targetTile, warhead); + if (!isWater) world.Map.AddSmudge(targetTile, warhead); if (warhead.Ore) world.Map.DestroyOre(targetTile.X, targetTile.Y); var maxSpread = GetMaximumSpread(weapon, warhead); diff --git a/OpenRa.Game/Player.cs b/OpenRa.Game/Player.cs index 492260011d..05322d4664 100644 --- a/OpenRa.Game/Player.cs +++ b/OpenRa.Game/Player.cs @@ -26,6 +26,8 @@ namespace OpenRa public int PowerProvided = 0; public int PowerDrained = 0; + public World World { get { return PlayerActor.World; } } + public Shroud Shroud; public Dictionary SupportPowers; @@ -52,7 +54,7 @@ namespace OpenRa PowerProvided = 0; PowerDrained = 0; - var myBuildings = Game.world.Actors + var myBuildings = World.Actors .Where(a => a.Owner == this && a.traits.Contains()); foreach (var a in myBuildings) @@ -83,7 +85,7 @@ namespace OpenRa void UpdateOreCapacity() { - OreCapacity = Game.world.Actors + OreCapacity = World.Actors .Where(a => a.Owner == this && a.traits.Contains()) .Select(a => a.Info.Traits.Get()) .Sum(b => b.Capacity); @@ -91,7 +93,7 @@ namespace OpenRa void GiveAdvice(string advice) { - if (this != Game.world.LocalPlayer) return; + if (this != World.LocalPlayer) return; // todo: store the condition or something. // repeat after Rules.General.SpeakDelay, as long as the condition holds. Sound.Play(advice); @@ -130,12 +132,12 @@ namespace OpenRa { UpdatePower(); UpdateOreCapacity(); - Shroud.Tick(); + Shroud.Tick( World ); foreach (var sp in SupportPowers.Values) sp.Tick(); - if (this == Game.world.LocalPlayer) + if (this == World.LocalPlayer) { var totalMoney = Cash + Ore; diff --git a/OpenRa.Game/Shroud.cs b/OpenRa.Game/Shroud.cs index 91622065cd..a0bbffae02 100644 --- a/OpenRa.Game/Shroud.cs +++ b/OpenRa.Game/Shroud.cs @@ -29,11 +29,11 @@ namespace OpenRa set { hasGPS = value; dirty = true;} } - public void Tick() + public void Tick( World world ) { // Clear active flags gapActive = new bool[128, 128]; - foreach (var a in Game.world.Actors.Where(a => a.traits.Contains() && owner != a.Owner)) + foreach (var a in world.Actors.Where(a => a.traits.Contains() && owner != a.Owner)) { foreach (var t in a.traits.Get().GetShroudedTiles()) gapActive[t.X, t.Y] = true; @@ -81,7 +81,7 @@ namespace OpenRa public void Explore(Actor a) { - foreach (var t in Game.world.FindTilesInCircle( + foreach (var t in a.World.FindTilesInCircle( (1f / Game.CellSize * a.CenterLocation).ToInt2(), a.Info.Traits.Get().Sight)) { diff --git a/OpenRa.Game/Smudge.cs b/OpenRa.Game/Smudge.cs index 24fa29b0fe..35454800c3 100644 --- a/OpenRa.Game/Smudge.cs +++ b/OpenRa.Game/Smudge.cs @@ -1,4 +1,5 @@ using OpenRa.GameRules; +using OpenRa.FileFormats; namespace OpenRa { @@ -8,11 +9,11 @@ namespace OpenRa const int firstCrater = 17; const int framesPerCrater = 5; - public static void AddSmudge(bool isCrater, int x, int y) + public static void AddSmudge(this Map map, bool isCrater, int x, int y) { - var smudge = Game.world.Map.MapTiles[x, y].smudge; + var smudge = map.MapTiles[x, y].smudge; if (smudge == 0) - Game.world.Map.MapTiles[x, y].smudge = (byte) (isCrater + map.MapTiles[x, y].smudge = (byte) (isCrater ? (firstCrater + framesPerCrater * ChooseSmudge()) : (firstScorch + ChooseSmudge())); @@ -21,21 +22,21 @@ namespace OpenRa /* deepen the crater */ var amount = (smudge - firstCrater) % framesPerCrater; if (amount < framesPerCrater - 1) - Game.world.Map.MapTiles[x, y].smudge++; + map.MapTiles[x, y].smudge++; } - public static void AddSmudge(int2 targetTile, WarheadInfo warhead) + public static void AddSmudge(this Map map, int2 targetTile, WarheadInfo warhead) { switch (warhead.Explosion) /* todo: push the scorch/crater behavior into data */ { case 4: case 5: - Smudge.AddSmudge(true, targetTile.X, targetTile.Y); + map.AddSmudge(true, targetTile.X, targetTile.Y); break; case 3: case 6: - Smudge.AddSmudge(false, targetTile.X, targetTile.Y); + map.AddSmudge(false, targetTile.X, targetTile.Y); break; } } From f01990cae1158febe3d2cde3303947cd712de76e Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 21 Jan 2010 13:44:02 +1300 Subject: [PATCH 12/18] some refs to "Game.world" i missed a while ago. --- OpenRa.Game/Game.cs | 2 +- OpenRa.Game/GameRules/TechTree.cs | 2 +- OpenRa.Game/Graphics/Minimap.cs | 4 ++-- OpenRa.Game/Graphics/Viewport.cs | 8 ++++---- OpenRa.Game/World.cs | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/OpenRa.Game/Game.cs b/OpenRa.Game/Game.cs index 464bb457c1..acc01f93b2 100644 --- a/OpenRa.Game/Game.cs +++ b/OpenRa.Game/Game.cs @@ -210,7 +210,7 @@ namespace OpenRa world.CreateActor("mcv", sp, world.players[client.Index]); } - Game.viewport.GoToStartLocation(); + Game.viewport.GoToStartLocation( Game.world.LocalPlayer ); orderManager.StartGame(); } diff --git a/OpenRa.Game/GameRules/TechTree.cs b/OpenRa.Game/GameRules/TechTree.cs index 7abac04ac7..14899a7154 100755 --- a/OpenRa.Game/GameRules/TechTree.cs +++ b/OpenRa.Game/GameRules/TechTree.cs @@ -23,7 +23,7 @@ namespace OpenRa.GameRules public Cache> GatherBuildings( Player player ) { var ret = new Cache>( x => new List() ); - foreach( var b in Game.world.Actors.Where( x => x.Owner == player && x.Info.Traits.Contains() ) ) + foreach( var b in player.World.Actors.Where( x => x.Owner == player && x.Info.Traits.Contains() ) ) { ret[ b.Info.Name ].Add( b ); var buildable = b.Info.Traits.GetOrDefault(); diff --git a/OpenRa.Game/Graphics/Minimap.cs b/OpenRa.Game/Graphics/Minimap.cs index 254a6f9fec..588bf2b371 100644 --- a/OpenRa.Game/Graphics/Minimap.cs +++ b/OpenRa.Game/Graphics/Minimap.cs @@ -81,7 +81,7 @@ namespace OpenRa.Graphics mapOnlySheet.Texture.SetData(oreLayer); - if (!world.Actors.Any(a => a.Owner == Game.world.LocalPlayer && a.traits.Contains())) + if (!world.Actors.Any(a => a.Owner == world.LocalPlayer && a.traits.Contains())) return; var bitmap = new Bitmap(oreLayer); @@ -109,7 +109,7 @@ namespace OpenRa.Graphics { for (var y = 0; y < 128; y++) for (var x = 0; x < 128; x++) - if (!Game.world.LocalPlayer.Shroud.DisplayOnRadar(x, y)) + if (!world.LocalPlayer.Shroud.DisplayOnRadar(x, y)) *(c + (y * bitmapData.Stride >> 2) + x) = shroudColor.ToArgb(); } } diff --git a/OpenRa.Game/Graphics/Viewport.cs b/OpenRa.Game/Graphics/Viewport.cs index 18fe71cb75..1e198ad97e 100644 --- a/OpenRa.Game/Graphics/Viewport.cs +++ b/OpenRa.Game/Graphics/Viewport.cs @@ -44,7 +44,7 @@ namespace OpenRa.Graphics public void DrawRegions( World world ) { - Game.world.WorldRenderer.palette.Update(Game.world.Actors.SelectMany( + world.WorldRenderer.palette.Update(world.Actors.SelectMany( a => a.traits.WithInterface())); float2 r1 = new float2(2, -2) / screenSize; @@ -54,7 +54,7 @@ namespace OpenRa.Graphics if( Game.orderManager.GameStarted ) { - Game.world.WorldRenderer.Draw(); + world.WorldRenderer.Draw(); Game.chrome.Draw( world ); if (Game.orderManager.IsNetplay && @@ -130,9 +130,9 @@ namespace OpenRa.Graphics scrollPosition = (avgPos - .5f * new float2(Width, Height)).ToInt2(); } - public void GoToStartLocation() + public void GoToStartLocation( Player player ) { - Center(Game.world.Actors.Where(a => a.Owner == Game.world.LocalPlayer && a.traits.Contains())); + Center(player.World.Actors.Where(a => a.Owner == player && a.traits.Contains())); } } } diff --git a/OpenRa.Game/World.cs b/OpenRa.Game/World.cs index cd3793f964..b9e2cf4dae 100644 --- a/OpenRa.Game/World.cs +++ b/OpenRa.Game/World.cs @@ -24,7 +24,7 @@ namespace OpenRa set { localPlayerIndex = value.Index; - Game.viewport.GoToStartLocation(); + Game.viewport.GoToStartLocation( value ); } } From 232ed72bbf84eff8ef8503ae3ce56d98188cfa43 Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 21 Jan 2010 13:47:06 +1300 Subject: [PATCH 13/18] more refs to Game.world (Orders, etc) --- OpenRa.Game/Game.cs | 4 ++-- OpenRa.Game/Orders/Order.cs | 12 ++++++------ OpenRa.Game/Orders/OrderIO.cs | 4 ++-- OpenRa.Game/Orders/OrderManager.cs | 12 ++++++------ OpenRa.Game/Orders/UnitOrders.cs | 2 +- 5 files changed, 17 insertions(+), 17 deletions(-) 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; } From 02ce7990c045ea92a856e5f89217acb8c0082043 Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 21 Jan 2010 13:51:09 +1300 Subject: [PATCH 14/18] more refs to Game.world (PathSearch) --- OpenRa.Game/PathFinder.cs | 12 ++++----- OpenRa.Game/PathSearch.cs | 28 ++++++++++----------- OpenRa.Game/Traits/Activities/DeliverOre.cs | 4 +-- OpenRa.Game/Traits/Activities/Harvest.cs | 2 +- OpenRa.Game/Traits/Activities/Move.cs | 2 +- 5 files changed, 24 insertions(+), 24 deletions(-) diff --git a/OpenRa.Game/PathFinder.cs b/OpenRa.Game/PathFinder.cs index 7c47e00825..2fac57d5b4 100644 --- a/OpenRa.Game/PathFinder.cs +++ b/OpenRa.Game/PathFinder.cs @@ -31,8 +31,8 @@ namespace OpenRa using (new PerfSample("find_unit_path")) { var pb = FindBidiPath( - PathSearch.FromPoint(target, from, umt, false).WithCustomBlocker(AvoidUnitsNear(from, 4)), - PathSearch.FromPoint(from, target, umt, false).WithCustomBlocker(AvoidUnitsNear(from, 4))); + PathSearch.FromPoint(world, target, from, umt, false).WithCustomBlocker(AvoidUnitsNear(from, 4)), + PathSearch.FromPoint(world, from, target, umt, false).WithCustomBlocker(AvoidUnitsNear(from, 4))); CheckSanePath2(pb, from, target); return pb; @@ -46,7 +46,7 @@ namespace OpenRa var tilesInRange = world.FindTilesInCircle(target, range) .Where( t => world.IsCellBuildable( t, umt ) ); - var path = FindPath( PathSearch.FromPoints( tilesInRange, src, umt, false ).WithCustomBlocker(AvoidUnitsNear(src, 4))); + var path = FindPath( PathSearch.FromPoints( world, tilesInRange, src, umt, false ).WithCustomBlocker(AvoidUnitsNear(src, 4))); path.Reverse(); return path; } @@ -66,7 +66,7 @@ namespace OpenRa { while (!search.queue.Empty) { - var p = search.Expand( passableCost ); + var p = search.Expand( world, passableCost ); PerfHistory.Increment("nodes_expanded", .01); if (search.heuristic(p) == 0) @@ -103,13 +103,13 @@ namespace OpenRa while (!fromSrc.queue.Empty && !fromDest.queue.Empty) { /* make some progress on the first search */ - var p = fromSrc.Expand( passableCost ); + var p = fromSrc.Expand( world, passableCost ); if (fromDest.cellInfo[p.X, p.Y].Seen && fromDest.cellInfo[p.X, p.Y].MinCost < float.PositiveInfinity) return MakeBidiPath(fromSrc, fromDest, p); /* make some progress on the second search */ - var q = fromDest.Expand( passableCost ); + var q = fromDest.Expand( world, passableCost ); if (fromSrc.cellInfo[q.X, q.Y].Seen && fromSrc.cellInfo[q.X, q.Y].MinCost < float.PositiveInfinity) return MakeBidiPath(fromSrc, fromDest, q); diff --git a/OpenRa.Game/PathSearch.cs b/OpenRa.Game/PathSearch.cs index f6a9c0266c..c18e263709 100755 --- a/OpenRa.Game/PathSearch.cs +++ b/OpenRa.Game/PathSearch.cs @@ -34,12 +34,12 @@ namespace OpenRa return this; } - public int2 Expand( float[][ , ] passableCost ) + public int2 Expand( World world, float[][ , ] passableCost ) { var p = queue.Pop(); cellInfo[ p.Location.X, p.Location.Y ].Seen = true; - var custom2 = Game.world.customTerrain[p.Location.X, p.Location.Y]; + var custom2 = world.customTerrain[p.Location.X, p.Location.Y]; var thisCost = (custom2 != null) ? custom2.GetCost(p.Location, umt) : passableCost[(int)umt][p.Location.X, p.Location.Y]; @@ -51,24 +51,24 @@ namespace OpenRa { int2 newHere = p.Location + d; - if (!Game.world.Map.IsInMap(newHere.X, newHere.Y)) continue; + if (!world.Map.IsInMap(newHere.X, newHere.Y)) continue; if( cellInfo[ newHere.X, newHere.Y ].Seen ) continue; - var custom = Game.world.customTerrain[newHere.X, newHere.Y]; + var custom = world.customTerrain[newHere.X, newHere.Y]; var costHere = (custom != null) ? custom.GetCost(newHere, umt) : passableCost[(int)umt][newHere.X, newHere.Y]; if (costHere == float.PositiveInfinity) continue; - if (!Game.world.BuildingInfluence.CanMoveHere(newHere) && - Game.world.BuildingInfluence.GetBuildingAt(newHere) != ignoreBuilding) + if (!world.BuildingInfluence.CanMoveHere(newHere) && + world.BuildingInfluence.GetBuildingAt(newHere) != ignoreBuilding) continue; - if (Game.world.Map.IsOverlaySolid(newHere)) + if (world.Map.IsOverlaySolid(newHere)) continue; // Replicate real-ra behavior of not being able to enter a cell if there is a mixture of crushable and uncrushable units - if (checkForBlocked && (Game.world.UnitInfluence.GetUnitsAt(newHere).Any(a => !Game.world.IsActorPathableToCrush(a, umt)))) + if (checkForBlocked && (world.UnitInfluence.GetUnitsAt(newHere).Any(a => !world.IsActorPathableToCrush(a, umt)))) continue; if (customBlock != null && customBlock(newHere)) @@ -93,27 +93,27 @@ namespace OpenRa return p.Location; } - public void AddInitialCell( int2 location ) + public void AddInitialCell( World world, int2 location ) { - if (!Game.world.Map.IsInMap(location.X, location.Y)) + if (!world.Map.IsInMap(location.X, location.Y)) return; cellInfo[ location.X, location.Y ] = new CellInfo( 0, location, false ); queue.Add( new PathDistance( heuristic( location ), location ) ); } - public static PathSearch FromPoint( int2 from, int2 target, UnitMovementType umt, bool checkForBlocked ) + public static PathSearch FromPoint( World world, int2 from, int2 target, UnitMovementType umt, bool checkForBlocked ) { var search = new PathSearch { heuristic = DefaultEstimator( target ), umt = umt, checkForBlocked = checkForBlocked }; - search.AddInitialCell( from ); + search.AddInitialCell( world, from ); return search; } - public static PathSearch FromPoints(IEnumerable froms, int2 target, UnitMovementType umt, bool checkForBlocked) + public static PathSearch FromPoints(World world, IEnumerable froms, int2 target, UnitMovementType umt, bool checkForBlocked) { var search = new PathSearch { @@ -123,7 +123,7 @@ namespace OpenRa }; foreach (var sl in froms) - search.AddInitialCell(sl); + search.AddInitialCell(world, sl); return search; } diff --git a/OpenRa.Game/Traits/Activities/DeliverOre.cs b/OpenRa.Game/Traits/Activities/DeliverOre.cs index fe20499cd9..3717c7cf58 100644 --- a/OpenRa.Game/Traits/Activities/DeliverOre.cs +++ b/OpenRa.Game/Traits/Activities/DeliverOre.cs @@ -45,10 +45,10 @@ namespace OpenRa.Traits.Activities var refineries = self.World.Actors.Where( x => x.traits.Contains() && x.Owner == self.Owner ).ToList(); if( refinery != null ) - search.AddInitialCell( refinery.Location + refineryDeliverOffset ); + search.AddInitialCell( self.World, refinery.Location + refineryDeliverOffset ); else foreach( var r in refineries ) - search.AddInitialCell( r.Location + refineryDeliverOffset ); + search.AddInitialCell( self.World, r.Location + refineryDeliverOffset ); var path = self.World.PathFinder.FindPath( search ); path.Reverse(); diff --git a/OpenRa.Game/Traits/Activities/Harvest.cs b/OpenRa.Game/Traits/Activities/Harvest.cs index 9ac0d84089..587836a8fe 100644 --- a/OpenRa.Game/Traits/Activities/Harvest.cs +++ b/OpenRa.Game/Traits/Activities/Harvest.cs @@ -62,7 +62,7 @@ namespace OpenRa.Traits.Activities umt = UnitMovementType.Wheel, checkForBlocked = true }; - search.AddInitialCell(self.Location); + search.AddInitialCell(self.World, self.Location); return self.World.PathFinder.FindPath(search); })); self.QueueActivity(new Harvest()); diff --git a/OpenRa.Game/Traits/Activities/Move.cs b/OpenRa.Game/Traits/Activities/Move.cs index c016f87264..b5cec75a2e 100755 --- a/OpenRa.Game/Traits/Activities/Move.cs +++ b/OpenRa.Game/Traits/Activities/Move.cs @@ -31,7 +31,7 @@ namespace OpenRa.Traits.Activities { this.getPath = (self, mobile) => self.World.PathFinder.FindPath( - PathSearch.FromPoint( self.Location, destination, mobile.GetMovementType(), false ) + PathSearch.FromPoint( self.World, self.Location, destination, mobile.GetMovementType(), false ) .WithCustomBlocker( self.World.PathFinder.AvoidUnitsNear( self.Location, 4 )).WithIgnoredBuilding( ignoreBuilding )); this.destination = destination; From b3911db149433fc9b3fd6be1a98df77fca31c3c2 Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 21 Jan 2010 13:52:31 +1300 Subject: [PATCH 15/18] more refs to Game.world (UIOverlay) --- OpenRa.Game/Graphics/WorldRenderer.cs | 2 +- OpenRa.Game/Orders/PlaceBuildingOrderGenerator.cs | 2 +- OpenRa.Game/UiOverlay.cs | 12 ++++++------ OpenRa.Game/WorldUtils.cs | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/OpenRa.Game/Graphics/WorldRenderer.cs b/OpenRa.Game/Graphics/WorldRenderer.cs index c6c1d9faad..512d170a90 100644 --- a/OpenRa.Game/Graphics/WorldRenderer.cs +++ b/OpenRa.Game/Graphics/WorldRenderer.cs @@ -77,7 +77,7 @@ namespace OpenRa.Graphics foreach (var e in world.Effects) DrawSpriteList(rect, e.Render()); - uiOverlay.Draw(); + uiOverlay.Draw( world ); spriteRenderer.Flush(); diff --git a/OpenRa.Game/Orders/PlaceBuildingOrderGenerator.cs b/OpenRa.Game/Orders/PlaceBuildingOrderGenerator.cs index 12a565fb88..2e586f3489 100644 --- a/OpenRa.Game/Orders/PlaceBuildingOrderGenerator.cs +++ b/OpenRa.Game/Orders/PlaceBuildingOrderGenerator.cs @@ -49,7 +49,7 @@ namespace OpenRa.Orders public void Render( World world ) { - world.WorldRenderer.uiOverlay.DrawBuildingGrid( Building, BuildingInfo ); + world.WorldRenderer.uiOverlay.DrawBuildingGrid( world, Building, BuildingInfo ); } public Cursor GetCursor(World world, int2 xy, MouseInput mi) diff --git a/OpenRa.Game/UiOverlay.cs b/OpenRa.Game/UiOverlay.cs index 0af585ffc1..555ab223b7 100644 --- a/OpenRa.Game/UiOverlay.cs +++ b/OpenRa.Game/UiOverlay.cs @@ -34,24 +34,24 @@ namespace OpenRa return SheetBuilder.Add( data, new Size(Game.CellSize,Game.CellSize) ); } - public void Draw() + public void Draw( World world ) { if (ShowUnitDebug) for (var j = 0; j < 128; j++) for (var i = 0; i < 128; i++) - if (Game.world.UnitInfluence.GetUnitsAt(new int2(i, j)).Any()) + if (world.UnitInfluence.GetUnitsAt(new int2(i, j)).Any()) spriteRenderer.DrawSprite(unitDebug, Game.CellSize * new float2(i, j), 0); } - public void DrawBuildingGrid( string name, BuildingInfo bi ) + public void DrawBuildingGrid( World world, string name, BuildingInfo bi ) { var position = Game.controller.MousePosition.ToInt2(); var topLeft = position - Footprint.AdjustForBuildingSize( bi ); - var isCloseEnough = Game.world.IsCloseEnoughToBase(Game.world.LocalPlayer, name, bi, topLeft); + var isCloseEnough = world.IsCloseEnoughToBase(world.LocalPlayer, name, bi, topLeft); foreach( var t in Footprint.Tiles( name, bi, topLeft ) ) - spriteRenderer.DrawSprite( ( isCloseEnough && Game.world.IsCellBuildable( t, bi.WaterBound - ? UnitMovementType.Float : UnitMovementType.Wheel ) && !Game.world.Map.ContainsResource( t ) ) + spriteRenderer.DrawSprite( ( isCloseEnough && world.IsCellBuildable( t, bi.WaterBound + ? UnitMovementType.Float : UnitMovementType.Wheel ) && !world.Map.ContainsResource( t ) ) ? buildOk : buildBlocked, Game.CellSize * t, 0 ); spriteRenderer.Flush(); diff --git a/OpenRa.Game/WorldUtils.cs b/OpenRa.Game/WorldUtils.cs index 925db9fdca..36f18f485b 100755 --- a/OpenRa.Game/WorldUtils.cs +++ b/OpenRa.Game/WorldUtils.cs @@ -93,7 +93,7 @@ namespace OpenRa { return world.FindUnits(a, b) .Where( x => x.traits.Contains() ) - .GroupBy(x => (x.Owner == Game.world.LocalPlayer) ? x.Info.Traits.Get().Priority : 0) + .GroupBy(x => (x.Owner == world.LocalPlayer) ? x.Info.Traits.Get().Priority : 0) .OrderByDescending(g => g.Key) .Select( g => g.AsEnumerable() ) .DefaultIfEmpty( new Actor[] {} ) From 698985c30c15f933af20cef8fd2874f9e3d8802f Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 21 Jan 2010 13:57:44 +1300 Subject: [PATCH 16/18] more refs to Game.world (Controller) --- OpenRa.Game/Chrome.cs | 2 +- OpenRa.Game/Controller.cs | 34 ++++++++++++++++---------------- OpenRa.Game/Game.cs | 4 ++-- OpenRa.Game/Graphics/Viewport.cs | 10 +++++----- 4 files changed, 25 insertions(+), 25 deletions(-) diff --git a/OpenRa.Game/Chrome.cs b/OpenRa.Game/Chrome.cs index d21745005b..e5e9df354e 100644 --- a/OpenRa.Game/Chrome.cs +++ b/OpenRa.Game/Chrome.cs @@ -812,7 +812,7 @@ namespace OpenRa } int2 lastMousePos; - public bool HandleInput(MouseInput mi) + public bool HandleInput(World world, MouseInput mi) { if (mi.Event == MouseInputEvent.Move) lastMousePos = mi.Location; diff --git a/OpenRa.Game/Controller.cs b/OpenRa.Game/Controller.cs index 743468a466..2e73dd00ce 100644 --- a/OpenRa.Game/Controller.cs +++ b/OpenRa.Game/Controller.cs @@ -43,15 +43,15 @@ namespace OpenRa List recentOrders = new List(); - void ApplyOrders(float2 xy, MouseInput mi) + void ApplyOrders(World world, float2 xy, MouseInput mi) { if (orderGenerator == null) return; - var orders = orderGenerator.Order(Game.world, xy.ToInt2(), mi).ToArray(); + var orders = orderGenerator.Order(world, xy.ToInt2(), mi).ToArray(); recentOrders.AddRange( orders ); var voicedActor = orders.Select(o => o.Subject) - .FirstOrDefault(a => a.Owner == Game.world.LocalPlayer && a.traits.Contains()); + .FirstOrDefault(a => a.Owner == world.LocalPlayer && a.traits.Contains()); var isMove = orders.Any(o => o.OrderString == "Move"); var isAttack = orders.Any( o => o.OrderString == "Attack" ); @@ -61,7 +61,7 @@ namespace OpenRa Sound.PlayVoice(isAttack ? "Attack" : "Move", voicedActor); if (isMove) - Game.world.Add(new Effects.MoveFlash(Game.world, Game.CellSize * xy)); + world.Add(new Effects.MoveFlash(world, Game.CellSize * xy)); } } @@ -76,7 +76,7 @@ namespace OpenRa } float2 dragStart, dragEnd; - public bool HandleInput(MouseInput mi) + public bool HandleInput(World world, MouseInput mi) { var xy = Game.viewport.ViewToWorld(mi); @@ -84,7 +84,7 @@ namespace OpenRa { if (!(orderGenerator is PlaceBuildingOrderGenerator)) dragStart = dragEnd = xy; - ApplyOrders(xy, mi); + ApplyOrders(world, xy, mi); } if (mi.Button == MouseButton.Left && mi.Event == MouseInputEvent.Move) @@ -94,8 +94,8 @@ namespace OpenRa { if (orderGenerator is UnitOrderGenerator) { - var newSelection = Game.world.SelectActorsInBox(Game.CellSize * dragStart, Game.CellSize * xy); - CombineSelection(newSelection, mi.Modifiers.HasModifier(Modifiers.Shift), dragStart == xy); + var newSelection = world.SelectActorsInBox(Game.CellSize * dragStart, Game.CellSize * xy); + CombineSelection(world, newSelection, mi.Modifiers.HasModifier(Modifiers.Shift), dragStart == xy); } dragStart = dragEnd = xy; @@ -105,12 +105,12 @@ namespace OpenRa dragStart = dragEnd = xy; if (mi.Button == MouseButton.Right && mi.Event == MouseInputEvent.Down) - ApplyOrders(xy, mi); + ApplyOrders(world, xy, mi); return true; } - void CombineSelection(IEnumerable newSelection, bool isCombine, bool isClick) + void CombineSelection(World world, IEnumerable newSelection, bool isCombine, bool isClick) { var oldSelection = (orderGenerator is UnitOrderGenerator) ? (orderGenerator as UnitOrderGenerator).selection : new Actor[] { }.AsEnumerable(); @@ -127,7 +127,7 @@ namespace OpenRa var voicedUnit = ((UnitOrderGenerator)orderGenerator).selection .Where(a => a.traits.Contains() - && a.Owner == Game.world.LocalPlayer) + && a.Owner == world.LocalPlayer) .FirstOrDefault(); Sound.PlayVoice("Select", voicedUnit); @@ -144,9 +144,9 @@ namespace OpenRa public float2 MousePosition { get { return dragEnd; } } - public Cursor ChooseCursor() + public Cursor ChooseCursor( World world ) { - int sync = Game.world.SyncHash(); + int sync = world.SyncHash(); try { @@ -157,18 +157,18 @@ namespace OpenRa Modifiers = GetModifierKeys(), }; - return orderGenerator.GetCursor( Game.world, MousePosition.ToInt2(), mi ); + return orderGenerator.GetCursor( world, MousePosition.ToInt2(), mi ); } finally { - if( sync != Game.world.SyncHash() ) + if( sync != world.SyncHash() ) throw new InvalidOperationException( "Desync in Controller.ChooseCursor" ); } } Cache> controlGroups = new Cache>(_ => new List()); - public void DoControlGroup(int group, Modifiers mods) + public void DoControlGroup(World world, int group, Modifiers mods) { var uog = orderGenerator as UnitOrderGenerator; if (uog == null) return; @@ -193,7 +193,7 @@ namespace OpenRa return; } - CombineSelection(controlGroups[group], mods.HasModifier(Modifiers.Shift), false); + CombineSelection(world, controlGroups[group], mods.HasModifier(Modifiers.Shift), false); } public int? GetControlGroupForActor(Actor a) diff --git a/OpenRa.Game/Game.cs b/OpenRa.Game/Game.cs index ba262b2a24..3bdae15e52 100644 --- a/OpenRa.Game/Game.cs +++ b/OpenRa.Game/Game.cs @@ -237,7 +237,7 @@ namespace OpenRa { int sync = Game.world.SyncHash(); - Game.viewport.DispatchMouseInput( + Game.viewport.DispatchMouseInput( world, new MouseInput { Button = (MouseButton)(int)e.Button, @@ -271,7 +271,7 @@ namespace OpenRa if( !Game.chat.isChatting ) if( e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9 ) - Game.controller.DoControlGroup( (int)e.KeyCode - (int)Keys.D0, (Modifiers)(int)e.Modifiers ); + Game.controller.DoControlGroup( world, (int)e.KeyCode - (int)Keys.D0, (Modifiers)(int)e.Modifiers ); if( sync != Game.world.SyncHash() ) throw new InvalidOperationException( "Desync in OnKeyDown" ); diff --git a/OpenRa.Game/Graphics/Viewport.cs b/OpenRa.Game/Graphics/Viewport.cs index 1e198ad97e..c3e12badeb 100644 --- a/OpenRa.Game/Graphics/Viewport.cs +++ b/OpenRa.Game/Graphics/Viewport.cs @@ -8,7 +8,7 @@ namespace OpenRa.Graphics { interface IHandleInput { - bool HandleInput(MouseInput mi); + bool HandleInput(World world, MouseInput mi); } class Viewport @@ -85,7 +85,7 @@ namespace OpenRa.Graphics Game.chrome.DrawLobby( world ); } - var c = Game.chrome.HitTest(mousePos) ? Cursor.Default : Game.controller.ChooseCursor(); + var c = Game.chrome.HitTest(mousePos) ? Cursor.Default : Game.controller.ChooseCursor( world ); cursorRenderer.DrawSprite(c.GetSprite((int)cursorFrame), mousePos + Location - c.GetHotspot(), 0); cursorRenderer.Flush(); @@ -98,18 +98,18 @@ namespace OpenRa.Graphics } IHandleInput dragRegion = null; - public void DispatchMouseInput(MouseInput mi) + public void DispatchMouseInput(World world, MouseInput mi) { if (mi.Event == MouseInputEvent.Move) mousePos = mi.Location; if (dragRegion != null) { - dragRegion.HandleInput( mi ); + dragRegion.HandleInput( world, mi ); if (mi.Event == MouseInputEvent.Up) dragRegion = null; return; } - dragRegion = regions.FirstOrDefault(r => r.HandleInput(mi)); + dragRegion = regions.FirstOrDefault(r => r.HandleInput(world, mi)); if (mi.Event != MouseInputEvent.Down) dragRegion = null; } From 2adff2519b2e7a760a187104c254a84a7cdfe8a4 Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 21 Jan 2010 13:58:42 +1300 Subject: [PATCH 17/18] oops --- OpenRa.Game/Orders/Order.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OpenRa.Game/Orders/Order.cs b/OpenRa.Game/Orders/Order.cs index b568523f99..953f599fb9 100644 --- a/OpenRa.Game/Orders/Order.cs +++ b/OpenRa.Game/Orders/Order.cs @@ -66,7 +66,7 @@ namespace OpenRa static Player LookupPlayer(World world, uint index) { - return Game.world.players + return world.players .Where(x => x.Value.Index == index) .First().Value; } From a36989d5963f762fe7fd56205415ecbdf6ae7f61 Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 21 Jan 2010 14:15:50 +1300 Subject: [PATCH 18/18] etc, etc, etc, SupportPowers --- OpenRa.Game/SupportPowers/ChronospherePower.cs | 4 ++-- OpenRa.Game/SupportPowers/GpsSatellite.cs | 4 ++-- OpenRa.Game/SupportPowers/IronCurtainPower.cs | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/OpenRa.Game/SupportPowers/ChronospherePower.cs b/OpenRa.Game/SupportPowers/ChronospherePower.cs index bb5615f072..bd6d10f8a8 100644 --- a/OpenRa.Game/SupportPowers/ChronospherePower.cs +++ b/OpenRa.Game/SupportPowers/ChronospherePower.cs @@ -20,12 +20,12 @@ namespace OpenRa.SupportPowers Sound.Play("chrono2.aud"); // Play chronosphere active anim - var chronosphere = Game.world.Actors.Where(a => a.Owner == p.Owner && a.traits.Contains()).FirstOrDefault(); + var chronosphere = target.World.Actors.Where(a => a.Owner == p.Owner && a.traits.Contains()).FirstOrDefault(); if (chronosphere != null) Game.controller.AddOrder(Order.PlayAnimation(chronosphere, "active")); // Trigger screen desaturate effect - foreach (var a in Game.world.Actors.Where(a => a.traits.Contains())) + foreach (var a in target.World.Actors.Where(a => a.traits.Contains())) a.traits.Get().DoChronoshift(); } SupportPower p; diff --git a/OpenRa.Game/SupportPowers/GpsSatellite.cs b/OpenRa.Game/SupportPowers/GpsSatellite.cs index 5ef5f74407..195d99abab 100644 --- a/OpenRa.Game/SupportPowers/GpsSatellite.cs +++ b/OpenRa.Game/SupportPowers/GpsSatellite.cs @@ -12,13 +12,13 @@ namespace OpenRa.SupportPowers public void IsChargingNotification(SupportPower p) { } public void IsReadyNotification(SupportPower p) { - var launchSite = Game.world.Actors + var launchSite = p.Owner.World.Actors .FirstOrDefault(a => a.Owner == p.Owner && a.traits.Contains()); if (launchSite == null) return; - Game.world.AddFrameEndTask(w => + p.Owner.World.AddFrameEndTask(w => { w.Add(new SatelliteLaunch(launchSite)); w.Add(new DelayedAction(revealDelay, () => p.Owner.Shroud.HasGPS = true)); diff --git a/OpenRa.Game/SupportPowers/IronCurtainPower.cs b/OpenRa.Game/SupportPowers/IronCurtainPower.cs index a612087446..dc0b5deaa5 100644 --- a/OpenRa.Game/SupportPowers/IronCurtainPower.cs +++ b/OpenRa.Game/SupportPowers/IronCurtainPower.cs @@ -25,7 +25,7 @@ namespace OpenRa.SupportPowers Sound.Play("ironcur9.aud"); // Play active anim - var ironCurtain = Game.world.Actors + var ironCurtain = target.World.Actors .Where(a => a.Owner == p.Owner && a.traits.Contains()) .FirstOrDefault(); if (ironCurtain != null)