AI/ActionSystem/BehaviorTree/RandomNode.cs
namespace HC3;

/// <summary>
/// A node that selects a random child node to execute.
/// </summary>
public class RandomNode : Node
{
	private readonly List<Node> _children;
	private Node _selected;

	public RandomNode( List<Node> children )
	{
		_children = children;
	}

	protected override void OnStart()
	{
		if ( _children.Count == 0 ) return;

		int index = Game.Random.Int( 0, _children.Count - 1 );
		_selected = _children[index];
	}

	public override Status Tick()
	{
		if ( _selected == null )
			return Status.Failure;

		var result = _selected.TickInternal();

		if ( result != Status.Running )
			_selected = null;

		return result;
	}

	public override ActionDisplayInfo? GetDisplay()
	{
		return _selected?.GetDisplay();
	}
}