using Robust.Shared.Map; namespace Content.Server.NPC.HTN.Preconditions; /// /// Is the specified key within the specified range of us. /// public sealed partial class TargetInRangePrecondition : HTNPrecondition { [Dependency] private readonly IEntityManager _entManager = default!; private SharedTransformSystem _transformSystem = default!; [DataField("targetKey", required: true)] public string TargetKey = default!; [DataField("rangeKey", required: true)] public string RangeKey = default!; public override void Initialize(IEntitySystemManager sysManager) { base.Initialize(sysManager); _transformSystem = sysManager.GetEntitySystem(); } public override bool IsMet(NPCBlackboard blackboard) { if (!blackboard.TryGetValue(NPCBlackboard.OwnerCoordinates, out var coordinates, _entManager)) return false; if (!blackboard.TryGetValue(TargetKey, out var target, _entManager) || !_entManager.TryGetComponent(target, out var targetXform)) return false; var transformSystem = _entManager.System; return _transformSystem.InRange(coordinates, targetXform.Coordinates, blackboard.GetValueOrDefault(RangeKey, _entManager)); } }