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);
        }
Beispiel #2
0
 public bool Add(string key, IBehaviourTree leaf)
 {
     if (_key == key && _leaf == null)
     {
         _leaf = leaf;
         return(true);
     }
     return(false);
 }
Beispiel #3
0
    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);
        }
Beispiel #5
0
 public SelectorNode(string key, IBehaviourTree leaf) : this(key)
 {
     _leaves.Add(leaf);
 }
Beispiel #6
0
 public bool Add(string key, IBehaviourTree leaf)
 {
     return(false);
 }
Beispiel #7
0
 public DecoratorNode(string key, Func <bool> condition, IBehaviourTree leaf) : this(key, condition)
 {
     _leaf = leaf;
 }