Pass WorldRenderer to RenderAsTerrain for palette lookup.

This commit is contained in:
Paul Chote
2013-02-25 17:46:28 +13:00
parent 5b360a7fe2
commit f890ea010e
3 changed files with 12 additions and 4 deletions

View File

@@ -112,7 +112,7 @@ namespace OpenRA.Graphics
terrainRenderer.Draw(this, Game.viewport);
foreach (var a in world.traitDict.ActorsWithTraitMultiple<IRenderAsTerrain>(world))
foreach (var r in a.Trait.RenderAsTerrain(a.Actor))
foreach (var r in a.Trait.RenderAsTerrain(this, a.Actor))
r.Sprite.DrawAt(r.Pos, r.Palette.RowIndex(this), r.Scale);
foreach (var a in world.Selection.Actors)

View File

@@ -209,7 +209,7 @@ namespace OpenRA.Traits
public interface IPostRenderSelection { void RenderAfterWorld(WorldRenderer wr); }
public interface IPreRenderSelection { void RenderBeforeWorld(WorldRenderer wr, Actor self); }
public interface IRenderAsTerrain { IEnumerable<Renderable> RenderAsTerrain(Actor self); }
public interface IRenderAsTerrain { IEnumerable<Renderable> RenderAsTerrain(WorldRenderer wr, Actor self); }
public interface ITargetable
{

View File

@@ -135,10 +135,18 @@ namespace OpenRA.Mods.RA
return bridges.GetBridge(self.Location + new CVec(offset[0], offset[1]));
}
public IEnumerable<Renderable> RenderAsTerrain(Actor self)
bool initializePalettes = true;
PaletteReference terrainPalette;
public IEnumerable<Renderable> RenderAsTerrain(WorldRenderer wr, Actor self)
{
if (initializePalettes)
{
terrainPalette = wr.Palette("terrain");
initializePalettes = false;
}
foreach (var t in TileSprites[currentTemplate])
yield return new Renderable(t.Value, t.Key.ToPPos().ToFloat2(), PaletteReference.FromName("terrain"), Game.CellSize * t.Key.Y);
yield return new Renderable(t.Value, t.Key.ToPPos().ToFloat2(), terrainPalette, Game.CellSize * t.Key.Y);
}
bool IsIntact(Bridge b)