# Picks a random location for the NPC to move to and idle.
- type: htnCompound
  id: IdleCompound
  branches:
    - tasks:
        - !type:HTNPrimitiveTask
          operator: !type:WaitOperator
            key: IdleTime
          preconditions:
            - !type:KeyExistsPrecondition
              key: IdleTime

    # Sunrise-Edit-Start
    - preconditions:
        - !type:StandingStatePrecondition
          isStanding: false
      tasks:
        - !type:HTNPrimitiveTask
          operator: !type:StandUpOperator
    # Sunrise-Edit-End
    
    # Pick a new spot and wait there.
    - preconditions:
        - !type:BuckledPrecondition
          isBuckled: false
        - !type:PulledPrecondition
          isPulled: false
      tasks:
        - !type:HTNPrimitiveTask
          operator: !type:PickAccessibleOperator
            rangeKey: IdleRange

        - !type:HTNPrimitiveTask
          operator: !type:MoveToOperator
            pathfindInPlanning: false

        - !type:HTNPrimitiveTask
          operator: !type:RandomOperator
            targetKey: IdleTime
            minKey: MinimumIdleTime
            maxKey: MaximumIdleTime

        - !type:HTNPrimitiveTask
          operator: !type:WaitOperator
            key: IdleTime
          preconditions:
            - !type:KeyExistsPrecondition
              key: IdleTime

# Spin to a random rotation and idle.
- type: htnCompound
  id: IdleSpinCompound
  branches:
    - tasks:
        - !type:HTNPrimitiveTask
          operator: !type:WaitOperator
            key: IdleTime
          preconditions:
            - !type:KeyExistsPrecondition
              key: IdleTime

    # Sunrise-Edit-Start
    - preconditions:
        - !type:StandingStatePrecondition
          isStanding: false
      tasks:
        - !type:HTNPrimitiveTask
          operator: !type:StandUpOperator
    # Sunrise-Edit-End

    # Pick a new angle and spin there
    - tasks:
        - !type:HTNPrimitiveTask
          operator: !type:PickRandomRotationOperator
            targetKey: RotateTarget

        - !type:HTNPrimitiveTask
          operator: !type:RotateToTargetOperator
            targetKey: RotateTarget

        - !type:HTNPrimitiveTask
          operator: !type:RandomOperator
            targetKey: IdleTime
            minKey: MinimumIdleTime
            maxKey: MaximumIdleTime

        - !type:HTNPrimitiveTask
          operator: !type:WaitOperator
            key: IdleTime
          preconditions:
            - !type:KeyExistsPrecondition
              key: IdleTime
