diff --git a/OpenRA.Game/Effects/IEffect.cs b/OpenRA.Game/Effects/IEffect.cs index 46dc295503..24d0fe0982 100644 --- a/OpenRA.Game/Effects/IEffect.cs +++ b/OpenRA.Game/Effects/IEffect.cs @@ -19,4 +19,6 @@ namespace OpenRA.Effects void Tick(World world); IEnumerable Render(WorldRenderer r); } + + public interface IEffectAboveShroud { IEnumerable RenderAboveShroud(WorldRenderer wr); } } diff --git a/OpenRA.Game/Graphics/WorldRenderer.cs b/OpenRA.Game/Graphics/WorldRenderer.cs index db50675bea..dc8b2ca46f 100644 --- a/OpenRA.Game/Graphics/WorldRenderer.cs +++ b/OpenRA.Game/Graphics/WorldRenderer.cs @@ -13,6 +13,7 @@ using System; using System.Collections.Generic; using System.Drawing; using System.Linq; +using OpenRA.Effects; using OpenRA.Traits; namespace OpenRA.Graphics @@ -180,8 +181,15 @@ namespace OpenRA.Graphics .SelectMany(a => a.TraitsImplementing() .SelectMany(t => t.RenderAboveShroud(a, this))); + var aboveShroudEffects = World.Effects.Select(e => e as IEffectAboveShroud) + .Where(e => e != null) + .SelectMany(e => e.RenderAboveShroud(this)); + Game.Renderer.WorldVoxelRenderer.BeginFrame(); - var finalOverlayRenderables = aboveShroud.Concat(aboveShroudSelected).Select(r => r.PrepareRender(this)); + var finalOverlayRenderables = aboveShroud + .Concat(aboveShroudSelected) + .Concat(aboveShroudEffects) + .Select(r => r.PrepareRender(this)); Game.Renderer.WorldVoxelRenderer.EndFrame(); // HACK: Keep old grouping behaviour