DropOperator.cs 997 B

12345678910111213141516171819202122232425262728293031
  1. using Content.Server.Hands.Systems;
  2. using Content.Shared.Hands.Components;
  3. namespace Content.Server.NPC.HTN.PrimitiveTasks.Operators.Interactions;
  4. /// <summary>
  5. /// Drops the active hand entity underneath us.
  6. /// </summary>
  7. public sealed partial class DropOperator : HTNOperator
  8. {
  9. [Dependency] private readonly IEntityManager _entManager = default!;
  10. public override HTNOperatorStatus Update(NPCBlackboard blackboard, float frameTime)
  11. {
  12. if (!blackboard.TryGetValue(NPCBlackboard.ActiveHand, out Hand? activeHand, _entManager))
  13. {
  14. return HTNOperatorStatus.Finished;
  15. }
  16. var owner = blackboard.GetValueOrDefault<EntityUid>(NPCBlackboard.Owner, _entManager);
  17. // TODO: Need some sort of interaction cooldown probably.
  18. var handsSystem = _entManager.System<HandsSystem>();
  19. if (handsSystem.TryDrop(owner))
  20. {
  21. return HTNOperatorStatus.Finished;
  22. }
  23. return HTNOperatorStatus.Failed;
  24. }
  25. }