using System; using System.Collections.Generic; namespace DefaultNamespace.BehaviorTree { public class Sequence : Composite { private int _currentIndex; private Node _currentNode; public Sequence(List children) : base(children) { } public override Status OnStart() { if (Children.Count == 0) return Status.Failure; _currentIndex = 0; _currentNode = Children[_currentIndex]; return _currentNode?.OnStart() ?? Status.Failure; } public override Status OnUpdate() { Status status = _currentNode?.OnUpdate() ?? Status.Failure; switch (status) { case Status.Success: _currentNode?.OnEnd(); _currentIndex++; if (_currentIndex >= Children.Count) return Status.Success; _currentNode = Children[_currentIndex]; return _currentNode?.OnStart() ?? Status.Failure; case Status.Failure: _currentNode?.OnEnd(); return Status.Failure; case Status.Running: return Status.Running; default: throw new ArgumentOutOfRangeException(); } } } }