]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Proximity beeper optimisation (#16507)
authormetalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
Wed, 17 May 2023 13:55:25 +0000 (23:55 +1000)
committerGitHub <noreply@github.com>
Wed, 17 May 2023 13:55:25 +0000 (23:55 +1000)
Content.Server/NPC/Systems/NPCUtilitySystem.cs
Content.Server/Pinpointer/ProximityBeeperSystem.cs

index 5fc68188932c298c5557f0d78c4d2fbe52ec279a..0b00ab8c83afeae780d538da0e3b50ce094aaf1c 100644 (file)
@@ -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);
index 7e2c8b8e8866f11b58dffe48d8c4e836d0be69ad..85a9a083d5c64175b8194d241710880add7be817 100644 (file)
@@ -62,17 +62,14 @@ public sealed class ProximityBeeperSystem : EntitySystem
 
         var xformQuery = GetEntityQuery<TransformComponent>();
         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<TransformComponent>(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;