WorldRenderer now uses the global renderers too

This commit is contained in:
alzeih
2010-07-21 18:17:43 +12:00
parent c2197b0adb
commit 4065a4f6a2
2 changed files with 46 additions and 53 deletions

View File

@@ -21,27 +21,21 @@ namespace OpenRA.Graphics
{ {
readonly World world; readonly World world;
internal readonly TerrainRenderer terrainRenderer; internal readonly TerrainRenderer terrainRenderer;
internal readonly SpriteRenderer spriteRenderer;
internal readonly LineRenderer lineRenderer;
internal readonly UiOverlay uiOverlay; internal readonly UiOverlay uiOverlay;
internal readonly Renderer renderer;
internal readonly HardwarePalette palette; internal readonly HardwarePalette palette;
internal WorldRenderer(World world, Renderer renderer) internal WorldRenderer(World world)
{ {
this.world = world; this.world = world;
this.renderer = renderer;
terrainRenderer = new TerrainRenderer(world, renderer, this); terrainRenderer = new TerrainRenderer(world, Game.Renderer, this);
spriteRenderer = renderer.SpriteRenderer; uiOverlay = new UiOverlay(Game.Renderer.SpriteRenderer);
lineRenderer = new LineRenderer(renderer); palette = new HardwarePalette(Game.Renderer, world.Map);
uiOverlay = new UiOverlay(spriteRenderer);
palette = new HardwarePalette(renderer, world.Map);
} }
public void DrawLine(float2 start, float2 end, Color startColor, Color endColor) public void DrawLine(float2 start, float2 end, Color startColor, Color endColor)
{ {
lineRenderer.DrawLine(start,end,startColor,endColor); Game.Renderer.LineRenderer.DrawLine(start,end,startColor,endColor);
} }
public int GetPaletteIndex(string name) public int GetPaletteIndex(string name)
@@ -67,7 +61,7 @@ namespace OpenRA.Graphics
void DrawSpriteList(IEnumerable<Renderable> images) void DrawSpriteList(IEnumerable<Renderable> images)
{ {
foreach (var image in images) foreach (var image in images)
spriteRenderer.DrawSprite(image.Sprite, image.Pos, image.Palette); Game.Renderer.SpriteRenderer.DrawSprite(image.Sprite, image.Pos, image.Palette);
} }
class SpriteComparer : IComparer<Renderable> class SpriteComparer : IComparer<Renderable>
@@ -127,24 +121,24 @@ namespace OpenRA.Graphics
public void Draw() public void Draw()
{ {
var bounds = GetBoundsRect(); var bounds = GetBoundsRect();
renderer.Device.EnableScissor(bounds.Left, bounds.Top, bounds.Width, bounds.Height); Game.Renderer.Device.EnableScissor(bounds.Left, bounds.Top, bounds.Width, bounds.Height);
terrainRenderer.Draw(Game.viewport); terrainRenderer.Draw(Game.viewport);
DrawSpriteList(worldSprites); DrawSpriteList(worldSprites);
uiOverlay.Draw(world); uiOverlay.Draw(world);
spriteRenderer.Flush(); Game.Renderer.SpriteRenderer.Flush();
DrawBandBox(); DrawBandBox();
if (Game.controller.orderGenerator != null) if (Game.controller.orderGenerator != null)
Game.controller.orderGenerator.Render(world); Game.controller.orderGenerator.Render(world);
if (world.LocalPlayer != null) if (world.LocalPlayer != null)
world.LocalPlayer.Shroud.Draw(spriteRenderer); world.LocalPlayer.Shroud.Draw(Game.Renderer.SpriteRenderer);
spriteRenderer.Flush(); Game.Renderer.SpriteRenderer.Flush();
renderer.Device.DisableScissor(); Game.Renderer.Device.DisableScissor();
if (Game.Settings.IndexDebug) if (Game.Settings.IndexDebug)
{ {
@@ -152,7 +146,7 @@ namespace OpenRA.Graphics
DrawBins(bounds); DrawBins(bounds);
} }
lineRenderer.Flush(); Game.Renderer.LineRenderer.Flush();
} }
void DrawBox(RectangleF r, Color color) void DrawBox(RectangleF r, Color color)
@@ -160,10 +154,10 @@ namespace OpenRA.Graphics
var a = new float2(r.Left, r.Top); var a = new float2(r.Left, r.Top);
var b = new float2(r.Right - a.X, 0); var b = new float2(r.Right - a.X, 0);
var c = new float2(0, r.Bottom - a.Y); var c = new float2(0, r.Bottom - a.Y);
lineRenderer.DrawLine(a, a + b, color, color); Game.Renderer.LineRenderer.DrawLine(a, a + b, color, color);
lineRenderer.DrawLine(a + b, a + b + c, color, color); Game.Renderer.LineRenderer.DrawLine(a + b, a + b + c, color, color);
lineRenderer.DrawLine(a + b + c, a + c, color, color); Game.Renderer.LineRenderer.DrawLine(a + b + c, a + c, color, color);
lineRenderer.DrawLine(a, a + c, color, color); Game.Renderer.LineRenderer.DrawLine(a, a + c, color, color);
} }
void DrawBins(RectangleF bounds) void DrawBins(RectangleF bounds)
@@ -175,8 +169,8 @@ namespace OpenRA.Graphics
for (var j = 0; j < world.Map.MapSize.Y; for (var j = 0; j < world.Map.MapSize.Y;
j += world.WorldActor.Info.Traits.Get<SpatialBinsInfo>().BinSize) j += world.WorldActor.Info.Traits.Get<SpatialBinsInfo>().BinSize)
{ {
lineRenderer.DrawLine(new float2(0, j * 24), new float2(world.Map.MapSize.X * 24, j * 24), Color.Black, Color.Black); Game.Renderer.LineRenderer.DrawLine(new float2(0, j * 24), new float2(world.Map.MapSize.X * 24, j * 24), Color.Black, Color.Black);
lineRenderer.DrawLine(new float2(j * 24, 0), new float2(j * 24, world.Map.MapSize.Y * 24), Color.Black, Color.Black); Game.Renderer.LineRenderer.DrawLine(new float2(j * 24, 0), new float2(j * 24, world.Map.MapSize.Y * 24), Color.Black, Color.Black);
} }
} }
@@ -189,10 +183,10 @@ namespace OpenRA.Graphics
var b = new float2(selbox.Value.Second.X - a.X, 0); var b = new float2(selbox.Value.Second.X - a.X, 0);
var c = new float2(0, selbox.Value.Second.Y - a.Y); var c = new float2(0, selbox.Value.Second.Y - a.Y);
lineRenderer.DrawLine(a, a + b, Color.White, Color.White); Game.Renderer.LineRenderer.DrawLine(a, a + b, Color.White, Color.White);
lineRenderer.DrawLine(a + b, a + b + c, Color.White, Color.White); Game.Renderer.LineRenderer.DrawLine(a + b, a + b + c, Color.White, Color.White);
lineRenderer.DrawLine(a + b + c, a + c, Color.White, Color.White); Game.Renderer.LineRenderer.DrawLine(a + b + c, a + c, Color.White, Color.White);
lineRenderer.DrawLine(a, a + c, Color.White, Color.White); Game.Renderer.LineRenderer.DrawLine(a, a + c, Color.White, Color.White);
foreach (var u in 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); DrawSelectionBox(u, Color.Yellow, false);
@@ -207,15 +201,15 @@ namespace OpenRA.Graphics
var xY = new float2(bounds.Left, bounds.Bottom); var xY = new float2(bounds.Left, bounds.Bottom);
var XY = new float2(bounds.Right, bounds.Bottom); var XY = new float2(bounds.Right, bounds.Bottom);
lineRenderer.DrawLine(xy, xy + new float2(4, 0), c, c); Game.Renderer.LineRenderer.DrawLine(xy, xy + new float2(4, 0), c, c);
lineRenderer.DrawLine(xy, xy + new float2(0, 4), c, c); Game.Renderer.LineRenderer.DrawLine(xy, xy + new float2(0, 4), c, c);
lineRenderer.DrawLine(Xy, Xy + new float2(-4, 0), c, c); Game.Renderer.LineRenderer.DrawLine(Xy, Xy + new float2(-4, 0), c, c);
lineRenderer.DrawLine(Xy, Xy + new float2(0, 4), c, c); Game.Renderer.LineRenderer.DrawLine(Xy, Xy + new float2(0, 4), c, c);
lineRenderer.DrawLine(xY, xY + new float2(4, 0), c, c); Game.Renderer.LineRenderer.DrawLine(xY, xY + new float2(4, 0), c, c);
lineRenderer.DrawLine(xY, xY + new float2(0, -4), c, c); Game.Renderer.LineRenderer.DrawLine(xY, xY + new float2(0, -4), c, c);
lineRenderer.DrawLine(XY, XY + new float2(-4, 0), c, c); Game.Renderer.LineRenderer.DrawLine(XY, XY + new float2(-4, 0), c, c);
lineRenderer.DrawLine(XY, XY + new float2(0, -4), c, c); Game.Renderer.LineRenderer.DrawLine(XY, XY + new float2(0, -4), c, c);
if (drawHealthBar) if (drawHealthBar)
{ {
@@ -262,8 +256,8 @@ namespace OpenRA.Graphics
void DrawHealthBar(Actor selectedUnit, float2 xy, float2 Xy) void DrawHealthBar(Actor selectedUnit, float2 xy, float2 Xy)
{ {
var c = Color.Gray; var c = Color.Gray;
lineRenderer.DrawLine(xy + new float2(0, -2), xy + new float2(0, -4), c, c); Game.Renderer.LineRenderer.DrawLine(xy + new float2(0, -2), xy + new float2(0, -4), c, c);
lineRenderer.DrawLine(Xy + new float2(0, -2), Xy + new float2(0, -4), c, c); Game.Renderer.LineRenderer.DrawLine(Xy + new float2(0, -2), Xy + new float2(0, -4), c, c);
var healthAmount = (float)selectedUnit.Health / selectedUnit.Info.Traits.Get<OwnedActorInfo>().HP; var healthAmount = (float)selectedUnit.Health / selectedUnit.Info.Traits.Get<OwnedActorInfo>().HP;
var healthColor = (healthAmount < selectedUnit.World.Defaults.ConditionRed) ? Color.Red var healthColor = (healthAmount < selectedUnit.World.Defaults.ConditionRed) ? Color.Red
@@ -278,12 +272,12 @@ namespace OpenRA.Graphics
var z = float2.Lerp(xy, Xy, healthAmount); var z = float2.Lerp(xy, Xy, healthAmount);
lineRenderer.DrawLine(z + new float2(0, -4), Xy + new float2(0, -4), c, c); Game.Renderer.LineRenderer.DrawLine(z + new float2(0, -4), Xy + new float2(0, -4), c, c);
lineRenderer.DrawLine(z + new float2(0, -2), Xy + new float2(0, -2), c, c); Game.Renderer.LineRenderer.DrawLine(z + new float2(0, -2), Xy + new float2(0, -2), c, c);
lineRenderer.DrawLine(xy + new float2(0, -3), z + new float2(0, -3), healthColor, healthColor); Game.Renderer.LineRenderer.DrawLine(xy + new float2(0, -3), z + new float2(0, -3), healthColor, healthColor);
lineRenderer.DrawLine(xy + new float2(0, -2), z + new float2(0, -2), healthColor2, healthColor2); Game.Renderer.LineRenderer.DrawLine(xy + new float2(0, -2), z + new float2(0, -2), healthColor2, healthColor2);
lineRenderer.DrawLine(xy + new float2(0, -4), z + new float2(0, -4), healthColor2, healthColor2); Game.Renderer.LineRenderer.DrawLine(xy + new float2(0, -4), z + new float2(0, -4), healthColor2, healthColor2);
} }
// depends on the order of pips in TraitsInterfaces.cs! // depends on the order of pips in TraitsInterfaces.cs!
@@ -298,7 +292,7 @@ namespace OpenRA.Graphics
var pipImages = new Animation("pips"); var pipImages = new Animation("pips");
pipImages.PlayFetchIndex("groups", () => (int)group); pipImages.PlayFetchIndex("groups", () => (int)group);
pipImages.Tick(); pipImages.Tick();
spriteRenderer.DrawSprite(pipImages.Image, basePosition + new float2(-8, 1), "chrome"); Game.Renderer.SpriteRenderer.DrawSprite(pipImages.Image, basePosition + new float2(-8, 1), "chrome");
} }
void DrawPips(Actor selectedUnit, float2 basePosition) void DrawPips(Actor selectedUnit, float2 basePosition)
@@ -318,7 +312,7 @@ namespace OpenRA.Graphics
} }
var pipImages = new Animation("pips"); var pipImages = new Animation("pips");
pipImages.PlayRepeating(pipStrings[(int)pip]); pipImages.PlayRepeating(pipStrings[(int)pip]);
spriteRenderer.DrawSprite(pipImages.Image, pipxyBase + pipxyOffset, "chrome"); Game.Renderer.SpriteRenderer.DrawSprite(pipImages.Image, pipxyBase + pipxyOffset, "chrome");
pipxyOffset += new float2(4, 0); pipxyOffset += new float2(4, 0);
} }
// Increment row // Increment row
@@ -342,7 +336,7 @@ namespace OpenRA.Graphics
var tagImages = new Animation("pips"); var tagImages = new Animation("pips");
tagImages.PlayRepeating(tagStrings[(int)tag]); tagImages.PlayRepeating(tagStrings[(int)tag]);
spriteRenderer.DrawSprite(tagImages.Image, tagxyBase + tagxyOffset, "chrome"); Game.Renderer.SpriteRenderer.DrawSprite(tagImages.Image, tagxyBase + tagxyOffset, "chrome");
// Increment row // Increment row
tagxyOffset.Y += 8; tagxyOffset.Y += 8;
@@ -356,16 +350,16 @@ namespace OpenRA.Graphics
foreach (var t in dict.Keys) foreach (var t in dict.Keys)
{ {
if (!dict.ContainsKey(t + new int2(-1, 0))) if (!dict.ContainsKey(t + new int2(-1, 0)))
lineRenderer.DrawLine(Game.CellSize * t, Game.CellSize * (t + new int2(0, 1)), Game.Renderer.LineRenderer.DrawLine(Game.CellSize * t, Game.CellSize * (t + new int2(0, 1)),
c, c); c, c);
if (!dict.ContainsKey(t + new int2(1, 0))) if (!dict.ContainsKey(t + new int2(1, 0)))
lineRenderer.DrawLine(Game.CellSize * (t + new int2(1, 0)), Game.CellSize * (t + new int2(1, 1)), Game.Renderer.LineRenderer.DrawLine(Game.CellSize * (t + new int2(1, 0)), Game.CellSize * (t + new int2(1, 1)),
c, c); c, c);
if (!dict.ContainsKey(t + new int2(0, -1))) if (!dict.ContainsKey(t + new int2(0, -1)))
lineRenderer.DrawLine(Game.CellSize * t, Game.CellSize * (t + new int2(1, 0)), Game.Renderer.LineRenderer.DrawLine(Game.CellSize * t, Game.CellSize * (t + new int2(1, 0)),
c, c); c, c);
if (!dict.ContainsKey(t + new int2(0, 1))) if (!dict.ContainsKey(t + new int2(0, 1)))
lineRenderer.DrawLine(Game.CellSize * (t + new int2(0, 1)), Game.CellSize * (t + new int2(1, 1)), Game.Renderer.LineRenderer.DrawLine(Game.CellSize * (t + new int2(0, 1)), Game.CellSize * (t + new int2(1, 1)),
c, c); c, c);
} }
} }
@@ -376,7 +370,7 @@ namespace OpenRA.Graphics
for (var i = 1; i <= 32; i++) for (var i = 1; i <= 32; i++)
{ {
var pos = location + Game.CellSize * range * float2.FromAngle((float)(Math.PI * i) / 8); var pos = location + Game.CellSize * range * float2.FromAngle((float)(Math.PI * i) / 8);
lineRenderer.DrawLine(prev, pos, c, c); Game.Renderer.LineRenderer.DrawLine(prev, pos, c, c);
prev = pos; prev = pos;
} }
} }

View File

@@ -62,7 +62,6 @@ namespace OpenRA
Timer.Time( "----World.ctor" ); Timer.Time( "----World.ctor" );
Map = map; Map = map;
Rules.LoadRules(manifest,Map); Rules.LoadRules(manifest,Map);
Timer.Time( "load rules: {0}" ); Timer.Time( "load rules: {0}" );
@@ -71,7 +70,7 @@ namespace OpenRA
TileSet.LoadTiles(); TileSet.LoadTiles();
Timer.Time( "Tileset: {0}" ); Timer.Time( "Tileset: {0}" );
WorldRenderer = new WorldRenderer(this, Game.Renderer); WorldRenderer = new WorldRenderer(this);
Timer.Time("renderer: {0}"); Timer.Time("renderer: {0}");
WorldActor = CreateActor("World", new int2(int.MaxValue, int.MaxValue), null); WorldActor = CreateActor("World", new int2(int.MaxValue, int.MaxValue), null);