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); } }