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); terrainRenderer.Draw(this, Game.viewport);
foreach (var a in world.traitDict.ActorsWithTraitMultiple<IRenderAsTerrain>(world)) 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); r.Sprite.DrawAt(r.Pos, r.Palette.RowIndex(this), r.Scale);
foreach (var a in world.Selection.Actors) 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 IPostRenderSelection { void RenderAfterWorld(WorldRenderer wr); }
public interface IPreRenderSelection { void RenderBeforeWorld(WorldRenderer wr, Actor self); } 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 public interface ITargetable
{ {

View File

@@ -135,10 +135,18 @@ namespace OpenRA.Mods.RA
return bridges.GetBridge(self.Location + new CVec(offset[0], offset[1])); 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]) 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) bool IsIntact(Bridge b)