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); }
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(); } }
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); }
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); }); } }
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(); }
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); * } */ } } }