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();
}
}