Interleave renderables for effects and actors.
Previously, renderables from actors were z-ordered, but effects were excluded and not ordered. Now we order them all as a whole.
This commit is contained in:
@@ -94,10 +94,7 @@ namespace OpenRA.Graphics
|
|||||||
|
|
||||||
List<IFinalizedRenderable> GenerateRenderables()
|
List<IFinalizedRenderable> GenerateRenderables()
|
||||||
{
|
{
|
||||||
var actors = World.ScreenMap.ActorsInBox(Viewport.TopLeft, Viewport.BottomRight)
|
var actors = World.ScreenMap.ActorsInBox(Viewport.TopLeft, Viewport.BottomRight).Append(World.WorldActor);
|
||||||
.Append(World.WorldActor);
|
|
||||||
|
|
||||||
// Include player actor for the rendered player
|
|
||||||
if (World.RenderPlayer != null)
|
if (World.RenderPlayer != null)
|
||||||
actors = actors.Append(World.RenderPlayer.PlayerActor);
|
actors = actors.Append(World.RenderPlayer.PlayerActor);
|
||||||
|
|
||||||
@@ -105,19 +102,14 @@ namespace OpenRA.Graphics
|
|||||||
if (World.OrderGenerator != null)
|
if (World.OrderGenerator != null)
|
||||||
worldRenderables = worldRenderables.Concat(World.OrderGenerator.Render(this, World));
|
worldRenderables = worldRenderables.Concat(World.OrderGenerator.Render(this, World));
|
||||||
|
|
||||||
|
worldRenderables = worldRenderables.Concat(World.Effects.SelectMany(e => e.Render(this)));
|
||||||
worldRenderables = worldRenderables.OrderBy(RenderableScreenZPositionComparisonKey);
|
worldRenderables = worldRenderables.OrderBy(RenderableScreenZPositionComparisonKey);
|
||||||
|
|
||||||
// Effects are drawn on top of all actors
|
|
||||||
// HACK: Effects aren't interleaved with actors.
|
|
||||||
var effectRenderables = World.Effects
|
|
||||||
.SelectMany(e => e.Render(this));
|
|
||||||
|
|
||||||
if (World.OrderGenerator != null)
|
if (World.OrderGenerator != null)
|
||||||
effectRenderables = effectRenderables.Concat(World.OrderGenerator.RenderAfterWorld(this, World));
|
worldRenderables = worldRenderables.Concat(World.OrderGenerator.RenderAfterWorld(this, World));
|
||||||
|
|
||||||
Game.Renderer.WorldVoxelRenderer.BeginFrame();
|
Game.Renderer.WorldVoxelRenderer.BeginFrame();
|
||||||
var renderables = worldRenderables.Concat(effectRenderables)
|
var renderables = worldRenderables.Select(r => r.PrepareRender(this)).ToList();
|
||||||
.Select(r => r.PrepareRender(this)).ToList();
|
|
||||||
Game.Renderer.WorldVoxelRenderer.EndFrame();
|
Game.Renderer.WorldVoxelRenderer.EndFrame();
|
||||||
|
|
||||||
return renderables;
|
return renderables;
|
||||||
|
|||||||
Reference in New Issue
Block a user