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();
 }
예제 #4
0
        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;
        }
예제 #5
0
 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));
            }
예제 #8
0
        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);
        }