public IEnumerable <BTNode> Traverse(IBehaviourTree tree) { T resultNodes = new T(); var unexploredNodes = new Queue <BTNode>(); var exploredNodes = new HashSet <BTNode>(); void ExploreTree(BTNode node) { unexploredNodes.Enqueue(node); while (unexploredNodes.Count > 0) { var currentNode = unexploredNodes.Dequeue(); resultNodes.Add(currentNode); foreach (var childNode in currentNode) { if (!exploredNodes.Contains(childNode)) { unexploredNodes.Enqueue(childNode); } } } } ExploreTree(tree.RootNode); return(resultNodes); }
public bool Add(string key, IBehaviourTree leaf) { if (_key == key && _leaf == null) { _leaf = leaf; return(true); } return(false); }
public bool Add(string key, IBehaviourTree leaf) { if (_key == key) { _leaves.Add(leaf); return(true); } foreach (IBehaviourTree _leaf in _leaves) { if (_leaf.Add(key, leaf)) { return(true); } } return(false); }
public IEnumerable <BTNode> Traverse(IBehaviourTree tree) { T discoveredNodes = new T(); void ExploreTree(BTNode node) { discoveredNodes.Add(node); foreach (var childNode in tree.RootNode) { if (!discoveredNodes.Contains(childNode)) { ExploreTree(childNode); } } } ExploreTree(tree.RootNode); return(discoveredNodes); }
public SelectorNode(string key, IBehaviourTree leaf) : this(key) { _leaves.Add(leaf); }
public bool Add(string key, IBehaviourTree leaf) { return(false); }
public DecoratorNode(string key, Func <bool> condition, IBehaviourTree leaf) : this(key, condition) { _leaf = leaf; }