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