AI/ActionSystem/BehaviorTree/Nodes/QueueNode.cs
namespace HC3;

/// <summary>
/// A node that handles queuing a guest for a ride.
/// </summary>
public class QueueNode : Node
{
	private readonly BasicRide Ride;
	private readonly Guest Guest;
	private bool _queued;

	public QueueNode( BasicRide ride, Guest guest )
	{
		Ride = ride;
		Guest = guest;
	}

	public override Status Tick()
	{
		if ( !Ride.IsValid() || !Guest.IsValid() )
			return Status.Failure;

		if ( Ride.CanEnter( Guest ) )
		{
			if ( _queued )
				Ride.RemoveFromQueue( Guest );

			return Status.Success;
		}

		if ( !_queued && Ride.AddToQueue( Guest ) )
		{
			_queued = true;
		}

		return Status.Running;
	}

	public override ActionDisplayInfo? GetDisplay()
	{
		return new ActionDisplayInfo( "watch", $"Waiting for {Ride.Title}", 0 );
	}
}