Proximity beeper optimisation (#16507)

This commit is contained in:
metalgearsloth
2023-05-17 23:55:25 +10:00
committed by GitHub
parent f1cd3efcba
commit befb0900cf
2 changed files with 10 additions and 10 deletions

View File

@@ -241,11 +241,14 @@ public sealed class NPCUtilitySystem : EntitySystem
switch (query) switch (query)
{ {
case ComponentQuery compQuery: 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; continue;
entities.Add(ent); entities.Add(ent);

View File

@@ -62,17 +62,14 @@ public sealed class ProximityBeeperSystem : EntitySystem
var xformQuery = GetEntityQuery<TransformComponent>(); var xformQuery = GetEntityQuery<TransformComponent>();
var xform = xformQuery.GetComponent(uid); var xform = xformQuery.GetComponent(uid);
var comp = EntityManager.ComponentFactory.GetRegistration(component.Component).Type; var compType = EntityManager.ComponentFactory.GetRegistration(component.Component).Type;
float? closestDistance = null; 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. // forgive me father, for i have sinned.
var ent = targetXform.Owner; var ent = comp.Owner;
if (!HasComp(ent, comp)) var dist = (_transform.GetWorldPosition(xform, xformQuery) - _transform.GetWorldPosition(ent, xformQuery)).Length;
continue;
var dist = (_transform.GetWorldPosition(xform, xformQuery) - _transform.GetWorldPosition(targetXform, xformQuery)).Length;
if (dist >= (closestDistance ?? float.MaxValue)) if (dist >= (closestDistance ?? float.MaxValue))
continue; continue;
closestDistance = dist; closestDistance = dist;