Proximity beeper optimisation (#16507)
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user