From 71cd7b8fe01ba06ec00a6c294ffed66f30cf749f Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 21 Jan 2010 12:42:58 +1300 Subject: [PATCH] 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))