TargetInRangePrecondition.cs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435
  1. using Robust.Shared.Map;
  2. namespace Content.Server.NPC.HTN.Preconditions;
  3. /// <summary>
  4. /// Is the specified key within the specified range of us.
  5. /// </summary>
  6. public sealed partial class TargetInRangePrecondition : HTNPrecondition
  7. {
  8. [Dependency] private readonly IEntityManager _entManager = default!;
  9. private SharedTransformSystem _transformSystem = default!;
  10. [DataField("targetKey", required: true)] public string TargetKey = default!;
  11. [DataField("rangeKey", required: true)]
  12. public string RangeKey = default!;
  13. public override void Initialize(IEntitySystemManager sysManager)
  14. {
  15. base.Initialize(sysManager);
  16. _transformSystem = sysManager.GetEntitySystem<SharedTransformSystem>();
  17. }
  18. public override bool IsMet(NPCBlackboard blackboard)
  19. {
  20. if (!blackboard.TryGetValue<EntityCoordinates>(NPCBlackboard.OwnerCoordinates, out var coordinates, _entManager))
  21. return false;
  22. if (!blackboard.TryGetValue<EntityUid>(TargetKey, out var target, _entManager) ||
  23. !_entManager.TryGetComponent<TransformComponent>(target, out var targetXform))
  24. return false;
  25. var transformSystem = _entManager.System<SharedTransformSystem>;
  26. return _transformSystem.InRange(coordinates, targetXform.Coordinates, blackboard.GetValueOrDefault<float>(RangeKey, _entManager));
  27. }
  28. }