public static T AddDecorator <T>(Node parent, BehaviorTrees bt)
        {
            if (parent == null)
            {
                Debug.LogWarning("Can't add a decorator to the behavior trees, because the behavior trees are null.");
                return(default(T));
            }

            Decorator decorator = ScriptableObject.CreateInstance(typeof(T)) as Decorator;

            decorator.hideFlags = HideFlags.HideInHierarchy;

            decorator.Name    = BehaviorTreesEditorUtility.GenerateName <T>();
            decorator.comment = decorator.Name;
            decorator.parent  = parent;
            parent.decorators = ArrayUtility.Add <Decorator>(parent.decorators, decorator);

            if (EditorUtility.IsPersistent(bt))
            {
                AssetDatabase.AddObjectToAsset(decorator, bt);
            }

            AssetCreator.SaveAIAsset();
            return((T)(object)decorator);
        }
        public static T AddService <T>(Composite parent, BehaviorTrees bt)
        {
            if (parent == null)
            {
                Debug.LogWarning("Can't add a service to the behavior trees, because the behavior trees are null.");
                return(default(T));
            }

            Service service = ScriptableObject.CreateInstance(typeof(T)) as Service;

            service.hideFlags = HideFlags.HideInHierarchy;

            service.Name    = BehaviorTreesEditorUtility.GenerateName <T>();
            service.tick    = 0.1f;
            service.comment = service.Name + ": tick every 0.1s";
            service.parent  = parent;
            parent.services = ArrayUtility.Add <Service>(parent.services, service);

            if (EditorUtility.IsPersistent(bt))
            {
                AssetDatabase.AddObjectToAsset(service, bt);
            }

            AssetCreator.SaveAIAsset();
            return((T)(object)service);
        }
        public static void DeleteNode(Node node, BehaviorTrees bt)
        {
            if (node.parentNode != null)
            {
                node.parentNode.childNodes = ArrayUtility.Remove <Node>(node.parentNode.childNodes, node);
            }

            foreach (Node child in node.childNodes)
            {
                if (child != null)
                {
                    child.parentNode = null;
                }
            }

            if (node.decorators.Length > 0)
            {
                foreach (Decorator decorator in node.decorators)
                {
                    BehaviorTreesEditorUtility.DeleteDecorator(decorator);
                }
            }
            if (node is Composite && (node as Composite).services.Length > 0)
            {
                foreach (Service service in (node as Composite).services)
                {
                    BehaviorTreesEditorUtility.DeleteService(service);
                }
            }
            bt.nodes = ArrayUtility.Remove <Node>(bt.nodes, node);
            BehaviorTreesEditorUtility.DestroyImmediate(node);
        }
Exemplo n.º 4
0
        private void SelectBehaviorBrain()
        {
            GUIContent content = new GUIContent(BehaviorTreesEditor.active != null ? BehaviorTreesEditor.active.name : "[None Selected]");
            float      width   = EditorStyles.toolbarDropDown.CalcSize(content).x;

            width = Mathf.Clamp(width, 100f, width);
            if (GUILayout.Button(content, EditorStyles.toolbarDropDown, GUILayout.Width(width)))
            {
                GenericMenu menu = new GenericMenu();
                if (BehaviorTreesEditor.active != null)
                {
                    SelectBehaviorBrainMenu(BehaviorTreesEditor.active, ref menu);
                }

                menu.AddItem(new GUIContent("[Create New]"), false, delegate()
                {
                    BehaviorTrees bt = AssetCreator.CreateAsset <BehaviorTrees>(true);
                    if (bt != null)
                    {
                        bt.Name = bt.name;

                        Root root   = BehaviorTreesEditorUtility.AddNode <Root>(BehaviorTreesEditor.center, bt);
                        bt.rootNode = root;
                        root.Name   = "Root";

                        AssetCreator.SaveAIAsset();
                        BehaviorTreesEditor.SelectBehaviorTrees(bt);
                    }
                });
                menu.ShowAsContext();
            }
        }
Exemplo n.º 5
0
        public static BehaviorTreeTask CreateBehaviorTreeTask(string relativePath)
        {
            BehaviorTree tree = null;

            if (BehaviorTrees.ContainsKey(relativePath))
            {
                tree = BehaviorTrees[relativePath];
            }
            else if (Load(relativePath))
            {
                tree = BehaviorTrees[relativePath];
            }
            if (tree == null)
            {
                return(null);
            }
            BehaviorTreeTask item = tree.CreateAndInitTask() as BehaviorTreeTask;

            if (!ms_allBehaviorTreeTasks.ContainsKey(relativePath))
            {
                ms_allBehaviorTreeTasks[relativePath] = new BTItem_t();
            }
            BTItem_t _t = ms_allBehaviorTreeTasks[relativePath];

            if (!_t.bts.Contains(item))
            {
                _t.bts.Add(item);
            }
            return(item);
        }
