Files
RebootKit/Runtime/Engine/Code/AI/Selector.cs
2025-10-14 16:05:36 +02:00

38 lines
1.1 KiB
C#

using System;
using RebootKit.Engine.Simulation;
namespace RebootKit.Engine.AI {
public class Selector : BehaviourNode {
readonly Func<bool> m_Condition;
public Selector(string name, Func<bool> condition = null) : base(name) {
m_Condition = condition;
}
public override Status Process(Actor target, float dt) {
if (m_Condition != null && !m_Condition()) {
return Status.Failure;
}
if (m_CurrentChild < Children.Count) {
Status status = Children[m_CurrentChild].Process(target, dt);
switch (status) {
case Status.Success:
Reset();
return Status.Success;
case Status.Failure:
m_CurrentChild += 1;
return Status.Running;
case Status.Running:
return Status.Running;
}
}
Reset();
return Status.Failure;
}
}
}