Example #1
0
 // Use this for initialization
 void Start()
 {
     agent = BehaviourTreeUtils.LoadBehaviourTree(xmlBehaviourTree);
     if (agent == null)
     {
         Debug.LogError("Unable to parse XML file " + xmlBehaviourTree.name);
     }
 }
Example #2
0
        /// <summary>
        /// Print all nodes of deserialized xml file on this editor window. Start from root node and it is a recursive call.
        /// </summary>
        /// <param name="node"></param>
        private void PrintNode(Node node)
        {
            string nameAttribute = "";

            if (node.parent == null)
            {
                nameAttribute = "(Root) ";
            }
            if (GUI.Button(new Rect(lastPos, defaultSize), nameAttribute + node.GetType().Name, EditorStyles.toolbarButton))
            {
                GenericMenu toolsMenu = new GenericMenu();
                toolsMenu.AddItem(new GUIContent("Delete", "Delete this node and all sub nodes"), false, Delete, node);
                foreach (var item in BehaviourTreeUtils.GetEnumerableOfType <Node>())
                {
                    if (BehaviourTreeUtils.IsCondition(item))
                    {
                        toolsMenu.AddItem(new GUIContent("Add Child/Conditions/" + item.Name), false, AddChild, new ModifiedItem(item.AssemblyQualifiedName, node));
                        toolsMenu.AddItem(new GUIContent("Change/Conditions/" + item.Name), false, ChangeNode, new ModifiedItem(item.AssemblyQualifiedName, node));
                    }
                    else if (!BehaviourTreeUtils.IsCondition(item))
                    {
                        toolsMenu.AddItem(new GUIContent("Add Child/Behaviours/" + item.Name), false, AddChild, new ModifiedItem(item.AssemblyQualifiedName, node));
                        toolsMenu.AddItem(new GUIContent("Change/Behaviours/" + item.Name), false, ChangeNode, new ModifiedItem(item.AssemblyQualifiedName, node));
                    }
                    else
                    {
                        toolsMenu.AddItem(new GUIContent("Add Child/Custom/" + item.Name), false, AddChild, new ModifiedItem(item.AssemblyQualifiedName, node));
                        toolsMenu.AddItem(new GUIContent("Change/Custom/" + item.Name), false, ChangeNode, new ModifiedItem(item.AssemblyQualifiedName, node));
                    }
                }

                toolsMenu.DropDown(new Rect(lastPos + new Vector2(30, 0), new Vector2(150, 25)));
            }
            if (node.GetChildCount() <= 0)
            {
                return;
            }
            Tab();
            foreach (var n in node.Children)
            {
                AddLine();
                PrintNode(n);
            }
            LeaveTab();
        }
Example #3
0
        void OnGUI()
        {
            //reset gui variables
            scrollHeight = 0;
            scrollWidth  = 0;
            lastPos      = new Vector2(5, 5);
            //start code

            if (DeserializedNode == null)
            {
                if (btFile == null)
                {
                    newFileCreatedName = GUI.TextField(new Rect(lastPos, defaultSize + new Vector2(30, 0)), newFileCreatedName);
                    Tab(200);
                    if (GUI.Button(new Rect(lastPos, defaultSize + new Vector2(30, 10)), new GUIContent("New Tree")))
                    {
                        CreateNewXmlFile();
                    }

                    AddLine(80);
                    Rect pos = new Rect(new Vector2((position.width / 2) - (position.width / 2) / 2, lastPos.y), new Vector2(position.width / 2, position.height * 0.05f));
                    btFile = EditorGUI.ObjectField(pos, btFile, typeof(UnityEngine.Object), false);
                }

                if (btFile == null)
                {
                    return;
                }

                filepath         = AssetDatabase.GetAssetPath(btFile);
                DeserializedNode = BehaviourTreeUtils.LoadBehaviourTree((TextAsset)btFile);
                if (DeserializedNode != null)
                {
                    SetParentToNodes(DeserializedNode);
                }
            }


            if (DeserializedNode == null)
            {
                GenericMenu toolsMenu = new GenericMenu();
                foreach (var item in BehaviourTreeUtils.GetEnumerableOfType <Node>())
                {
                    //node.type = item;
                    toolsMenu.AddItem(new GUIContent(item.Name), false, CreateRoot, item);
                }
                toolsMenu.DropDown(new Rect(lastPos + new Vector2(30, 0), new Vector2(150, 25)));
                return;
            }



            scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition, true, true, GUILayout.Width(this.position.width), GUILayout.Height(this.position.height));
            GUILayout.BeginHorizontal();
            AddLine();

            GUILayout.Label(new GUIContent(btFile.name));
            if (ModifiedTreeLastFrame)
            {
                SetParentToNodes(DeserializedNode);
            }
            PrintNode(DeserializedNode); //printing tree

            AddLine(); AddLine();


            //utilities buttons
            if (GUI.Button(new Rect(lastPos, defaultSize * 2f), new GUIContent("Change Tree (don't save changes)"))) //change tree button
            {
                btFile           = null;
                DeserializedNode = null;
            }
            Tab(defaultSize.x * 2);
            if (GUI.Button(new Rect(lastPos, defaultSize * 2f), new GUIContent("Reset Tree (write on file)"))) //reset tree button
            {
                ResetTree();
            }
            Tab(defaultSize.x * 2);
            if (GUI.Button(new Rect(lastPos, defaultSize * 2f), new GUIContent("Save Tree (write on file)"))) //save tree button
            {
                Save();
            }
            GUILayout.Label("", GUILayout.Width(scrollWidth), GUILayout.Height(scrollHeight));

            GUILayout.EndHorizontal();
            EditorGUILayout.EndScrollView();
        }