6
2025-11-07 12:32:48 +03:00

35 lines
1.3 KiB
C#

using Content.Shared.Xenoarchaeology.Artifact.Components;
using Content.Shared.Xenoarchaeology.Artifact.XAT.Components;
namespace Content.Shared.Xenoarchaeology.Artifact.XAT;
/// <summary>
/// System for xeno artifact trigger that requires some entity/entities with certain component on them nearby.
/// </summary>
public sealed class XATCompNearbySystem : BaseQueryUpdateXATSystem<XATCompNearbyComponent>
{
[Dependency] private readonly EntityLookupSystem _entityLookup = default!;
[Dependency] private readonly SharedTransformSystem _transform = default!;
/// <summary> Pre-allocated and re-used collection.</summary>
private readonly HashSet<Entity<IComponent>> _entities = new();
/// <inheritdoc />
protected override void UpdateXAT(
Entity<XenoArtifactComponent> artifact,
Entity<XATCompNearbyComponent, XenoArtifactNodeComponent> 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);
}
}