When a render method has nothing to render, eagerly return.

By eagerly returning an empty enumerable in these cases, this avoids allocating an enumerable for the whole render method if nothing will be drawn.
This commit is contained in:
RoosterDragon
2020-10-11 11:57:22 +01:00
committed by abcdefg30
parent 87389d3051
commit 8d3cec5bea
3 changed files with 34 additions and 17 deletions

View File

@@ -55,13 +55,18 @@ namespace OpenRA.Mods.Common.Traits
IEnumerable<IRenderable> IRenderAnnotations.RenderAnnotations(Actor self, WorldRenderer wr)
{
if (debugVis == null || !debugVis.CombatGeometry || self.World.FogObscures(self))
yield break;
return Enumerable.Empty<IRenderable>();
return RenderAnnotations(self, wr);
}
IEnumerable<IRenderable> RenderAnnotations(Actor self, WorldRenderer wr)
{
var blockers = allBlockers.Where(Exts.IsTraitEnabled).ToList();
if (blockers.Count > 0)
{
var height = new WVec(0, 0, blockers.Max(b => b.BlockingHeight.Length));
yield return new LineAnnotationRenderable(self.CenterPosition, self.CenterPosition + height, 1, Color.Orange);
yield return new LineAnnotationRenderable(self.CenterPosition, self.CenterPosition + height, 1, Color.Orange);
}
var activeShapes = shapes.Where(Exts.IsTraitEnabled);