private BehaviorTree CreateTree(GameObject go)
        {
            NodeBase rootNode = GameObjectToNode(go);

            if (rootNode == null)
            {
                Debug.LogError("create root failed");
                return(null);
            }

            ProcessChildrenForTrans(go.transform, rootNode);

            BehaviorTree behaviorTree = CreatorUtils.NewBehaviorTree(rootNode);

            if (Validate())
            {
                string fullPath = GetFullPathForTree(go);
                SaveBehaviorTree(behaviorTree, new BytesAssetProcessor(), fullPath);
                Debug.Log("Created successfully!\n" + fullPath + "\n" + behaviorTree.DumpTree());
                return(behaviorTree);
            }
            else
            {
                return(null);
            }
        }
        public BehaviorTree Load(string filePath)
        {
            if (!File.Exists(filePath))
            {
                return(null);
            }

            XmlDocument xmlDoc = new XmlDocument();

            xmlDoc.Load(filePath);
            XmlElement root = xmlDoc.SelectSingleNode("root") as XmlElement;

            BehaviorTree behaviorTree = CreatorUtils.NewBehaviorTree(XmlElementToBTNode(root));

            return(behaviorTree);
        }
        private void ProcessChildrenForTrans(Transform parentTrans, NodeBase parentNode)
        {
            foreach (Transform t in parentTrans)
            {
                var node = GameObjectToNode(t.gameObject);
                if (node == null)
                {
                    continue;
                }

                NodeParent parent = parentNode as NodeParent;
                if (parent != null)
                {
                    CreatorUtils.AddChild(parent, node);
                    ProcessChildrenForTrans(t, node);
                    continue;
                }
            }
        }
        public BehaviorTree Build(out string err, out NodeBase node)
        {
            while (this.stack.Count > 1)
            {
                this.EndCurrent();
            }

            BehaviorTree behaviorTree = CreatorUtils.NewBehaviorTree(stack.Pop());

            if (behaviorTree.Validate(out err, out node))
            {
                return(behaviorTree);
            }
            else
            {
                DefaultLogger logger = new DefaultLogger();
                logger.Error(err);
                return(null);
            }
        }