diff --git a/OpenRA.Game/Graphics/WorldRenderer.cs b/OpenRA.Game/Graphics/WorldRenderer.cs index 594ac3562b..fb66548ffd 100644 --- a/OpenRA.Game/Graphics/WorldRenderer.cs +++ b/OpenRA.Game/Graphics/WorldRenderer.cs @@ -112,7 +112,7 @@ namespace OpenRA.Graphics terrainRenderer.Draw(this, Game.viewport); foreach (var a in world.traitDict.ActorsWithTraitMultiple(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) diff --git a/OpenRA.Game/Traits/TraitsInterfaces.cs b/OpenRA.Game/Traits/TraitsInterfaces.cs index feadbb2ab3..9350d0b0ff 100755 --- a/OpenRA.Game/Traits/TraitsInterfaces.cs +++ b/OpenRA.Game/Traits/TraitsInterfaces.cs @@ -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 RenderAsTerrain(Actor self); } + public interface IRenderAsTerrain { IEnumerable RenderAsTerrain(WorldRenderer wr, Actor self); } public interface ITargetable { diff --git a/OpenRA.Mods.RA/Bridge.cs b/OpenRA.Mods.RA/Bridge.cs index 88ce8af4fa..b98df7974f 100644 --- a/OpenRA.Mods.RA/Bridge.cs +++ b/OpenRA.Mods.RA/Bridge.cs @@ -135,10 +135,18 @@ namespace OpenRA.Mods.RA return bridges.GetBridge(self.Location + new CVec(offset[0], offset[1])); } - public IEnumerable RenderAsTerrain(Actor self) + bool initializePalettes = true; + PaletteReference terrainPalette; + public IEnumerable 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)