Moved our TerrainRender ref into WorldRenderer; TR.tileSet want to be somewhere else (it's not just renderer, it affects pathing)

This commit is contained in:
Bob
2009-10-30 00:19:53 +13:00
parent 02ed35b501
commit 8580ae0f78
3 changed files with 25 additions and 27 deletions

View File

@@ -20,7 +20,6 @@ namespace OpenRa.Game
public static World world; public static World world;
public static Map map; public static Map map;
static TreeCache treeCache; static TreeCache treeCache;
public static TerrainRenderer terrain;
public static Viewport viewport; public static Viewport viewport;
public static PathFinder PathFinder; public static PathFinder PathFinder;
public static WorldRenderer worldRenderer; public static WorldRenderer worldRenderer;
@@ -51,11 +50,10 @@ namespace OpenRa.Game
var mapFile = new IniFile(FileSystem.Open(mapName)); var mapFile = new IniFile(FileSystem.Open(mapName));
map = new Map(mapFile); 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 ); viewport = new Viewport( clientSize, map.Offset, map.Offset + map.Size, renderer );
terrain = new TerrainRenderer(renderer, map, viewport);
world = new World(); world = new World();
treeCache = new TreeCache(map); treeCache = new TreeCache(map);
@@ -68,11 +66,11 @@ namespace OpenRa.Game
LoadMapBuildings(mapFile); LoadMapBuildings(mapFile);
LoadMapUnits(mapFile); LoadMapUnits(mapFile);
PathFinder = new PathFinder(map, terrain.tileSet);
controller = new Controller(); controller = new Controller();
worldRenderer = new WorldRenderer(renderer); worldRenderer = new WorldRenderer(renderer);
PathFinder = new PathFinder( map, worldRenderer.terrainRenderer.tileSet );
soundEngine = new ISoundEngine(); soundEngine = new ISoundEngine();
sounds = new Cache<string, ISoundSource>(LoadSound); sounds = new Cache<string, ISoundSource>(LoadSound);
@@ -144,7 +142,7 @@ namespace OpenRa.Game
return map.IsInMap(a.X, a.Y) && return map.IsInMap(a.X, a.Y) &&
TerrainCosts.Cost(umt, 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<Actor> FindUnits(float2 a, float2 b) static IEnumerable<Actor> FindUnits(float2 a, float2 b)

View File

@@ -12,19 +12,14 @@ namespace OpenRa.Game.Graphics
IndexBuffer indexBuffer; IndexBuffer indexBuffer;
Sheet terrainSheet; Sheet terrainSheet;
public TileSet tileSet; public TileSet tileSet;
Region region;
Renderer renderer; Renderer renderer;
Map map; Map map;
Viewport viewport;
OverlayRenderer overlayRenderer; OverlayRenderer overlayRenderer;
public TerrainRenderer(Renderer renderer, Map map, Viewport viewport) public TerrainRenderer(Renderer renderer, Map map)
{ {
this.renderer = renderer; this.renderer = renderer;
this.viewport = viewport;
region = Region.Create(viewport, DockStyle.Left, viewport.Width - 128, Draw, null );
viewport.AddRegion(region);
this.map = map; this.map = map;
overlayRenderer = new OverlayRenderer( renderer, map ); overlayRenderer = new OverlayRenderer( renderer, map );
@@ -60,14 +55,14 @@ namespace OpenRa.Game.Graphics
indexBuffer.SetData( indices ); indexBuffer.SetData( indices );
} }
void Draw() public void Draw( Viewport viewport )
{ {
int indicesPerRow = map.Width * 6; int indicesPerRow = map.Width * 6;
int verticesPerRow = map.Width * 4; int verticesPerRow = map.Width * 4;
int visibleRows = (int)(region.Size.Y / 24.0f + 2); int visibleRows = (int)(viewport.Width / 24.0f + 2);
int firstRow = (int)((region.Position.Y + viewport.Location.Y) / 24.0f - map.YOffset); int firstRow = (int)((viewport.Location.Y) / 24.0f - map.YOffset);
int lastRow = firstRow + visibleRows; int lastRow = firstRow + visibleRows;
if (lastRow < 0 || firstRow > map.Height) if (lastRow < 0 || firstRow > map.Height)

View File

@@ -8,25 +8,28 @@ using OpenRa.Game.Traits;
namespace OpenRa.Game.Graphics namespace OpenRa.Game.Graphics
{ {
class WorldRenderer class WorldRenderer
{ {
public readonly TerrainRenderer terrainRenderer;
public readonly SpriteRenderer spriteRenderer; public readonly SpriteRenderer spriteRenderer;
public readonly LineRenderer lineRenderer; public readonly LineRenderer lineRenderer;
public readonly Region region; public readonly Region region;
public readonly UiOverlay uiOverlay; public readonly UiOverlay uiOverlay;
readonly Renderer renderer; readonly Renderer renderer;
public static bool ShowUnitPaths = false; public static bool ShowUnitPaths = false;
public WorldRenderer(Renderer renderer) public WorldRenderer(Renderer renderer)
{ {
terrainRenderer = new TerrainRenderer( renderer, Game.map );
// TODO: this is layout policy. it belongs at a higher level than this. // 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.viewport.Width - 128, Draw,
Game.controller.HandleMouseInput); Game.controller.HandleMouseInput);
Game.viewport.AddRegion(region); Game.viewport.AddRegion(region);
this.renderer = renderer; this.renderer = renderer;
spriteRenderer = new SpriteRenderer(renderer, true); spriteRenderer = new SpriteRenderer(renderer, true);
lineRenderer = new LineRenderer(renderer); lineRenderer = new LineRenderer(renderer);
uiOverlay = new UiOverlay(spriteRenderer); uiOverlay = new UiOverlay(spriteRenderer);
@@ -52,7 +55,9 @@ namespace OpenRa.Game.Graphics
} }
public void Draw() public void Draw()
{ {
terrainRenderer.Draw( Game.viewport );
var rect = new RectangleF((region.Position + Game.viewport.Location).ToPointF(), var rect = new RectangleF((region.Position + Game.viewport.Location).ToPointF(),
region.Size.ToSizeF()); region.Size.ToSizeF());
@@ -92,8 +97,8 @@ namespace OpenRa.Game.Graphics
foreach( var a in uog.selection ) foreach( var a in uog.selection )
DrawSelectionBox(a, Color.White, true); DrawSelectionBox(a, Color.White, true);
lineRenderer.Flush(); lineRenderer.Flush();
renderer.DrawText(string.Format("Frame {0}", Game.orderManager.FrameNumber), new int2(5, 5), Color.White); renderer.DrawText(string.Format("Frame {0}", Game.orderManager.FrameNumber), new int2(5, 5), Color.White);
} }