Introduce IRenderAboveShroud interface.

This commit is contained in:
Paul Chote
2016-08-22 16:51:00 +01:00
parent 11805bb567
commit 6354686b58
2 changed files with 6 additions and 2 deletions

View File

@@ -173,12 +173,15 @@ namespace OpenRA.Graphics
Game.Renderer.DisableScissor(); Game.Renderer.DisableScissor();
var overlayRenderables = World.Selection.Actors.Where(a => !a.Disposed) var aboveShroud = World.ActorsWithTrait<IRenderAboveShroud>().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<IRenderAboveShroudWhenSelected>() .SelectMany(a => a.TraitsImplementing<IRenderAboveShroudWhenSelected>()
.SelectMany(t => t.RenderAboveShroud(a, this))); .SelectMany(t => t.RenderAboveShroud(a, this)));
Game.Renderer.WorldVoxelRenderer.BeginFrame(); 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(); Game.Renderer.WorldVoxelRenderer.EndFrame();
// HACK: Keep old grouping behaviour // HACK: Keep old grouping behaviour

View File

@@ -376,6 +376,7 @@ namespace OpenRA.Traits
public interface IRenderAboveWorld { void RenderAboveWorld(Actor self, WorldRenderer wr); } public interface IRenderAboveWorld { void RenderAboveWorld(Actor self, WorldRenderer wr); }
public interface IRenderShroud { void RenderShroud(Shroud shroud, WorldRenderer wr); } public interface IRenderShroud { void RenderShroud(Shroud shroud, WorldRenderer wr); }
public interface IRenderAboveShroud { IEnumerable<IRenderable> RenderAboveShroud(Actor self, WorldRenderer wr); }
public interface IRenderAboveShroudWhenSelected { IEnumerable<IRenderable> RenderAboveShroud(Actor self, WorldRenderer wr); } public interface IRenderAboveShroudWhenSelected { IEnumerable<IRenderable> RenderAboveShroud(Actor self, WorldRenderer wr); }
public interface ITargetableInfo : ITraitInfoInterface public interface ITargetableInfo : ITraitInfoInterface