Behaviour Tree
This commit is contained in:
37
Runtime/Engine/Code/AI/Sequence.cs
Normal file
37
Runtime/Engine/Code/AI/Sequence.cs
Normal file
@@ -0,0 +1,37 @@
|
||||
using System;
|
||||
|
||||
namespace RebootKit.Engine.AI {
|
||||
public class Sequence : BehaviourNode {
|
||||
readonly Func<bool> m_Condition;
|
||||
|
||||
public Sequence(string name, Func<bool> condition = null) : base(name) {
|
||||
m_Condition = condition;
|
||||
}
|
||||
|
||||
public override Status Process(float dt) {
|
||||
if (m_Condition != null && !m_Condition()) {
|
||||
return Status.Failure;
|
||||
}
|
||||
|
||||
if (m_CurrentChild < Children.Count) {
|
||||
Status status = Children[m_CurrentChild].Process(dt);
|
||||
|
||||
switch (status) {
|
||||
case Status.Success:
|
||||
m_CurrentChild += 1;
|
||||
return m_CurrentChild == Children.Count ? Status.Success : Status.Running;
|
||||
|
||||
case Status.Failure:
|
||||
Reset();
|
||||
return Status.Failure;
|
||||
|
||||
case Status.Running:
|
||||
return Status.Running;
|
||||
}
|
||||
}
|
||||
|
||||
Reset();
|
||||
return Status.Success;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user