示例#1
0
        public override void OnInitialization()
        {
            base.OnInitialization();

            _entityRoot = transform.FindChildren("EntityRoot");

            //创建所有实体的逻辑对象
            List <Type> types = GlobalTools.GetTypesInRunTimeAssemblies();

            for (int i = 0; i < types.Count; i++)
            {
                if (types[i].IsSubclassOf(typeof(EntityLogic)))
                {
                    EntityResourceAttribute attribute = types[i].GetCustomAttribute <EntityResourceAttribute>();
                    if (attribute != null)
                    {
                        _entities.Add(types[i], new List <EntityLogic>());

                        GameObject group = new GameObject(types[i].Name + "[Group]");
                        group.transform.SetParent(_entityRoot.transform);
                        group.transform.localPosition = Vector3.zero;
                        group.transform.localRotation = Quaternion.identity;
                        group.transform.localScale    = Vector3.one;
                        group.SetActive(true);
                        _entitiesGroup.Add(types[i], group);

                        _objectPool.Add(types[i], new Queue <GameObject>());
                    }
                    else
                    {
                        GlobalTools.LogError(string.Format("创建实体逻辑对象失败:实体逻辑类 {0} 丢失 EntityResourceAttribute 标记!", types[i].Name));
                    }
                }
            }
        }
示例#2
0
        public DebuggerScene()
        {
            Type        baseType = typeof(DebuggerComponentBase);
            List <Type> types    = GlobalTools.GetTypesInRunTimeAssemblies();

            for (int i = 0; i < types.Count; i++)
            {
                if (types[i].IsSubclassOf(baseType))
                {
                    CustomDebuggerAttribute attr = types[i].GetCustomAttribute <CustomDebuggerAttribute>();
                    if (attr != null)
                    {
                        _debuggerComponents.Add(attr.InspectedType, types[i]);
                    }
                }
            }

            baseType = typeof(Component);
            for (int i = 0; i < types.Count; i++)
            {
                if (types[i].IsSubclassOf(baseType))
                {
                    _componentTypes.Add(types[i]);
                }
            }
        }
        public override void OnInspectorGUI()
        {
            GUILayout.BeginHorizontal();
            EditorGUILayout.HelpBox("Input manager, managing cross platform input!", MessageType.Info);
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("InputDevice ");
            if (GUILayout.Button(_target.InputDeviceType, "MiniPopup"))
            {
                GenericMenu gm    = new GenericMenu();
                List <Type> types = GlobalTools.GetTypesInRunTimeAssemblies();
                for (int i = 0; i < types.Count; i++)
                {
                    if (types[i].BaseType == typeof(InputDeviceBase))
                    {
                        int j = i;
                        gm.AddItem(new GUIContent(types[j].FullName), _target.InputDeviceType == types[j].FullName, () =>
                        {
                            Undo.RecordObject(target, "Set InputDevice");
                            _target.InputDeviceType = types[j].FullName;
                            this.HasChanged();
                        });
                    }
                }
                gm.ShowAsContext();
            }
            GUILayout.EndHorizontal();
        }
示例#4
0
        private void LicenseGUI()
        {
            GUILayout.BeginVertical(EditorGlobalTools.Styles.Box);

            GUILayout.BeginHorizontal();
            GUILayout.Space(10);
            _showLicense = EditorGUILayout.Foldout(_showLicense, "License", true);
            GUILayout.EndHorizontal();

            if (_showLicense)
            {
                GUILayout.BeginHorizontal();
                Toggle(Target.IsPermanentLicense, out Target.IsPermanentLicense, "Permanent License");
                GUILayout.EndHorizontal();

                if (!Target.IsPermanentLicense)
                {
                    GUILayout.BeginHorizontal();
                    GUILayout.Label("Licenser");
                    if (GUILayout.Button(Target.LicenserType, EditorGlobalTools.Styles.MiniPopup))
                    {
                        GenericMenu gm    = new GenericMenu();
                        List <Type> types = GlobalTools.GetTypesInRunTimeAssemblies();
                        gm.AddItem(new GUIContent("<None>"), Target.LicenserType == "<None>", () =>
                        {
                            Undo.RecordObject(target, "Set Licenser");
                            Target.LicenserType = "<None>";
                            HasChanged();
                        });
                        for (int i = 0; i < types.Count; i++)
                        {
                            if (types[i].IsSubclassOf(typeof(LicenserBase)))
                            {
                                int j = i;
                                gm.AddItem(new GUIContent(types[j].FullName), Target.LicenserType == types[j].FullName, () =>
                                {
                                    Undo.RecordObject(target, "Set Licenser");
                                    Target.LicenserType = types[j].FullName;
                                    HasChanged();
                                });
                            }
                        }
                        gm.ShowAsContext();
                    }
                    GUILayout.EndHorizontal();
                }
            }

            GUILayout.EndVertical();
        }
        public override void OnInitialization()
        {
            base.OnInitialization();

            //注册所有数据集
            List <Type> types = GlobalTools.GetTypesInRunTimeAssemblies();

            for (int i = 0; i < types.Count; i++)
            {
                if (types[i].IsSubclassOf(typeof(DataSet)))
                {
                    _dataSets.Add(types[i], new List <DataSet>());
                }
            }
        }
示例#6
0
        public override void OnInitialization()
        {
            base.OnInitialization();

            //注册所有存在的事件
            List <Type> types = GlobalTools.GetTypesInRunTimeAssemblies();

            for (int i = 0; i < types.Count; i++)
            {
                if (types[i].IsSubclassOf(typeof(EventHandlerBase)))
                {
                    _eventHandlerList.Add(types[i], null);
                }
            }
        }
示例#7
0
        public override void OnInitialization()
        {
            base.OnInitialization();

            for (int i = 0; i < DefineEntityNames.Count; i++)
            {
                if (!_defineEntities.ContainsKey(DefineEntityNames[i]))
                {
                    _defineEntities.Add(DefineEntityNames[i], DefineEntityTargets[i]);
                }
            }

            _entityRoot = transform.Find("EntityRoot");

            //创建所有实体的逻辑对象
            List <Type> types = GlobalTools.GetTypesInRunTimeAssemblies();

            for (int i = 0; i < types.Count; i++)
            {
                if (types[i].IsSubclassOf(typeof(EntityLogicBase)))
                {
                    EntityResourceAttribute attribute = types[i].GetCustomAttribute <EntityResourceAttribute>();
                    if (attribute != null)
                    {
                        _entities.Add(types[i], new List <EntityLogicBase>());

                        GameObject group = new GameObject(types[i].Name + "[Group]");
                        group.transform.SetParent(_entityRoot);
                        group.transform.localPosition = Vector3.zero;
                        group.transform.localRotation = Quaternion.identity;
                        group.transform.localScale    = Vector3.one;
                        group.SetActive(true);
                        _entitiesGroup.Add(types[i], group);

                        _objectPool.Add(types[i], new Queue <GameObject>());
                    }
                    else
                    {
                        throw new HTFrameworkException(HTFrameworkModule.Entity, "创建实体逻辑对象失败:实体逻辑类 " + types[i].Name + " 丢失 EntityResourceAttribute 标记!");
                    }
                }
            }
        }
