UnPullOperator.cs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. using Content.Shared.ActionBlocker;
  2. using Content.Shared.Movement.Pulling.Components;
  3. using Content.Shared.Movement.Pulling.Systems;
  4. namespace Content.Server.NPC.HTN.PrimitiveTasks.Operators.Combat;
  5. public sealed partial class UnPullOperator : HTNOperator
  6. {
  7. [Dependency] private readonly IEntityManager _entManager = default!;
  8. private PullingSystem _pulling = default!;
  9. private ActionBlockerSystem _actionBlocker = default!;
  10. private EntityQuery<PullableComponent> _pullableQuery;
  11. [DataField("shutdownState")]
  12. public HTNPlanState ShutdownState { get; private set; } = HTNPlanState.TaskFinished;
  13. public override void Initialize(IEntitySystemManager sysManager)
  14. {
  15. base.Initialize(sysManager);
  16. _actionBlocker = sysManager.GetEntitySystem<ActionBlockerSystem>();
  17. _pulling = sysManager.GetEntitySystem<PullingSystem>();
  18. _pullableQuery = _entManager.GetEntityQuery<PullableComponent>();
  19. }
  20. public override void Startup(NPCBlackboard blackboard)
  21. {
  22. base.Startup(blackboard);
  23. var owner = blackboard.GetValue<EntityUid>(NPCBlackboard.Owner);
  24. if (_actionBlocker.CanInteract(owner, owner)) //prevents handcuffed monkeys from pulling etc.
  25. _pulling.TryStopPull(owner, _pullableQuery.GetComponent(owner), owner);
  26. }
  27. public override HTNOperatorStatus Update(NPCBlackboard blackboard, float frameTime)
  28. {
  29. return HTNOperatorStatus.Finished;
  30. }
  31. }