예제 #1
0
        protected void Traverse(GameObject uiTreeObject, ManageUI manageFunction)
        {
            Transform uiTreeTransform = uiTreeObject.transform;

            Queue <Node> queue = new Queue <Node>();

            queue.Enqueue(_root);
            int index = 1;

            while (queue.Count > 0)
            {
                Node current = queue.Dequeue();
                UIBehaviorTreeNode uiNode = null;
                if (_uiNodesLoaded)
                {
                    uiNode = _uiNodes[index];
                }
                else
                {
                    uiNode = uiTreeTransform.GetChild(index).gameObject.GetComponent <UIBehaviorTreeNode>();
                }

                manageFunction(current, uiNode);

                switch (current.Type)
                {
                case NodeType.CONTROL:
                    List <Node> children = ((ControlNode)current).GetChildren();
                    for (int i = 0; i < children.Count; i++)
                    {
                        queue.Enqueue(children[i]);
                    }
                    break;

                case NodeType.DECORATOR:
                    queue.Enqueue(((DecoratorNode)current).GetChild());
                    break;

                default:
                    break;
                }

                index++;
            }
        }
예제 #2
0
 public void SetUIPointer(UIBehaviorTreeNode uiNode)
 {
     _uiNode = uiNode;
 }
예제 #3
0
 public void SetUIPointer(Node node, UIBehaviorTreeNode uiNode)
 {
     _uiNodes.Add(uiNode);
     node.SetUIPointer(uiNode);
 }
예제 #4
0
 private void ChangeUIColor(Node node, UIBehaviorTreeNode uiNode)
 {
     uiNode.ChangeColor(node.GetStatus());
 }