示例#8
0
        public override void Initialization()
        {
            base.Initialization();

            _uiRoot         = transform.Find("UIRoot");
            _uiRootRect     = _uiRoot.rectTransform();
            _residentPanel  = _uiRoot.Find("ResidentPanel");
            _temporaryPanel = _uiRoot.Find("TemporaryPanel");
            //创建所有UI的逻辑对象
            List <Type> types = GlobalTools.GetTypesInRunTimeAssemblies();

            for (int i = 0; i < types.Count; i++)
            {
                if (types[i].BaseType == typeof(UILogicResident) || types[i].BaseType == typeof(UILogicTemporary))
                {
                    _UIs.Add(types[i], Activator.CreateInstance(types[i]) as UILogic);
                }
            }
        }
示例#9
0
        private void MainDataGUI()
        {
            GUILayout.BeginVertical("Box");

            GUILayout.BeginHorizontal();
            GUILayout.Space(10);
            _showMainData = EditorGUILayout.Foldout(_showMainData, "Main Data", true);
            GUILayout.EndHorizontal();

            if (_showMainData)
            {
                GUILayout.BeginHorizontal();
                GUILayout.Label("MainData");
                if (GUILayout.Button(_target.MainDataType, "MiniPopup"))
                {
                    GenericMenu gm    = new GenericMenu();
                    List <Type> types = GlobalTools.GetTypesInRunTimeAssemblies();
                    gm.AddItem(new GUIContent("<None>"), _target.MainDataType == "<None>", () =>
                    {
                        Undo.RecordObject(target, "Set Main Data");
                        _target.MainDataType = "<None>";
                        HasChanged();
                    });
                    for (int i = 0; i < types.Count; i++)
                    {
                        if (types[i].BaseType == typeof(MainData))
                        {
                            int j = i;
                            gm.AddItem(new GUIContent(types[j].FullName), _target.MainDataType == types[j].FullName, () =>
                            {
                                Undo.RecordObject(target, "Set Main Data");
                                _target.MainDataType = types[j].FullName;
                                HasChanged();
                            });
                        }
                    }
                    gm.ShowAsContext();
                }
                GUILayout.EndHorizontal();
            }

            GUILayout.EndVertical();
        }
        protected override void OnInspectorDefaultGUI()
        {
            base.OnInspectorDefaultGUI();

            GUILayout.BeginHorizontal();
            EditorGUILayout.HelpBox("Debug Manager, Runtime debugger for games!", MessageType.Info);
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            Toggle(Target.IsEnableDebugger, out Target.IsEnableDebugger, "Is Enable Debugger");
            GUILayout.EndHorizontal();

            if (Target.IsEnableDebugger)
            {
                GUILayout.BeginHorizontal();
                GUILayout.Label("Debugger", GUILayout.Width(100));
                if (GUILayout.Button(Target.DebuggerType, EditorGlobalTools.Styles.MiniPopup))
                {
                    GenericMenu gm    = new GenericMenu();
                    List <Type> types = GlobalTools.GetTypesInRunTimeAssemblies();
                    for (int i = 0; i < types.Count; i++)
                    {
                        if (types[i] == typeof(Debugger) || types[i].IsSubclassOf(typeof(Debugger)))
                        {
                            int j = i;
                            gm.AddItem(new GUIContent(types[j].FullName), Target.DebuggerType == types[j].FullName, () =>
                            {
                                Undo.RecordObject(target, "Set Debugger");
                                Target.DebuggerType = types[j].FullName;
                                HasChanged();
                            });
                        }
                    }
                    gm.ShowAsContext();
                }
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Debugger Skin", GUILayout.Width(100));
                ObjectField(Target.DebuggerSkin, out Target.DebuggerSkin, false, "");
                GUILayout.EndHorizontal();
            }
        }
        public override void OnInitialization()
        {
            base.OnInitialization();

            List <Type> types = GlobalTools.GetTypesInRunTimeAssemblies();

            for (int i = 0; i < types.Count; i++)
            {
                if (types[i].IsSubclassOf(typeof(CustomModuleBase)))
                {
                    CustomModuleAttribute att = types[i].GetCustomAttribute <CustomModuleAttribute>();
                    if (att != null && att.IsEnable && !_customModules.ContainsKey(att.ModuleName))
                    {
                        _customModules.Add(att.ModuleName, Activator.CreateInstance(types[i]) as CustomModuleBase);
                    }
                }
            }

            foreach (var module in _customModules)
            {
                module.Value.OnInitialization();
            }
        }
