From bb0a39ba6ca6631014116aef1156ceeb6118dcb2 Mon Sep 17 00:00:00 2001 From: Gustas <37534529+PunkPun@users.noreply.github.com> Date: Fri, 25 Apr 2025 19:51:48 +0300 Subject: [PATCH] Don't allocate priorities --- OpenRA.Mods.Common/Traits/AutoTarget.cs | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/OpenRA.Mods.Common/Traits/AutoTarget.cs b/OpenRA.Mods.Common/Traits/AutoTarget.cs index 8faf08d035..c175989d90 100644 --- a/OpenRA.Mods.Common/Traits/AutoTarget.cs +++ b/OpenRA.Mods.Common/Traits/AutoTarget.cs @@ -363,6 +363,9 @@ namespace OpenRA.Mods.Common.Traits .Concat(self.Owner.FrozenActorLayer.FrozenActorsInCircle(self.World, self.CenterPosition, scanRange) .Select(Target.FromFrozenActor)); + // PERF: Avoid allocating a new list for each target. + List validPriorities = []; + foreach (var target in targetsInRange) { BitSet targetTypes; @@ -401,22 +404,22 @@ namespace OpenRA.Mods.Common.Traits else continue; - var validPriorities = activePriorities.Where(ati => + foreach (var ati in activePriorities) { // Already have a higher priority target if (ati.Priority < chosenTargetPriority) - return false; + continue; // Incompatible relationship if (!ati.ValidRelationships.HasRelationship(self.Owner.RelationshipWith(owner))) - return false; + continue; // Incompatible target types if (!ati.ValidTargets.Overlaps(targetTypes) || ati.InvalidTargets.Overlaps(targetTypes)) - return false; + continue; - return true; - }).ToList(); + validPriorities.Add(ati); + } if (validPriorities.Count == 0) continue; @@ -446,6 +449,8 @@ namespace OpenRA.Mods.Common.Traits chosenTargetRange = targetRange; } } + + validPriorities.Clear(); } return chosenTarget;