diff --git a/OpenRA.Game/Graphics/WorldRenderer.cs b/OpenRA.Game/Graphics/WorldRenderer.cs index 6ab1c14973..5068018a64 100644 --- a/OpenRA.Game/Graphics/WorldRenderer.cs +++ b/OpenRA.Game/Graphics/WorldRenderer.cs @@ -173,12 +173,15 @@ namespace OpenRA.Graphics Game.Renderer.DisableScissor(); - var overlayRenderables = World.Selection.Actors.Where(a => !a.Disposed) + var aboveShroud = World.ActorsWithTrait().Where(a => a.Actor.IsInWorld && !a.Actor.Disposed) + .SelectMany(a => a.Trait.RenderAboveShroud(a.Actor, this)); + + var aboveShroudSelected = World.Selection.Actors.Where(a => !a.Disposed) .SelectMany(a => a.TraitsImplementing() .SelectMany(t => t.RenderAboveShroud(a, this))); Game.Renderer.WorldVoxelRenderer.BeginFrame(); - var finalOverlayRenderables = overlayRenderables.Select(r => r.PrepareRender(this)); + var finalOverlayRenderables = aboveShroud.Concat(aboveShroudSelected).Select(r => r.PrepareRender(this)); Game.Renderer.WorldVoxelRenderer.EndFrame(); // HACK: Keep old grouping behaviour diff --git a/OpenRA.Game/Traits/TraitsInterfaces.cs b/OpenRA.Game/Traits/TraitsInterfaces.cs index 871b5c5b18..055e3618c9 100644 --- a/OpenRA.Game/Traits/TraitsInterfaces.cs +++ b/OpenRA.Game/Traits/TraitsInterfaces.cs @@ -376,6 +376,7 @@ namespace OpenRA.Traits public interface IRenderAboveWorld { void RenderAboveWorld(Actor self, WorldRenderer wr); } public interface IRenderShroud { void RenderShroud(Shroud shroud, WorldRenderer wr); } + public interface IRenderAboveShroud { IEnumerable RenderAboveShroud(Actor self, WorldRenderer wr); } public interface IRenderAboveShroudWhenSelected { IEnumerable RenderAboveShroud(Actor self, WorldRenderer wr); } public interface ITargetableInfo : ITraitInfoInterface