示例#12
0
        public override void OnInspectorGUI()
        {
            GUILayout.BeginHorizontal();
            EditorGUILayout.HelpBox("HTFramework Main Module!", MessageType.Info);
            GUILayout.EndHorizontal();

            #region MainData
            GUILayout.BeginVertical("Box");

            GUILayout.BeginHorizontal();
            GUILayout.Label("MainData");
            if (GUILayout.Button(_target.MainDataType, "MiniPopup"))
            {
                GenericMenu gm    = new GenericMenu();
                List <Type> types = GlobalTools.GetTypesInRunTimeAssemblies();
                gm.AddItem(new GUIContent("<None>"), _target.MainDataType == "<None>", () =>
                {
                    Undo.RecordObject(target, "Set Main Data");
                    _target.MainDataType = "<None>";
                    this.HasChanged();
                });
                for (int i = 0; i < types.Count; i++)
                {
                    if (types[i].BaseType == typeof(MainData))
                    {
                        int j = i;
                        gm.AddItem(new GUIContent(types[j].FullName), _target.MainDataType == types[j].FullName, () =>
                        {
                            Undo.RecordObject(target, "Set Main Data");
                            _target.MainDataType = types[j].FullName;
                            this.HasChanged();
                        });
                    }
                }
                gm.ShowAsContext();
            }
            GUILayout.EndHorizontal();

            GUILayout.EndVertical();
            #endregion

            #region License
            GUILayout.BeginVertical("Box");

            GUILayout.BeginHorizontal();
            this.Toggle(_target.IsPermanentLicense, out _target.IsPermanentLicense, "Permanent License");
            GUILayout.EndHorizontal();

            if (!_target.IsPermanentLicense)
            {
                GUILayout.BeginHorizontal();
                GUILayout.Label("Prompt:", "BoldLabel");
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                this.TextField(_target.EndingPrompt, out _target.EndingPrompt);
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Ending Time:", "BoldLabel");
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Year:", GUILayout.Width(45));
                int year = EditorGUILayout.IntField(_target.Year, GUILayout.Width(50));
                if (year != _target.Year)
                {
                    Undo.RecordObject(target, "Set Year");
                    _target.Year = year;
                    CorrectDateTime();
                    this.HasChanged();
                }
                if (GUILayout.Button("", "OL Plus", GUILayout.Width(15)))
                {
                    Undo.RecordObject(target, "Set Year");
                    _target.Year += 1;
                    CorrectDateTime();
                    this.HasChanged();
                }
                if (GUILayout.Button("", "OL Minus", GUILayout.Width(15)))
                {
                    Undo.RecordObject(target, "Set Year");
                    _target.Year -= 1;
                    CorrectDateTime();
                    this.HasChanged();
                }
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Month:", GUILayout.Width(45));
                int month = EditorGUILayout.IntField(_target.Month, GUILayout.Width(50));
                if (month != _target.Month)
                {
                    Undo.RecordObject(target, "Set Month");
                    _target.Month = month;
                    CorrectDateTime();
                    this.HasChanged();
                }
                if (GUILayout.Button("", "OL Plus", GUILayout.Width(15)))
                {
                    Undo.RecordObject(target, "Set Month");
                    _target.Month += 1;
                    CorrectDateTime();
                    this.HasChanged();
                }
                if (GUILayout.Button("", "OL Minus", GUILayout.Width(15)))
                {
                    Undo.RecordObject(target, "Set Month");
                    _target.Month -= 1;
                    CorrectDateTime();
                    this.HasChanged();
                }
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Day:", GUILayout.Width(45));
                int day = EditorGUILayout.IntField(_target.Day, GUILayout.Width(50));
                if (day != _target.Day)
                {
                    Undo.RecordObject(target, "Set Day");
                    _target.Day = day;
                    CorrectDateTime();
                    this.HasChanged();
                }
                if (GUILayout.Button("", "OL Plus", GUILayout.Width(15)))
                {
                    Undo.RecordObject(target, "Set Day");
                    _target.Day += 1;
                    CorrectDateTime();
                    this.HasChanged();
                }
                if (GUILayout.Button("", "OL Minus", GUILayout.Width(15)))
                {
                    Undo.RecordObject(target, "Set Day");
                    _target.Day -= 1;
                    CorrectDateTime();
                    this.HasChanged();
                }
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                if (GUILayout.Button("Now", "MiniButton"))
                {
                    Undo.RecordObject(target, "Set Now");
                    _target.Year  = DateTime.Now.Year;
                    _target.Month = DateTime.Now.Month;
                    _target.Day   = DateTime.Now.Day;
                    CorrectDateTime();
                    this.HasChanged();
                }
                if (GUILayout.Button("2 Months Later", "MiniButton"))
                {
                    Undo.RecordObject(target, "Set 2 Months Later");
                    _target.Month += 2;
                    CorrectDateTime();
                    this.HasChanged();
                }
                GUILayout.EndHorizontal();
            }

            GUILayout.EndVertical();
            #endregion
        }
