Sort renderables in-place in WorldRenderer.GenerateRenderables
This commit is contained in:
@@ -20,7 +20,7 @@ namespace OpenRA.Graphics
|
||||
{
|
||||
public sealed class WorldRenderer : IDisposable
|
||||
{
|
||||
public static readonly Func<IRenderable, int> RenderableScreenZPositionComparisonKey =
|
||||
public static readonly Func<IRenderable, int> RenderableZPositionComparisonKey =
|
||||
r => ZPosition(r.Pos, r.ZOffset);
|
||||
|
||||
public readonly Size TileSize;
|
||||
@@ -133,7 +133,9 @@ namespace OpenRA.Graphics
|
||||
foreach (var e in World.ScreenMap.RenderableEffectsInBox(Viewport.TopLeft, Viewport.BottomRight))
|
||||
renderablesBuffer.AddRange(e.Render(this));
|
||||
|
||||
foreach (var renderable in renderablesBuffer.OrderBy(RenderableScreenZPositionComparisonKey))
|
||||
renderablesBuffer.Sort((x, y) => RenderableZPositionComparisonKey(x).CompareTo(RenderableZPositionComparisonKey(y)));
|
||||
|
||||
foreach (var renderable in renderablesBuffer)
|
||||
preparedRenderables.Add(renderable.PrepareRender(this));
|
||||
|
||||
// PERF: Reuse collection to avoid allocations.
|
||||
|
||||
@@ -95,7 +95,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
foreach (var r in RenderFootprint(wr, topLeft, footprint, info.FootprintUnderPreview))
|
||||
yield return r;
|
||||
|
||||
foreach (var r in previewRenderables.OrderBy(WorldRenderer.RenderableScreenZPositionComparisonKey))
|
||||
foreach (var r in previewRenderables.OrderBy(WorldRenderer.RenderableZPositionComparisonKey))
|
||||
yield return r;
|
||||
|
||||
if (info.FootprintOverPreview != PlaceBuildingCellType.None)
|
||||
|
||||
@@ -249,7 +249,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
var offset = body.LocalToWorld(CarryableOffset.Rotate(body.QuantizeOrientation(self, self.Orientation)));
|
||||
var previewRenderables = carryablePreview
|
||||
.SelectMany(p => p.Render(wr, self.CenterPosition + offset))
|
||||
.OrderBy(WorldRenderer.RenderableScreenZPositionComparisonKey);
|
||||
.OrderBy(WorldRenderer.RenderableZPositionComparisonKey);
|
||||
|
||||
foreach (var r in previewRenderables)
|
||||
yield return r;
|
||||
|
||||
@@ -147,7 +147,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
return terrainOrResourcePreview;
|
||||
|
||||
if (Type == EditorCursorType.Actor)
|
||||
return Actor.Render().OrderBy(WorldRenderer.RenderableScreenZPositionComparisonKey);
|
||||
return Actor.Render().OrderBy(WorldRenderer.RenderableZPositionComparisonKey);
|
||||
|
||||
return NoRenderables;
|
||||
}
|
||||
|
||||
@@ -67,7 +67,7 @@ namespace OpenRA.Mods.Common.Widgets
|
||||
|
||||
renderables = preview
|
||||
.SelectMany(p => p.RenderUI(worldRenderer, origin, scale))
|
||||
.OrderBy(WorldRenderer.RenderableScreenZPositionComparisonKey)
|
||||
.OrderBy(WorldRenderer.RenderableZPositionComparisonKey)
|
||||
.Select(r => r.PrepareRender(worldRenderer))
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user