From dcec7489115d1721b76db20c8a48da5c5d4c6e01 Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Mon, 20 Dec 2010 19:43:25 +1300 Subject: [PATCH] fix #436 bridges in wrong place in render sequence --- OpenRA.Game/Graphics/WorldRenderer.cs | 3 +++ OpenRA.Game/Traits/TraitsInterfaces.cs | 2 ++ OpenRA.Mods.RA/Bridge.cs | 4 ++-- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/OpenRA.Game/Graphics/WorldRenderer.cs b/OpenRA.Game/Graphics/WorldRenderer.cs index 9727f51af7..cbe8b6f776 100644 --- a/OpenRA.Game/Graphics/WorldRenderer.cs +++ b/OpenRA.Game/Graphics/WorldRenderer.cs @@ -77,6 +77,9 @@ namespace OpenRA.Graphics Game.Renderer.EnableScissor(bounds.Left, bounds.Top, bounds.Width, bounds.Height); terrainRenderer.Draw(this, Game.viewport); + foreach (var a in world.traitDict.ActorsWithTraitMultiple(world)) + foreach (var r in a.Trait.RenderAsTerrain(a.Actor)) + r.Sprite.DrawAt(r.Pos, this.GetPaletteIndex(r.Palette), r.Scale); foreach (var a in world.Selection.Actors) if (!a.Destroyed) diff --git a/OpenRA.Game/Traits/TraitsInterfaces.cs b/OpenRA.Game/Traits/TraitsInterfaces.cs index 587470d951..51494174c1 100755 --- a/OpenRA.Game/Traits/TraitsInterfaces.cs +++ b/OpenRA.Game/Traits/TraitsInterfaces.cs @@ -36,6 +36,7 @@ namespace OpenRA.Traits public interface ITick { void Tick(Actor self); } public interface IRender { IEnumerable Render(Actor self); } + public interface IIssueOrder { IEnumerable Orders { get; } @@ -202,6 +203,7 @@ namespace OpenRA.Traits public interface IPostRenderSelection { void RenderAfterWorld(WorldRenderer wr, Actor self); } public interface IPreRenderSelection { void RenderBeforeWorld(WorldRenderer wr, Actor self); } + public interface IRenderAsTerrain { IEnumerable RenderAsTerrain(Actor self); } public struct Target // a target: either an actor, or a fixed location. { diff --git a/OpenRA.Mods.RA/Bridge.cs b/OpenRA.Mods.RA/Bridge.cs index febd85e636..0cd5af6c48 100644 --- a/OpenRA.Mods.RA/Bridge.cs +++ b/OpenRA.Mods.RA/Bridge.cs @@ -62,7 +62,7 @@ namespace OpenRA.Mods.RA } } - class Bridge: IRender, INotifyDamage + class Bridge: IRenderAsTerrain, INotifyDamage { static string cachedTileset; static Cache, Sprite> sprites; @@ -131,7 +131,7 @@ namespace OpenRA.Mods.RA return bridges.GetBridge(self.Location + new int2(offset[0], offset[1])); } - public IEnumerable Render(Actor self) + public IEnumerable RenderAsTerrain(Actor self) { foreach (var t in TileSprites[currentTemplate]) yield return new Renderable(t.Value, Game.CellSize * t.Key, "terrain", Game.CellSize * t.Key.Y);