示例#13
0
        protected override void OnInspectorDefaultGUI()
        {
            base.OnInspectorDefaultGUI();

            GUILayout.BeginHorizontal();
            EditorGUILayout.HelpBox("State Count:" + Target.StateNames.Count, MessageType.Info);
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            Toggle(Target.IsAutoRegister, out Target.IsAutoRegister, "Auto Register");
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Name: ");
            TextField(Target.Name, out Target.Name);
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Data: ");
            if (GUILayout.Button(Target.Data, "MiniPopup"))
            {
                GenericMenu gm    = new GenericMenu();
                List <Type> types = GlobalTools.GetTypesInRunTimeAssemblies();
                gm.AddItem(new GUIContent("<None>"), Target.Data == "<None>", () =>
                {
                    Undo.RecordObject(target, "Set FSM Data Class");
                    Target.Data = "<None>";
                    HasChanged();
                });
                for (int i = 0; i < types.Count; i++)
                {
                    if (types[i].IsSubclassOf(typeof(FSMData)))
                    {
                        int j = i;
                        gm.AddItem(new GUIContent(types[j].FullName), Target.Data == types[j].FullName, () =>
                        {
                            Undo.RecordObject(target, "Set FSM Data Class");
                            Target.Data = types[j].FullName;
                            HasChanged();
                        });
                    }
                }
                gm.ShowAsContext();
            }
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUI.enabled = Target.DefaultStateName != "";
            GUILayout.Label("Default: " + Target.DefaultStateName);
            GUI.enabled = true;
            GUILayout.FlexibleSpace();
            GUI.enabled = Target.StateNames.Count > 0;
            if (GUILayout.Button("Set Default", "MiniPopup"))
            {
                GenericMenu gm = new GenericMenu();
                for (int i = 0; i < Target.StateNames.Count; i++)
                {
                    int j = i;
                    gm.AddItem(new GUIContent(Target.StateNames[j]), Target.DefaultStateName == Target.StateNames[j], () =>
                    {
                        Undo.RecordObject(target, "Set FSM Default State");
                        Target.DefaultState     = Target.States[j];
                        Target.DefaultStateName = Target.StateNames[j];
                        HasChanged();
                    });
                }
                gm.ShowAsContext();
            }
            GUI.enabled = true;
            GUILayout.EndHorizontal();

            for (int i = 0; i < Target.StateNames.Count; i++)
            {
                GUILayout.BeginHorizontal();
                GUILayout.Label(string.Format("{0}.{1}", i + 1, Target.StateNames[i]));
                GUILayout.FlexibleSpace();
                if (GUILayout.Button("Edit", "minibuttonleft"))
                {
                    if (_stateTypes.ContainsKey(Target.States[i]))
                    {
                        UnityEngine.Object classFile = AssetDatabase.LoadAssetAtPath(_stateTypes[Target.States[i]], typeof(TextAsset));
                        if (classFile)
                        {
                            AssetDatabase.OpenAsset(classFile);
                        }
                        else
                        {
                            GlobalTools.LogError("没有找到 " + Target.States[i] + " 脚本文件!");
                        }
                    }
                    else
                    {
                        GlobalTools.LogError("没有找到 " + Target.States[i] + " 脚本文件!");
                    }
                }
                if (GUILayout.Button("Delete", "minibuttonright"))
                {
                    Undo.RecordObject(target, "Delete FSM State");
                    if (Target.DefaultStateName == Target.StateNames[i])
                    {
                        Target.DefaultState     = "";
                        Target.DefaultStateName = "";
                    }

                    Target.States.RemoveAt(i);
                    Target.StateNames.RemoveAt(i);

                    if (Target.DefaultStateName == "" && Target.StateNames.Count > 0)
                    {
                        Target.DefaultState     = Target.States[0];
                        Target.DefaultStateName = Target.StateNames[0];
                    }
                    HasChanged();
                }
                GUILayout.EndHorizontal();
            }

            GUILayout.BeginHorizontal();
            if (GUILayout.Button("Add State", "MiniPopup"))
            {
                GenericMenu gm    = new GenericMenu();
                List <Type> types = GlobalTools.GetTypesInRunTimeAssemblies();
                for (int i = 0; i < types.Count; i++)
                {
                    if (types[i].IsSubclassOf(typeof(FiniteState)))
                    {
                        int    j         = i;
                        string stateName = types[j].FullName;
                        FiniteStateNameAttribute fsmAtt = types[j].GetCustomAttribute <FiniteStateNameAttribute>();
                        if (fsmAtt != null)
                        {
                            stateName = fsmAtt.Name;
                        }

                        if (Target.States.Contains(types[j].FullName))
                        {
                            gm.AddDisabledItem(new GUIContent(stateName));
                        }
                        else
                        {
                            gm.AddItem(new GUIContent(stateName), false, () =>
                            {
                                Undo.RecordObject(target, "Add FSM State");
                                Target.States.Add(types[j].FullName);
                                Target.StateNames.Add(stateName);

                                if (Target.DefaultStateName == "")
                                {
                                    Target.DefaultState     = Target.States[0];
                                    Target.DefaultStateName = Target.StateNames[0];
                                }
                                HasChanged();
                            });
                        }
                    }
                }
                gm.ShowAsContext();
            }
            GUILayout.EndHorizontal();
        }
        protected override void OnInspectorDefaultGUI()
        {
            base.OnInspectorDefaultGUI();

            GUILayout.BeginHorizontal();
            EditorGUILayout.HelpBox("Activated Procedure Count:" + Target.ActivatedProcedures.Count, MessageType.Info);
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUI.enabled = Target.DefaultProcedure != "";
            GUILayout.Label("Default: " + Target.DefaultProcedure);
            GUI.enabled = true;
            GUILayout.FlexibleSpace();
            GUI.enabled = Target.ActivatedProcedures.Count > 0;
            if (GUILayout.Button("Set Default", "MiniPopup"))
            {
                GenericMenu gm = new GenericMenu();
                for (int i = 0; i < Target.ActivatedProcedures.Count; i++)
                {
                    int j = i;
                    gm.AddItem(new GUIContent(Target.ActivatedProcedures[j]), Target.DefaultProcedure == Target.ActivatedProcedures[j], () =>
                    {
                        Undo.RecordObject(target, "Set Default Procedure");
                        Target.DefaultProcedure = Target.ActivatedProcedures[j];
                        HasChanged();
                    });
                }
                gm.ShowAsContext();
            }
            GUI.enabled = true;
            GUILayout.EndHorizontal();

            for (int i = 0; i < Target.ActivatedProcedures.Count; i++)
            {
                GUILayout.BeginHorizontal();
                GUILayout.Label((i + 1) + "." + Target.ActivatedProcedures[i]);
                GUILayout.FlexibleSpace();
                if (GUILayout.Button("▲", "MiniButtonleft"))
                {
                    if (i > 0)
                    {
                        Undo.RecordObject(target, "Set Procedure Order");
                        string procedure = Target.ActivatedProcedures[i];
                        Target.ActivatedProcedures.RemoveAt(i);
                        Target.ActivatedProcedures.Insert(i - 1, procedure);
                        HasChanged();
                        continue;
                    }
                }
                if (GUILayout.Button("▼", "MiniButtonmid"))
                {
                    if (i < Target.ActivatedProcedures.Count - 1)
                    {
                        Undo.RecordObject(target, "Set Procedure Order");
                        string procedure = Target.ActivatedProcedures[i];
                        Target.ActivatedProcedures.RemoveAt(i);
                        Target.ActivatedProcedures.Insert(i + 1, procedure);
                        HasChanged();
                        continue;
                    }
                }
                if (GUILayout.Button("Edit", "MiniButtonmid"))
                {
                    string[] names = Target.ActivatedProcedures[i].Split('.');
                    if (_procedureTypes.ContainsKey(names[names.Length - 1]))
                    {
                        UnityEngine.Object classFile = AssetDatabase.LoadAssetAtPath(_procedureTypes[names[names.Length - 1]], typeof(TextAsset));
                        if (classFile)
                        {
                            AssetDatabase.OpenAsset(classFile);
                        }
                        else
                        {
                            GlobalTools.LogError("没有找到 " + Target.ActivatedProcedures[i] + " 脚本文件!");
                        }
                    }
                    else
                    {
                        GlobalTools.LogError("没有找到 " + Target.ActivatedProcedures[i] + " 脚本文件!");
                    }
                }
                if (GUILayout.Button("Delete", "minibuttonright"))
                {
                    Undo.RecordObject(target, "Delete Procedure");

                    if (Target.DefaultProcedure == Target.ActivatedProcedures[i])
                    {
                        Target.DefaultProcedure = "";
                    }

                    Target.ActivatedProcedures.RemoveAt(i);

                    if (Target.DefaultProcedure == "" && Target.ActivatedProcedures.Count > 0)
                    {
                        Target.DefaultProcedure = Target.ActivatedProcedures[0];
                    }

                    HasChanged();
                }
                GUILayout.EndHorizontal();
            }

            GUILayout.BeginHorizontal();
            if (GUILayout.Button("Add Procedure", "MiniPopup"))
            {
                GenericMenu gm    = new GenericMenu();
                List <Type> types = GlobalTools.GetTypesInRunTimeAssemblies();
                for (int i = 0; i < types.Count; i++)
                {
                    if (types[i].IsSubclassOf(typeof(ProcedureBase)))
                    {
                        int j = i;
                        if (Target.ActivatedProcedures.Contains(types[j].FullName))
                        {
                            gm.AddDisabledItem(new GUIContent(types[j].FullName));
                        }
                        else
                        {
                            gm.AddItem(new GUIContent(types[j].FullName), false, () =>
                            {
                                Undo.RecordObject(target, "Add Procedure");

                                Target.ActivatedProcedures.Add(types[j].FullName);
                                if (Target.DefaultProcedure == "")
                                {
                                    Target.DefaultProcedure = Target.ActivatedProcedures[0];
                                }

                                HasChanged();
                            });
                        }
                    }
                }
                gm.ShowAsContext();
            }
            GUILayout.EndHorizontal();
        }
