From bd36aabe9dc859f2149c78a86c0f3e7d4733f0c6 Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Sun, 5 Jun 2022 00:11:55 +0200 Subject: [PATCH] Remove .ToArray() allocations from StepTriggerSystem Update --- .../StepTrigger/StepTriggerSystem.cs | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/Content.Shared/StepTrigger/StepTriggerSystem.cs b/Content.Shared/StepTrigger/StepTriggerSystem.cs index 33b18585bc9b..209dd7a1e81d 100644 --- a/Content.Shared/StepTrigger/StepTriggerSystem.cs +++ b/Content.Shared/StepTrigger/StepTriggerSystem.cs @@ -1,4 +1,4 @@ -using System.Linq; +using Robust.Shared.Collections; using Robust.Shared.GameStates; using Robust.Shared.Physics.Dynamics; @@ -34,15 +34,27 @@ private bool Update(StepTriggerComponent component, TransformComponent transform component.Colliding.Count == 0) return true; - foreach (var otherUid in component.Colliding.ToArray()) + var remQueue = new ValueList(); + foreach (var otherUid in component.Colliding) { var shouldRemoveFromColliding = UpdateColliding(component, transform, otherUid, query); - if (!shouldRemoveFromColliding) continue; + if (!shouldRemoveFromColliding) + continue; + + remQueue.Add(otherUid); + } + + if (remQueue.Count > 0) + { + foreach (var uid in remQueue) + { + component.Colliding.Remove(uid); + component.CurrentlySteppedOn.Remove(uid); + } - component.Colliding.Remove(otherUid); - component.CurrentlySteppedOn.Remove(otherUid); Dirty(component); } + return false; }