From 8580ae0f78385d0018c47635ec53f7d493760370 Mon Sep 17 00:00:00 2001 From: Bob Date: Fri, 30 Oct 2009 00:19:53 +1300 Subject: [PATCH] Moved our TerrainRender ref into WorldRenderer; TR.tileSet want to be somewhere else (it's not just renderer, it affects pathing) --- OpenRa.Game/Game.cs | 12 +++++------- OpenRa.Game/Graphics/TerrainRenderer.cs | 15 +++++---------- OpenRa.Game/Graphics/WorldRenderer.cs | 25 +++++++++++++++---------- 3 files changed, 25 insertions(+), 27 deletions(-) diff --git a/OpenRa.Game/Game.cs b/OpenRa.Game/Game.cs index d6b5a7ddb2..4588f35b56 100644 --- a/OpenRa.Game/Game.cs +++ b/OpenRa.Game/Game.cs @@ -20,7 +20,6 @@ namespace OpenRa.Game public static World world; public static Map map; static TreeCache treeCache; - public static TerrainRenderer terrain; public static Viewport viewport; public static PathFinder PathFinder; public static WorldRenderer worldRenderer; @@ -51,11 +50,10 @@ namespace OpenRa.Game var mapFile = new IniFile(FileSystem.Open(mapName)); map = new Map(mapFile); - FileSystem.Mount(new Package(map.Theater + ".mix")); - + FileSystem.Mount(new Package(map.Theater + ".mix")); + viewport = new Viewport( clientSize, map.Offset, map.Offset + map.Size, renderer ); - terrain = new TerrainRenderer(renderer, map, viewport); world = new World(); treeCache = new TreeCache(map); @@ -68,11 +66,11 @@ namespace OpenRa.Game LoadMapBuildings(mapFile); LoadMapUnits(mapFile); - PathFinder = new PathFinder(map, terrain.tileSet); - controller = new Controller(); worldRenderer = new WorldRenderer(renderer); + PathFinder = new PathFinder( map, worldRenderer.terrainRenderer.tileSet ); + soundEngine = new ISoundEngine(); sounds = new Cache(LoadSound); @@ -144,7 +142,7 @@ namespace OpenRa.Game return map.IsInMap(a.X, a.Y) && TerrainCosts.Cost(umt, - terrain.tileSet.GetWalkability(map.MapTiles[a.X, a.Y])) < double.PositiveInfinity; + worldRenderer.terrainRenderer.tileSet.GetWalkability( map.MapTiles[ a.X, a.Y ] ) ) < double.PositiveInfinity; } static IEnumerable FindUnits(float2 a, float2 b) diff --git a/OpenRa.Game/Graphics/TerrainRenderer.cs b/OpenRa.Game/Graphics/TerrainRenderer.cs index 74835e245c..3fb2995a35 100644 --- a/OpenRa.Game/Graphics/TerrainRenderer.cs +++ b/OpenRa.Game/Graphics/TerrainRenderer.cs @@ -12,19 +12,14 @@ namespace OpenRa.Game.Graphics IndexBuffer indexBuffer; Sheet terrainSheet; public TileSet tileSet; - Region region; Renderer renderer; Map map; - Viewport viewport; OverlayRenderer overlayRenderer; - public TerrainRenderer(Renderer renderer, Map map, Viewport viewport) + public TerrainRenderer(Renderer renderer, Map map) { this.renderer = renderer; - this.viewport = viewport; - region = Region.Create(viewport, DockStyle.Left, viewport.Width - 128, Draw, null ); - viewport.AddRegion(region); this.map = map; overlayRenderer = new OverlayRenderer( renderer, map ); @@ -60,14 +55,14 @@ namespace OpenRa.Game.Graphics indexBuffer.SetData( indices ); } - void Draw() + public void Draw( Viewport viewport ) { int indicesPerRow = map.Width * 6; int verticesPerRow = map.Width * 4; - int visibleRows = (int)(region.Size.Y / 24.0f + 2); - - int firstRow = (int)((region.Position.Y + viewport.Location.Y) / 24.0f - map.YOffset); + int visibleRows = (int)(viewport.Width / 24.0f + 2); + + int firstRow = (int)((viewport.Location.Y) / 24.0f - map.YOffset); int lastRow = firstRow + visibleRows; if (lastRow < 0 || firstRow > map.Height) diff --git a/OpenRa.Game/Graphics/WorldRenderer.cs b/OpenRa.Game/Graphics/WorldRenderer.cs index 03f05a95bd..bbfd402e7a 100644 --- a/OpenRa.Game/Graphics/WorldRenderer.cs +++ b/OpenRa.Game/Graphics/WorldRenderer.cs @@ -8,25 +8,28 @@ using OpenRa.Game.Traits; namespace OpenRa.Game.Graphics { class WorldRenderer - { + { + public readonly TerrainRenderer terrainRenderer; public readonly SpriteRenderer spriteRenderer; public readonly LineRenderer lineRenderer; public readonly Region region; - public readonly UiOverlay uiOverlay; + public readonly UiOverlay uiOverlay; readonly Renderer renderer; public static bool ShowUnitPaths = false; public WorldRenderer(Renderer renderer) - { + { + terrainRenderer = new TerrainRenderer( renderer, Game.map ); + // TODO: this is layout policy. it belongs at a higher level than this. - region = Region.Create(Game.viewport, DockStyle.Left, + region = Region.Create(Game.viewport, DockStyle.Left, Game.viewport.Width - 128, Draw, Game.controller.HandleMouseInput); - Game.viewport.AddRegion(region); - - this.renderer = renderer; + Game.viewport.AddRegion(region); + + this.renderer = renderer; spriteRenderer = new SpriteRenderer(renderer, true); lineRenderer = new LineRenderer(renderer); uiOverlay = new UiOverlay(spriteRenderer); @@ -52,7 +55,9 @@ namespace OpenRa.Game.Graphics } public void Draw() - { + { + terrainRenderer.Draw( Game.viewport ); + var rect = new RectangleF((region.Position + Game.viewport.Location).ToPointF(), region.Size.ToSizeF()); @@ -92,8 +97,8 @@ namespace OpenRa.Game.Graphics foreach( var a in uog.selection ) DrawSelectionBox(a, Color.White, true); - lineRenderer.Flush(); - + lineRenderer.Flush(); + renderer.DrawText(string.Format("Frame {0}", Game.orderManager.FrameNumber), new int2(5, 5), Color.White); }