示例#15
0
        public override void OnInitialization()
        {
            base.OnInitialization();

            _UIEntity              = transform.FindChildren("UIEntity");
            _overlayUIRoot         = _UIEntity.transform.Find("OverlayUIRoot");
            _overlayUIRootRect     = _overlayUIRoot.rectTransform();
            _overlayResidentPanel  = _overlayUIRoot.Find("ResidentPanel");
            _overlayTemporaryPanel = _overlayUIRoot.Find("TemporaryPanel");
            _cameraUIRoot          = _UIEntity.transform.Find("CameraUIRoot");
            _cameraUIRootRect      = _cameraUIRoot.rectTransform();
            _cameraResidentPanel   = _cameraUIRoot.Find("ResidentPanel");
            _cameraTemporaryPanel  = _cameraUIRoot.Find("TemporaryPanel");
            _worldUIRoot           = _UIEntity.transform.Find("WorldUIRoot");
            UICamera = _UIEntity.GetComponentByChild <Camera>("UICamera");

            _overlayUIRoot.gameObject.SetActive(IsEnableOverlayUI);
            _cameraUIRoot.gameObject.SetActive(IsEnableCameraUI);
            UICamera.gameObject.SetActive(IsEnableCameraUI);
            _worldUIRoot.gameObject.SetActive(IsEnableWorldUI);

            //创建所有UI的逻辑对象
            List <Type> types = GlobalTools.GetTypesInRunTimeAssemblies();

            for (int i = 0; i < types.Count; i++)
            {
                if (types[i].IsSubclassOf(typeof(UILogicResident)) || types[i].IsSubclassOf(typeof(UILogicTemporary)))
                {
                    UIResourceAttribute attribute = types[i].GetCustomAttribute <UIResourceAttribute>();
                    if (attribute != null)
                    {
                        switch (attribute.EntityType)
                        {
                        case UIType.Overlay:
                            if (IsEnableOverlayUI)
                            {
                                _overlayUIs.Add(types[i], Activator.CreateInstance(types[i]) as UILogic);
                            }
                            break;

                        case UIType.Camera:
                            if (IsEnableCameraUI)
                            {
                                _cameraUIs.Add(types[i], Activator.CreateInstance(types[i]) as UILogic);
                            }
                            break;

                        case UIType.World:
                            if (IsEnableWorldUI)
                            {
                                if (!_worldUIs.ContainsKey(attribute.WorldUIDomainName))
                                {
                                    _worldUIs.Add(attribute.WorldUIDomainName, new WorldUIDomain(attribute.WorldUIDomainName, _worldUIRoot.FindChildren("CanvasTem")));
                                }
                                _worldUIs[attribute.WorldUIDomainName].Injection(types[i]);
                            }
                            break;
                        }
                    }
                    else
                    {
                        GlobalTools.LogError(string.Format("创建UI逻辑对象失败:UI逻辑类 {0} 丢失 UIResourceAttribute 标记!", types[i].Name));
                    }
                }
            }
        }
示例#16
0
        /// <summary>
        /// 生成任务内容列表
        /// </summary>
        private void GenerateTaskList()
        {
            if (_taskContentList == null)
            {
                _taskContentList = new ReorderableList(_asset.Content, typeof(TaskContentBase), true, true, false, false);
                _taskContentList.drawHeaderCallback = (Rect rect) =>
                {
                    Rect sub = rect;
                    sub.Set(rect.x, rect.y, 200, rect.height);
                    GUI.Label(sub, "Task Content List:");

                    sub.Set(rect.x + rect.width - 20, rect.y - 2, 20, 20);
                    if (GUI.Button(sub, _addGUIContent, "InvisibleButton"))
                    {
                        GenericMenu gm = new GenericMenu();
                        gm.AddItem(new GUIContent("<New Task Content Script>"), false, () =>
                        {
                            NewTaskContentScript();
                        });
                        List <Type> types = GlobalTools.GetTypesInRunTimeAssemblies();
                        for (int i = 0; i < types.Count; i++)
                        {
                            Type type = types[i];
                            if (type.IsSubclassOf(typeof(TaskContentBase)))
                            {
                                string contentName         = type.FullName;
                                TaskContentAttribute attri = type.GetCustomAttribute <TaskContentAttribute>();
                                if (attri != null)
                                {
                                    contentName = attri.Name;
                                }
                                gm.AddItem(new GUIContent(contentName), false, () =>
                                {
                                    AddContent(type);
                                });
                            }
                        }
                        gm.ShowAsContext();
                    }
                };
                _taskContentList.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) =>
                {
                    if (index >= 0 && index < _asset.Content.Count)
                    {
                        Rect sub = rect;
                        GUI.Label(sub, (index + 1).ToString() + "." + _asset.Content[index].Name);

                        if (isActive)
                        {
                            sub.Set(rect.x + rect.width - 40, rect.y, 20, 20);
                            if (GUI.Button(sub, _editGUIContent, "InvisibleButton"))
                            {
                                MonoScript monoScript = MonoScript.FromScriptableObject(_asset.Content[index]);
                                AssetDatabase.OpenAsset(monoScript);
                            }
                            sub.Set(rect.x + rect.width - 20, rect.y, 20, 20);
                            if (GUI.Button(sub, _deleteGUIContent, "InvisibleButton"))
                            {
                                if (EditorUtility.DisplayDialog("Prompt", "Are you sure delete task [" + _asset.Content[index].Name + "]?", "Yes", "No"))
                                {
                                    DeleteContent(index);
                                }
                            }
                        }
                    }
                };
                _taskContentList.onSelectCallback = (ReorderableList list) =>
                {
                    if (list.index >= 0 && list.index < _asset.Content.Count)
                    {
                        _currentContent = _asset.Content[list.index];
                    }
                    else
                    {
                        _currentContent = null;
                    }
                };
                _taskContentList.drawElementBackgroundCallback = (Rect rect, int index, bool isActive, bool isFocused) =>
                {
                    if (index >= 0 && index < _asset.Content.Count)
                    {
                        if (Event.current.type == EventType.Repaint)
                        {
                            GUIStyle gUIStyle = (index % 2 != 0) ? "CN EntryBackEven" : "CN EntryBackodd";
                            gUIStyle = (!isActive && !isFocused) ? gUIStyle : "RL Element";
                            gUIStyle.Draw(rect, false, isActive, isActive, isFocused);

                            if (_asset.Content[index].IsDone)
                            {
                                GUI.backgroundColor = Color.green;
                                GUI.Box(rect, "");
                                GUI.backgroundColor = Color.white;
                            }
                        }
                    }
                };
            }
        }
