using Content.Shared.Xenoarchaeology.Artifact.Components;
using Content.Shared.Xenoarchaeology.Artifact.XAT.Components;
namespace Content.Shared.Xenoarchaeology.Artifact.XAT;
///
/// System for xeno artifact trigger that requires some entity/entities with certain component on them nearby.
///
public sealed class XATCompNearbySystem : BaseQueryUpdateXATSystem
{
[Dependency] private readonly EntityLookupSystem _entityLookup = default!;
[Dependency] private readonly SharedTransformSystem _transform = default!;
/// Pre-allocated and re-used collection.
private readonly HashSet> _entities = new();
///
protected override void UpdateXAT(
Entity artifact,
Entity node,
float frameTime
)
{
var compNearbyComponent = node.Comp1;
var pos = _transform.GetMapCoordinates(artifact);
var comp = EntityManager.ComponentFactory.GetRegistration(compNearbyComponent.RequireComponentWithName);
_entities.Clear();
_entityLookup.GetEntitiesInRange(comp.Type, pos, compNearbyComponent.Radius, _entities);
if (_entities.Count >= compNearbyComponent.Count)
Trigger(artifact, node);
}
}