public void Display(BehaviourTreeEditor editor, Rect pos, KeyCode hotkey) { if (mKey != hotkey) { mKey = hotkey; mModules.Clear(); AIModules.Get(mModules, hotkey); if (mModules.Count == 0) { return; } mContents = new GUIContent[mModules.Count]; mItems.Clear(); for (int i = 0; i < mModules.Count; i++) { mContents[i] = new GUIContent(hotkey == KeyCode.Alpha1 || hotkey == KeyCode.Alpha2 || hotkey == KeyCode.Alpha3 || hotkey == KeyCode.Alpha4 ? mModules[i].CateTitle : mModules[i].Title); var it = NewItem(mContents[i], CreateNode, mModules[i]); mItems.Add(it); } } //mPos = editor.AIGraph.CalculateGlobalPosition(editor.GlobalMousePosition); if (mItems.Count > 0) { Display(editor, pos); } }
private void OnEnable() { if (this == null || target == null || serializedObject == null) { return; } mMod = AIModules.Get(target.GetType()); mComment = serializedObject.FindProperty("m_Comment"); comment = mComment.stringValue; }
public BTNodeGUI(BehaviourTreeEditor editor, BTNode asset) : base(editor) { mNode = asset; mAsset = mNode.Asset as BTNodeAsset; mMod = AIModules.Get(asset); color = mMod.color; title = mMod.Title; enableChild = mAsset != null && mAsset.EnableChild; enableParent = mAsset != null; mContext = mNode; mDetail = GetDetail(); BreakToggle = mAsset == null ? false : mAsset.EditorBreakToggle; Resize(); }
public static void OnUnityLoaded() { IsInited = false; DevilEditorUtility.ReleaseCache(); titleStyle.alignment = TextAnchor.MiddleCenter; titleStyle.richText = true; titleStyle.fontSize = 13; titleStyle.wordWrap = false; titleStyle.fontStyle = FontStyle.Bold; titleStyle.normal.textColor = Color.green; titleStyle.onHover.textColor = Color.yellow; contentStyle.alignment = TextAnchor.MiddleCenter; contentStyle.richText = true; contentStyle.fontSize = 10; contentStyle.wordWrap = false; contentStyle.fontStyle = FontStyle.Normal; contentStyle.normal.textColor = Color.white; contentStyle.onHover.textColor = Color.white; string txt = "ABCDEFG"; Vector2 size = SizeOfTitle(txt); TitleHeight = size.y; size = SizeOfContent(txt); ContentHeight = size.y; EditorPrefs.SetBool("Devil.Editor.first", false); string[] assets = AssetDatabase.FindAssets("t:script Installizer"); string ends = "/DevilFramework/Editor/Installizer.cs"; foreach (string s in assets) { string path = AssetDatabase.GUIDToAssetPath(s); if (path.EndsWith(ends)) { path = path.Substring(0, path.Length - ends.Length); EditorPrefs.SetString("Devil.Root", path); InstallRoot = path; DataPath = path + "/DevilFramework"; Debug.Log("Devil Framework install at path: " + path); } } AIModules.LoadModules(); //BehaviourModuleManager.GetOrNewInstance().Load(); IsInited = true; }
void GetServices() { mAsset = editor.TargetTree; mServiceNodes.Clear(); mServiceNames.Clear(); mServiceModules.Clear(); if (mAsset != null) { mAsset.GetAllNodes(mServiceNodes, (x) => x.isService); } for (int i = 0; i < mServiceNodes.Count; i++) { var mod = AIModules.Get(mServiceNodes[i]); mServiceModules.Add(mod); mServiceNames.Add(GetServiceName(mServiceNodes[i], mod)); } }
// get conditions or services void GetDecoratorModules() { mConditionNodes.Clear(); mConditionMods.Clear(); mConditionNames.Clear(); for (int i = 0; i < mAsset.ConditionCount; i++) { var id = mAsset.GetConditionId(i); var node = editor.TargetTree.GetNodeById(id); if (node != null) { var mod = AIModules.Get(node); mConditionNodes.Add(node); mConditionNames.Add(GetConditionName(node, mod)); mConditionMods.Add(mod); } } }
private Module(int cate, System.Type type, string defaultIcon) { var category = CATES[cate]; this.type = type; this.CategoryId = cate; this.Category = category; composite = Ref.GetCustomAttribute <BTCompositeAttribute>(type); Hotkey = composite == null ? 0 : composite.HotKey; Title = composite == null || string.IsNullOrEmpty(composite.Title) ? type.Name : composite.Title; Detail = composite == null ? null : composite.Detail; Color c; if (composite != null && !string.IsNullOrEmpty(composite.color) && ColorUtility.TryParseHtmlString(composite.color, out c)) { color = c; } else { color = AIModules.GetColor(category); } icon = AssetDatabase.LoadAssetAtPath <Texture2D>(composite == null || string.IsNullOrEmpty(composite.IconPath) ? defaultIcon : composite.IconPath); var buf = StringUtil.GetBuilder(); buf.Append(category).Append('/'); if (composite != null && !string.IsNullOrEmpty(composite.Category)) { CateTitle = StringUtil.Concat(composite.Category, '/', Title); } else if (!string.IsNullOrEmpty(type.Namespace) && type.Namespace != "Devil.AI") { CateTitle = StringUtil.Concat(type.Namespace, '/', Title); } else { CateTitle = Title; } buf.Append(CateTitle); Path = new GUIContent(StringUtil.ReleaseBuilder(buf)); }
public static void InitModules() { sHotkeyMenu = new BTHotkeyMenu(); sNewTreeMenu = new BTEditorMenu(); sTreeMenu = new BTEditorMenu(); sContextMenu = new BTEditorMenu(); sNodeMenu = new BTEditorMenu(); sConditionMenu = new BTEditorMenu(); sDebugMenu = new BTEditorMenu(); var newtree = BTEditorMenu.NewItem("创建行为树", (menu, index, data) => { var tree = ScriptableObject.CreateInstance <BehaviourTreeAsset>(); tree.name = "INNER_AI"; menu.editor.Binder.SetBehaviourTreeAsset(tree); }); var resetItem = BTEditorMenu.NewItem("重置", (menu, index, data) => { menu.editor.Binder.Reset(); }); var saveitem = BTEditorMenu.NewItem("保存", (menu, index, data) => { menu.editor.Binder.SaveAsset(); }); var delitem = BTEditorMenu.NewItem("删除", (menu, index, data) => { menu.editor.DeleteContext(menu.editor.mContextNode); }); var moveup = BTEditorMenu.NewItem("向上移动", (menu, index, data) => { menu.editor.MoveContextCondition(-1); }); var movedown = BTEditorMenu.NewItem("向下移动", (menu, index, data) => { menu.editor.MoveContextCondition(1); }); var copy = BTEditorMenu.NewItem("复制", (menu, index, data) => { menu.editor.CopySelection(); }); var paste = BTEditorMenu.NewItem("粘贴", (menu, index, data) => { menu.editor.PasteSelection(); }); sNewTreeMenu.AddItem(newtree); sTreeMenu.AddItem(newtree); sTreeMenu.AddItem(resetItem); sContextMenu.AddItem(resetItem); sDebugMenu.AddItem(resetItem); sTreeMenu.AddItem(saveitem); sContextMenu.AddItem(saveitem); sContextMenu.AddItem(copy); sTreeMenu.AddItem(paste); sContextMenu.AddItem(delitem); sConditionMenu.AddItem(delitem); sConditionMenu.AddItem(moveup); sConditionMenu.AddItem(movedown); BTEditorMenu.OnItemSelected newnode = (menu, index, data) => { var mod = data as AIModules.Module; if (mod != null) { menu.editor.AddNewNode(mod); } }; var composites = AIModules.GetModules(AIModules.CATE_COMPOSITE); var tasks = AIModules.GetModules(AIModules.CATE_TASK); foreach (var t in composites) { var item = BTEditorMenu.NewItem(t.Path, newnode, t); sTreeMenu.AddItem(item); //sContextMenu.AddItem(item); sNodeMenu.AddItem(item); } foreach (var t in tasks) { var item = BTEditorMenu.NewItem(t.Path, newnode, t); sTreeMenu.AddItem(item); //sContextMenu.AddItem(item); sNodeMenu.AddItem(item); } var conds = AIModules.GetModules(AIModules.CATE_CONDITION); foreach (var t in conds) { var item = BTEditorMenu.NewItem(t.Path, newnode, t); sContextMenu.AddItem(item); sConditionMenu.AddItem(item); } var servs = AIModules.GetModules(AIModules.CATE_SERVICE); foreach (var t in servs) { var item = BTEditorMenu.NewItem(t.Path, newnode, t); sTreeMenu.AddItem(item); //sContextMenu.AddItem(item); sNodeMenu.AddItem(item); } sDebugMenu.AddItem("添加断点", (menu, index, data) => { var item = menu.editor.mContextNode; if (item != null) { item.BreakToggle = true; } }, null); sDebugMenu.AddItem("删除断点", (menu, index, data) => { var item = menu.editor.mContextNode; if (item != null) { item.BreakToggle = false; } }, null); }