示例#17
0
        protected override void OnInspectorDefaultGUI()
        {
            base.OnInspectorDefaultGUI();

            GUILayout.BeginHorizontal();
            EditorGUILayout.HelpBox("UI Manager, Control all UILogic Entity!", MessageType.Info);
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            Toggle(Target.IsEnableOverlayUI, out Target.IsEnableOverlayUI, "Is Enable Overlay UI");
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            Toggle(Target.IsEnableCameraUI, out Target.IsEnableCameraUI, "Is Enable Camera UI");
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            Toggle(Target.IsEnableWorldUI, out Target.IsEnableWorldUI, "Is Enable World UI");
            GUILayout.EndHorizontal();

            GUILayout.BeginVertical("Box");

            GUILayout.BeginHorizontal();
            GUILayout.Label("Define UI", "BoldLabel");
            GUILayout.EndHorizontal();

            for (int i = 0; i < Target.DefineUINames.Count; i++)
            {
                GUILayout.BeginVertical("HelpBox");

                GUILayout.BeginHorizontal();
                GUILayout.Label("Type", GUILayout.Width(40));
                if (GUILayout.Button(Target.DefineUINames[i], "MiniPopup"))
                {
                    GenericMenu gm    = new GenericMenu();
                    List <Type> types = GlobalTools.GetTypesInRunTimeAssemblies();
                    for (int m = 0; m < types.Count; m++)
                    {
                        if (types[m].IsSubclassOf(typeof(UILogicBase)))
                        {
                            int j = i;
                            int n = m;
                            if (Target.DefineUINames.Contains(types[n].FullName))
                            {
                                gm.AddDisabledItem(new GUIContent(types[n].FullName));
                            }
                            else
                            {
                                gm.AddItem(new GUIContent(types[n].FullName), Target.DefineUINames[j] == types[n].FullName, () =>
                                {
                                    Undo.RecordObject(target, "Set Define UI Name");
                                    Target.DefineUINames[j] = types[n].FullName;
                                    HasChanged();
                                });
                            }
                        }
                    }
                    gm.ShowAsContext();
                }
                if (GUILayout.Button("Delete", "Minibutton", GUILayout.Width(50)))
                {
                    Undo.RecordObject(target, "Delete Define UI");
                    Target.DefineUINames.RemoveAt(i);
                    Target.DefineUIEntitys.RemoveAt(i);
                    HasChanged();
                    continue;
                }
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Entity", GUILayout.Width(40));
                GameObject entity = Target.DefineUIEntitys[i];
                ObjectField(Target.DefineUIEntitys[i], out entity, false, "");
                if (entity != Target.DefineUIEntitys[i])
                {
                    Target.DefineUIEntitys[i] = entity;
                }
                GUILayout.EndHorizontal();

                GUILayout.EndVertical();
            }

            GUILayout.BeginHorizontal();
            GUILayout.FlexibleSpace();
            if (GUILayout.Button("New", "Minibutton"))
            {
                Undo.RecordObject(target, "New Define UI");
                Target.DefineUINames.Add("<None>");
                Target.DefineUIEntitys.Add(null);
                HasChanged();
            }
            GUILayout.EndHorizontal();

            GUILayout.EndVertical();
        }
示例#18
0
        public override void OnInspectorGUI()
        {
            GUILayout.BeginHorizontal();
            EditorGUILayout.HelpBox("Activated Procedure Count:" + _target.ActivatedProcedures.Count, MessageType.Info);
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUI.enabled = _target.DefaultProcedure != "";
            GUILayout.Label("Default: " + _target.DefaultProcedure);
            GUI.enabled = true;
            GUILayout.FlexibleSpace();
            GUI.enabled = _target.ActivatedProcedures.Count > 0;
            if (GUILayout.Button("Set Default", "MiniPopup"))
            {
                GenericMenu gm = new GenericMenu();
                for (int i = 0; i < _target.ActivatedProcedures.Count; i++)
                {
                    int j = i;
                    gm.AddItem(new GUIContent(_target.ActivatedProcedures[j]), _target.DefaultProcedure == _target.ActivatedProcedures[j], () =>
                    {
                        Undo.RecordObject(target, "Set Default Procedure");
                        _target.DefaultProcedure = _target.ActivatedProcedures[j];
                        this.HasChanged();
                    });
                }
                gm.ShowAsContext();
            }
            GUI.enabled = true;
            GUILayout.EndHorizontal();

            for (int i = 0; i < _target.ActivatedProcedures.Count; i++)
            {
                GUILayout.BeginHorizontal();
                GUILayout.Label((i + 1) + "." + _target.ActivatedProcedures[i]);
                GUILayout.FlexibleSpace();
                if (GUILayout.Button("Edit", "MiniButton"))
                {
                    if (_procedureTypes.ContainsKey(_target.ActivatedProcedures[i]))
                    {
                        UnityEngine.Object classFile = AssetDatabase.LoadAssetAtPath(_procedureTypes[_target.ActivatedProcedures[i]], typeof(TextAsset));
                        if (classFile)
                        {
                            AssetDatabase.OpenAsset(classFile);
                        }
                        else
                        {
                            GlobalTools.LogError("没有找到 " + _target.ActivatedProcedures[i] + " 脚本文件!");
                        }
                    }
                    else
                    {
                        GlobalTools.LogError("没有找到 " + _target.ActivatedProcedures[i] + " 脚本文件!");
                    }
                }
                if (GUILayout.Button("Delete", "MiniButton"))
                {
                    Undo.RecordObject(target, "Delete Procedure");
                    if (_target.DefaultProcedure == _target.ActivatedProcedures[i])
                    {
                        _target.DefaultProcedure = "";
                    }

                    _target.ActivatedProcedures.RemoveAt(i);

                    if (_target.DefaultProcedure == "" && _target.ActivatedProcedures.Count > 0)
                    {
                        _target.DefaultProcedure = _target.ActivatedProcedures[0];
                    }
                    this.HasChanged();
                }
                GUILayout.EndHorizontal();
            }

            GUILayout.BeginHorizontal();
            if (GUILayout.Button("Add Procedure", "MiniPopup"))
            {
                GenericMenu gm    = new GenericMenu();
                List <Type> types = GlobalTools.GetTypesInRunTimeAssemblies();
                for (int i = 0; i < types.Count; i++)
                {
                    if (types[i].BaseType == typeof(Procedure))
                    {
                        int j = i;
                        if (_target.ActivatedProcedures.Contains(types[j].FullName))
                        {
                            gm.AddDisabledItem(new GUIContent(types[j].FullName));
                        }
                        else
                        {
                            gm.AddItem(new GUIContent(types[j].FullName), false, () =>
                            {
                                Undo.RecordObject(target, "Add Procedure");
                                _target.ActivatedProcedures.Add(types[j].FullName);

                                if (_target.DefaultProcedure == "")
                                {
                                    _target.DefaultProcedure = _target.ActivatedProcedures[0];
                                }
                                this.HasChanged();
                            });
                        }
                    }
                }
                gm.ShowAsContext();
            }
            GUILayout.EndHorizontal();
        }
