From befb0900cf7c1635a2c2b04a570a4fe70928308d Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Wed, 17 May 2023 23:55:25 +1000 Subject: [PATCH] Proximity beeper optimisation (#16507) --- Content.Server/NPC/Systems/NPCUtilitySystem.cs | 9 ++++++--- Content.Server/Pinpointer/ProximityBeeperSystem.cs | 11 ++++------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Content.Server/NPC/Systems/NPCUtilitySystem.cs b/Content.Server/NPC/Systems/NPCUtilitySystem.cs index 5fc6818893..0b00ab8c83 100644 --- a/Content.Server/NPC/Systems/NPCUtilitySystem.cs +++ b/Content.Server/NPC/Systems/NPCUtilitySystem.cs @@ -241,11 +241,14 @@ public sealed class NPCUtilitySystem : EntitySystem switch (query) { case ComponentQuery compQuery: - foreach (var ent in _lookup.GetEntitiesInRange(owner, vision)) + var mapPos = Transform(owner).MapPosition; + foreach (var compReg in compQuery.Components.Values) { - foreach (var comp in compQuery.Components.Values) + foreach (var comp in _lookup.GetComponentsInRange(compReg.Component.GetType(), mapPos, vision)) { - if (!HasComp(ent, comp.Component.GetType())) + var ent = comp.Owner; + + if (ent == owner) continue; entities.Add(ent); diff --git a/Content.Server/Pinpointer/ProximityBeeperSystem.cs b/Content.Server/Pinpointer/ProximityBeeperSystem.cs index 7e2c8b8e88..85a9a083d5 100644 --- a/Content.Server/Pinpointer/ProximityBeeperSystem.cs +++ b/Content.Server/Pinpointer/ProximityBeeperSystem.cs @@ -62,17 +62,14 @@ public sealed class ProximityBeeperSystem : EntitySystem var xformQuery = GetEntityQuery(); var xform = xformQuery.GetComponent(uid); - var comp = EntityManager.ComponentFactory.GetRegistration(component.Component).Type; + var compType = EntityManager.ComponentFactory.GetRegistration(component.Component).Type; float? closestDistance = null; - foreach (var targetXform in _entityLookup.GetComponentsInRange(xform.MapPosition, component.MaximumDistance)) + foreach (var comp in _entityLookup.GetComponentsInRange(compType, xform.MapPosition, component.MaximumDistance)) { // forgive me father, for i have sinned. - var ent = targetXform.Owner; + var ent = comp.Owner; - if (!HasComp(ent, comp)) - continue; - - var dist = (_transform.GetWorldPosition(xform, xformQuery) - _transform.GetWorldPosition(targetXform, xformQuery)).Length; + var dist = (_transform.GetWorldPosition(xform, xformQuery) - _transform.GetWorldPosition(ent, xformQuery)).Length; if (dist >= (closestDistance ?? float.MaxValue)) continue; closestDistance = dist;