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

/// <summary>
/// Set a sequence on an agent for a set time.
/// </summary>
public class AgentSequenceNode : Node
{
	private readonly Agent Agent;
	private readonly string Sequence;
	private readonly float Duration;
	private readonly string Reason;

	private TimeUntil _timer;

	public AgentSequenceNode( Agent agent, string sequence, float duration, string reason = null )
	{
		Agent = agent;
		Sequence = sequence;
		Duration = duration;
		Reason = reason;
	}

	protected override void OnStart()
	{
		Agent.SetSequenceOverride( Sequence );
		_timer = Duration;
	}

	public override Status Tick()
	{
		if ( _timer )
		{
			Agent.SetSequenceOverride( null );
			return Status.Success;
		}

		return Status.Running;
	}

	public override ActionDisplayInfo? GetDisplay()
	{
		if ( Reason != null )
		{
			return new ActionDisplayInfo( "schedule", Reason, 1 - (_timer / Duration) );
		}

		return base.GetDisplay();
	}
}