Files
gpd-925/AI/Assets/Scripts/BehaviorTree/Sequence.cs
T

53 lines
1.5 KiB
C#

using System;
using System.Collections.Generic;
namespace BehaviorTree
{
public class Sequence : Composite
{
private int _currentIndex;
private Node _currentNode;
public Sequence(List<Node> _nodes)
{
nodes = _nodes;
}
public override Status Start()
{
if (nodes == null || nodes.Count == 0)
{
return Status.Failure;
}
_currentIndex = 0;
_currentNode = nodes[_currentIndex];
_currentNode.Start();
return Status.Running;
}
public override Status Update()
{
Status status = _currentNode?.Update() ?? Status.Failure;
switch (status)
{
case Status.Success:
if (_currentNode?.End() == Status.Failure) return Status.Failure;
_currentIndex++;
if (_currentIndex >= nodes.Count) return Status.Success;
_currentNode = nodes[_currentIndex];
if (_currentNode?.Start() == Status.Failure) return Status.Failure;
return Status.Running;
case Status.Failure:
_currentNode?.End();
return Status.Failure;
case Status.Running:
return Status.Running;
default:
throw new ArgumentOutOfRangeException();
}
}
}
}