示例#19
0
        /// <summary>
        /// 任务点GUI事件处理
        /// </summary>
        private void OnPointEventHandle()
        {
            if (_currentContent != null && Event.current != null)
            {
                Vector2 mousePosition = Event.current.mousePosition;

                switch (Event.current.type)
                {
                case EventType.MouseDown:
                    if (Event.current.button == 1)
                    {
                        GenericMenu gm = new GenericMenu();
                        gm.AddItem(new GUIContent("<New Task Point Script>"), false, () =>
                        {
                            NewTaskPointScript();
                        });
                        List <Type> types = GlobalTools.GetTypesInRunTimeAssemblies();
                        for (int i = 0; i < types.Count; i++)
                        {
                            Type type = types[i];
                            if (type.IsSubclassOf(typeof(TaskPointBase)))
                            {
                                string             contentName = type.FullName;
                                TaskPointAttribute attri       = type.GetCustomAttribute <TaskPointAttribute>();
                                if (attri != null)
                                {
                                    contentName = attri.Name;
                                }
                                gm.AddItem(new GUIContent("Add Task Point/" + contentName), false, () =>
                                {
                                    AddPoint(type, mousePosition);
                                });
                            }
                        }
                        EditorGlobalTools.BeginNoRepeatNaming();
                        for (int i = 0; i < _currentContent.Points.Count; i++)
                        {
                            TaskPointBase point = _currentContent.Points[i];
                            gm.AddItem(new GUIContent(EditorGlobalTools.GetNoRepeatName("Find Task Point/" + point.Name)), false, () =>
                            {
                                FindPoint(point);
                            });
                        }
                        gm.ShowAsContext();
                    }
                    break;

                case EventType.MouseDrag:
                    if (Event.current.button == 2)
                    {
                        for (int i = 0; i < _currentContent.Points.Count; i++)
                        {
                            _currentContent.Points[i].OnDrag(Event.current.delta);
                        }
                        GUI.changed = true;
                    }
                    break;
                }

                for (int i = 0; i < _currentContent.Points.Count; i++)
                {
                    _currentContent.Points[i].OnPointEventHandle(Event.current, _currentContent);
                }
            }
        }
        protected override void OnInspectorDefaultGUI()
        {
            base.OnInspectorDefaultGUI();

            GUILayout.BeginHorizontal();
            EditorGUILayout.HelpBox("Network Manager, implementing basic network client with socket!", MessageType.Info);
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            TextField(Target.ServerIP, out Target.ServerIP, "Server IP");
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            IntField(Target.ServerPort, out Target.ServerPort, "Server Port");
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            TextField(Target.ClientIP, out Target.ClientIP, "Client IP");
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            IntField(Target.ClientPort, out Target.ClientPort, "Client Port");
            GUILayout.EndHorizontal();

            GUILayout.BeginVertical(EditorGlobalTools.Styles.Box);

            GUILayout.BeginHorizontal();
            GUILayout.Label("Enabled Channels:");
            GUILayout.FlexibleSpace();
            GUILayout.EndHorizontal();

            for (int i = 0; i < Target.ChannelTypes.Count; i++)
            {
                GUILayout.BeginHorizontal();
                GUILayout.Label((i + 1) + "." + Target.ChannelTypes[i]);
                GUILayout.FlexibleSpace();
                if (GUILayout.Button("Delete", EditorStyles.miniButton))
                {
                    Undo.RecordObject(target, "Delete Channel");
                    Target.ChannelTypes.RemoveAt(i);
                    HasChanged();
                }
                GUILayout.EndHorizontal();
            }

            GUILayout.BeginHorizontal();
            if (GUILayout.Button("Add Channel", EditorGlobalTools.Styles.MiniPopup))
            {
                GenericMenu gm    = new GenericMenu();
                List <Type> types = GlobalTools.GetTypesInRunTimeAssemblies();
                for (int i = 0; i < types.Count; i++)
                {
                    if (types[i].IsSubclassOf(typeof(ProtocolChannelBase)))
                    {
                        int j = i;
                        if (Target.ChannelTypes.Contains(types[j].FullName))
                        {
                            gm.AddDisabledItem(new GUIContent(types[j].FullName));
                        }
                        else
                        {
                            gm.AddItem(new GUIContent(types[j].FullName), false, () =>
                            {
                                Undo.RecordObject(target, "Add Channel");
                                Target.ChannelTypes.Add(types[j].FullName);
                                HasChanged();
                            });
                        }
                    }
                }
                gm.ShowAsContext();
            }
            GUILayout.EndHorizontal();

            GUILayout.EndVertical();
        }