Exemplo n.º 6
0
 private void SelectBehaviorBrainMenu(BehaviorTrees bt, ref GenericMenu menu)
 {
     if (bt != null)
     {
         GUIContent content = new GUIContent(bt.name);
         menu.AddItem(content, false, delegate()
         {
             BehaviorTreesEditor.SelectBehaviorTrees(bt);
         });
     }
 }
Exemplo n.º 7
0
 public static void SelectBehaviorTrees(BehaviorTrees bt)
 {
     if (BehaviorTreesEditor.instance == null || BehaviorTreesEditor.active == bt)
     {
         BehaviorTreesEditor.instance.CenterView();
         return;
     }
     BehaviorTreesEditor.instance._active = bt;
     BehaviorTreesEditor.instance._selection.Clear();
     BehaviorTreesEditor.instance.UpdateUnitySelection();
     BehaviorTreesEditor.instance.CenterView();
 }
Exemplo n.º 8
0
        public static void CreateBehaviorTrees()
        {
            // This code is borrowed from ICode(https://www.assetstore.unity3d.com/en/#!/content/13761)
            BehaviorTrees bt = AssetCreator.CreateAsset <BehaviorTrees>(false);

            if (bt != null)
            {
                bt.Name = bt.name;
                Root root = BehaviorTreesEditorUtility.AddNode <Root>(BehaviorTreesEditor.center, bt);
                bt.rootNode = root;
                root.Name   = "Root";
                //AssetCreator.SaveAIAsset();
                SaveAIAsset();
            }
        }
        public static void UnlinkNode(Node node, BehaviorTrees bt)
        {
            if (node.parentNode != null)
            {
                node.parentNode.childNodes = ArrayUtility.Remove <Node>(node.parentNode.childNodes, node);
            }

            foreach (Node child in node.childNodes)
            {
                if (child != null)
                {
                    child.parentNode = null;
                }
            }

            node.childNodes = null;
        }
        public static T AddNode <T>(Vector2 position, BehaviorTrees bt)
        {
            if (bt == null)
            {
                Debug.LogWarning("Can't add a node to the behavior trees, because the behavior trees are null.");
                return(default(T));
            }

            Node node = ScriptableObject.CreateInstance(typeof(T)) as Node;

            node.hideFlags = HideFlags.HideInHierarchy;

            node.Name     = BehaviorTreesEditorUtility.GenerateName <T>();
            node.comment  = node.Name;
            node.bt       = bt;
            bt.nodes      = ArrayUtility.Add <Node>(bt.nodes, node);
            node.position = new Rect(position.x, position.y, BehaviorTreesEditorStyles.NodeNormalWidth, BehaviorTreesEditorStyles.NodeNormalHeight);

            if (EditorUtility.IsPersistent(bt))
            {
                AssetDatabase.AddObjectToAsset(node, bt);
            }

            if (node is BehaviorTrees)
            {
                node.position.width  = 150f;
                node.position.height = 45f;

                Root root = BehaviorTreesEditorUtility.AddNode <Root>(BehaviorTreesEditor.center, node as BehaviorTrees);
                root.Name = "Root";
            }
            else if (node is Wait)
            {
                Wait wait = node as Wait;
                wait.tick    = 0.1f;
                wait.comment = "Wait: 0.1s";
            }

            AssetCreator.SaveAIAsset();
            return((T)(object)node);
        }
        public static void EmptyNode(Vector2 position, BehaviorTrees bt)
        {
            foreach (Node child in bt.nodes)
            {
                if (child == null || child.Name == "Root")
                {
                    continue;
                }

                if (child.parentNode == null || child == child.parentNode)
                {
                    child.position = new Rect(position.x, position.y, BehaviorTreesEditorStyles.NodeNormalWidth, BehaviorTreesEditorStyles.NodeNormalHeight);

                    /*
                     * if (child.Name.Equals("Task"))
                     * {
                     *  child.position = new Rect(position.x, position.y, BehaviorTreesEditorStyles.NodeNormalWidth, BehaviorTreesEditorStyles.NodeNormalHeight);
                     * }
                     * if (child.Name.Equals("Selector"))
                     * {
                     *  child.position = new Rect(position.x, position.y, BehaviorTreesEditorStyles.NodeNormalWidth, BehaviorTreesEditorStyles.NodeNormalHeight);
                     * }
                     * if (child.Name.Equals("Sequence"))
                     * {
                     *  child.position = new Rect(position.x, position.y, BehaviorTreesEditorStyles.NodeNormalWidth, BehaviorTreesEditorStyles.NodeNormalHeight);
                     * }
                     * if (child.Name.Equals("Decorator"))
                     * {
                     *  child.position = new Rect(position.x, position.y, BehaviorTreesEditorStyles.NodeNormalWidth, BehaviorTreesEditorStyles.NodeNormalHeight);
                     * }
                     * if (child.Name.Equals("Service"))
                     * {
                     *  child.position = new Rect(position.x, position.y, BehaviorTreesEditorStyles.NodeNormalWidth, BehaviorTreesEditorStyles.NodeNormalHeight);
                     * }
                     */
                }
            }
        }