CoordinatesNotInRangePrecondition.cs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435
  1. using Robust.Shared.Map;
  2. namespace Content.Server.NPC.HTN.Preconditions;
  3. /// <summary>
  4. /// Is the specified coordinate not in range of us.
  5. /// </summary>
  6. public sealed partial class CoordinatesNotInRangePrecondition : 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<EntityCoordinates>(TargetKey, out var target, _entManager))
  23. return false;
  24. return !_transformSystem.InRange(coordinates, target, blackboard.GetValueOrDefault<float>(RangeKey, _entManager));
  25. }
  26. }