示例#21
0
        public override void OnInspectorGUI()
        {
            GUILayout.BeginHorizontal();
            EditorGUILayout.HelpBox("State Count:" + _target.StateNames.Count, MessageType.Info);
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Name: ");
            this.TextField(_target.Name, out _target.Name);
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Data: ");
            if (GUILayout.Button(_target.Data, "MiniPopup"))
            {
                GenericMenu gm    = new GenericMenu();
                List <Type> types = GlobalTools.GetTypesInRunTimeAssemblies();
                gm.AddItem(new GUIContent("<None>"), _target.Data == "<None>", () =>
                {
                    Undo.RecordObject(target, "Set FSM Data Class");
                    _target.Data = "<None>";
                    this.HasChanged();
                });
                for (int i = 0; i < types.Count; i++)
                {
                    if (types[i].BaseType == typeof(FSMData))
                    {
                        int j = i;
                        gm.AddItem(new GUIContent(types[j].FullName), _target.Data == types[j].FullName, () =>
                        {
                            Undo.RecordObject(target, "Set FSM Data Class");
                            _target.Data = types[j].FullName;
                            this.HasChanged();
                        });
                    }
                }
                gm.ShowAsContext();
            }
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUI.enabled = _target.DefaultStateName != "";
            GUILayout.Label("Default: " + _target.DefaultStateName);
            GUI.enabled = true;
            GUILayout.FlexibleSpace();
            GUI.enabled = _target.StateNames.Count > 0;
            if (GUILayout.Button("Set Default", "MiniPopup"))
            {
                GenericMenu gm = new GenericMenu();
                for (int i = 0; i < _target.StateNames.Count; i++)
                {
                    int j = i;
                    gm.AddItem(new GUIContent(_target.StateNames[j]), _target.DefaultStateName == _target.StateNames[j], () =>
                    {
                        Undo.RecordObject(target, "Set FSM Default State");
                        _target.DefaultState     = _target.States[j];
                        _target.DefaultStateName = _target.StateNames[j];
                        this.HasChanged();
                    });
                }
                gm.ShowAsContext();
            }
            GUI.enabled = true;
            GUILayout.EndHorizontal();

            for (int i = 0; i < _target.StateNames.Count; i++)
            {
                GUILayout.BeginHorizontal();
                GUILayout.Label(string.Format("{0}.{1} [{2}]", i + 1, _target.StateNames[i], _target.States[i]));
                GUILayout.FlexibleSpace();
                if (GUILayout.Button("Delete", "MiniButton"))
                {
                    Undo.RecordObject(target, "Delete FSM State");
                    if (_target.DefaultStateName == _target.StateNames[i])
                    {
                        _target.DefaultState     = "";
                        _target.DefaultStateName = "";
                    }

                    _target.States.RemoveAt(i);
                    _target.StateNames.RemoveAt(i);

                    if (_target.DefaultStateName == "" && _target.StateNames.Count > 0)
                    {
                        _target.DefaultState     = _target.States[0];
                        _target.DefaultStateName = _target.StateNames[0];
                    }
                    this.HasChanged();
                }
                GUILayout.EndHorizontal();
            }

            GUILayout.BeginHorizontal();
            if (GUILayout.Button("Add State", "MiniPopup"))
            {
                GenericMenu gm    = new GenericMenu();
                List <Type> types = GlobalTools.GetTypesInRunTimeAssemblies();
                for (int i = 0; i < types.Count; i++)
                {
                    if (types[i].BaseType == typeof(FiniteState))
                    {
                        int      j         = i;
                        string   stateName = types[j].FullName;
                        object[] atts      = types[j].GetCustomAttributes(false);
                        foreach (object att in atts)
                        {
                            FiniteStateNameAttribute fsmAtt = att as FiniteStateNameAttribute;
                            if (fsmAtt != null)
                            {
                                stateName = fsmAtt.Name;
                                break;
                            }
                        }

                        if (_target.States.Contains(types[j].FullName))
                        {
                            gm.AddDisabledItem(new GUIContent(stateName));
                        }
                        else
                        {
                            gm.AddItem(new GUIContent(stateName), false, () =>
                            {
                                Undo.RecordObject(target, "Add FSM State");
                                _target.States.Add(types[j].FullName);
                                _target.StateNames.Add(stateName);

                                if (_target.DefaultStateName == "")
                                {
                                    _target.DefaultState     = _target.States[0];
                                    _target.DefaultStateName = _target.StateNames[0];
                                }
                                this.HasChanged();
                            });
                        }
                    }
                }
                gm.ShowAsContext();
            }
            GUILayout.EndHorizontal();
        }
        protected override void OnInspectorDefaultGUI()
        {
            base.OnInspectorDefaultGUI();

            GUILayout.BeginHorizontal();
            EditorGUILayout.HelpBox("Entity Manager, Control all EntityLogic!", MessageType.Info);
            GUILayout.EndHorizontal();

            GUILayout.BeginVertical(EditorGlobalTools.Styles.Box);

            GUILayout.BeginHorizontal();
            GUILayout.Label("Define Entity:");
            GUILayout.EndHorizontal();

            for (int i = 0; i < Target.DefineEntityNames.Count; i++)
            {
                GUILayout.BeginVertical(EditorStyles.helpBox);

                GUILayout.BeginHorizontal();
                GUILayout.Label("Type", GUILayout.Width(40));
                if (GUILayout.Button(Target.DefineEntityNames[i], EditorGlobalTools.Styles.MiniPopup))
                {
                    GenericMenu gm    = new GenericMenu();
                    List <Type> types = GlobalTools.GetTypesInRunTimeAssemblies();
                    for (int m = 0; m < types.Count; m++)
                    {
                        if (types[m].IsSubclassOf(typeof(EntityLogicBase)))
                        {
                            int j = i;
                            int n = m;
                            if (Target.DefineEntityNames.Contains(types[n].FullName))
                            {
                                gm.AddDisabledItem(new GUIContent(types[n].FullName));
                            }
                            else
                            {
                                gm.AddItem(new GUIContent(types[n].FullName), Target.DefineEntityNames[j] == types[n].FullName, () =>
                                {
                                    Undo.RecordObject(target, "Set Define Entity Name");
                                    Target.DefineEntityNames[j] = types[n].FullName;
                                    HasChanged();
                                });
                            }
                        }
                    }
                    gm.ShowAsContext();
                }
                GUI.backgroundColor = Color.red;
                if (GUILayout.Button("Delete", EditorStyles.miniButton, GUILayout.Width(50)))
                {
                    Undo.RecordObject(target, "Delete Define Entity");
                    Target.DefineEntityNames.RemoveAt(i);
                    Target.DefineEntityTargets.RemoveAt(i);
                    HasChanged();
                    continue;
                }
                GUI.backgroundColor = Color.white;
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Entity", GUILayout.Width(40));
                GameObject entity = Target.DefineEntityTargets[i];
                ObjectField(Target.DefineEntityTargets[i], out entity, false, "");
                if (entity != Target.DefineEntityTargets[i])
                {
                    Target.DefineEntityTargets[i] = entity;
                }
                GUILayout.EndHorizontal();

                GUILayout.EndVertical();
            }

            GUILayout.BeginHorizontal();
            GUILayout.FlexibleSpace();
            if (GUILayout.Button("New", EditorStyles.miniButton))
            {
                Undo.RecordObject(target, "New Define Entity");
                Target.DefineEntityNames.Add("<None>");
                Target.DefineEntityTargets.Add(null);
                HasChanged();
            }
            GUILayout.EndHorizontal();

            GUILayout.EndVertical();
        }