Exemplo n.º 1
0
        protected override void OnInspectorDefaultGUI()
        {
            base.OnInspectorDefaultGUI();

            GUI.enabled = !EditorApplication.isPlaying;

            GUILayout.BeginHorizontal();
            GUILayout.Label("InputDevice ");
            if (GUILayout.Button(Target.InputDeviceType, EditorGlobalTools.Styles.MiniPopup))
            {
                GenericMenu gm    = new GenericMenu();
                List <Type> types = ReflectionToolkit.GetTypesInRunTimeAssemblies(type =>
                {
                    return(type.IsSubclassOf(typeof(InputDeviceBase)) && !type.IsAbstract);
                });
                for (int i = 0; i < types.Count; i++)
                {
                    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;
                        HasChanged();
                    });
                }
                gm.ShowAsContext();
            }
            GUILayout.EndHorizontal();

            GUI.enabled = true;
        }
        protected override void OnInspectorDefaultGUI()
        {
            base.OnInspectorDefaultGUI();

            if (Targets.Length > 1)
            {
                EditorGUILayout.HelpBox("FSM cannot be multi-edited.", MessageType.None);
                return;
            }

            GUI.enabled = !EditorApplication.isPlaying;

            GUILayout.BeginHorizontal();
            EditorGUILayout.HelpBox("Finite state machine!", MessageType.Info);
            GUILayout.EndHorizontal();

            PropertyField(nameof(FSM.IsAutoRegister), "Auto Register");
            PropertyField(nameof(FSM.Name), "Name");
            PropertyField(nameof(FSM.Group), "Group");

            _stateList.DoLayoutList();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Data", GUILayout.Width(LabelWidth));
            if (GUILayout.Button(Target.Data, EditorStyles.popup, GUILayout.Width(EditorGUIUtility.currentViewWidth - LabelWidth - 25)))
            {
                GenericMenu gm = new GenericMenu();
                gm.AddItem(new GUIContent("<None>"), Target.Data == "<None>", () =>
                {
                    Undo.RecordObject(target, "Set FSM Data Class");
                    Target.Data = "<None>";
                    HasChanged();
                });
                gm.AddItem(new GUIContent("<New Data Script>"), false, () =>
                {
                    EditorGlobalTools.CreateScriptFormTemplate(EditorPrefsTable.Script_FSMData_Folder, "FSMData", "FSMDataTemplate");
                });
                gm.AddSeparator("");
                List <Type> types = ReflectionToolkit.GetTypesInRunTimeAssemblies(type =>
                {
                    return(type.IsSubclassOf(typeof(FSMDataBase)) && !type.IsAbstract);
                });
                for (int i = 0; i < types.Count; i++)
                {
                    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();

            GUI.enabled = true;

            OnArgsGUI();
        }
        protected override void OnEnable()
        {
            base.OnEnable();

            _components.Clear();
            _componentInfos.Clear();
            List <Type> types = ReflectionToolkit.GetTypesInRunTimeAssemblies((type) =>
            {
                return(type.IsSubclassOf(typeof(ECS_Component)) && !type.IsAbstract);
            });

            for (int i = 0; i < types.Count; i++)
            {
                _components.Add(types[i]);
                _componentInfos.Add(types[i], new ECS_ComponentInfo(types[i]));
            }

            _systems.Clear();
            _systemInfos.Clear();
            types = ReflectionToolkit.GetTypesInRunTimeAssemblies((type) =>
            {
                return(type.IsSubclassOf(typeof(ECS_System)) && !type.IsAbstract);
            });
            for (int i = 0; i < types.Count; i++)
            {
                _systems.Add(types[i]);
                _systemInfos.Add(types[i], new ECS_SystemInfo(types[i], _componentInfos));
            }

            Entity = null;
        }
        public DebuggerScene()
        {
            Type        baseType = typeof(DebuggerComponentBase);
            List <Type> types    = ReflectionToolkit.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]);
                }
            }
        }
Exemplo n.º 5
0
 private void MainDataGUI()
 {
     GUILayout.BeginHorizontal();
     GUILayout.Label("MainData", GUILayout.Width(LabelWidth));
     if (GUILayout.Button(Target.MainDataType, EditorGlobalTools.Styles.MiniPopup))
     {
         GenericMenu gm    = new GenericMenu();
         List <Type> types = ReflectionToolkit.GetTypesInRunTimeAssemblies(type =>
         {
             return(type.IsSubclassOf(typeof(MainDataBase)));
         });
         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++)
         {
             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();
 }
Exemplo n.º 6
0
        /// <summary>
        /// 初始化助手
        /// </summary>
        public void OnInitialization()
        {
            _module     = Module as EntityManager;
            _entityRoot = _module.transform.Find("EntityRoot");

            List <Type> types = ReflectionToolkit.GetTypesInRunTimeAssemblies(type =>
            {
                return(type.IsSubclassOf(typeof(EntityLogicBase)) && !type.IsAbstract);
            });

            for (int i = 0; i < types.Count; i++)
            {
                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);

                    ObjectPools.Add(types[i], new Queue <GameObject>());
                }
                else
                {
                    throw new HTFrameworkException(HTFrameworkModule.Entity, "创建实体逻辑对象失败:实体逻辑类 " + types[i].Name + " 丢失 EntityResourceAttribute 标记!");
                }
            }
        }
Exemplo n.º 7
0
        protected override void OnDefaultEnable()
        {
            base.OnDefaultEnable();

            _module = Target as InternalModuleBase <H>;
            _types  = ReflectionToolkit.GetTypesInRunTimeAssemblies(type =>
            {
                return(typeof(H).IsAssignableFrom(type) && typeof(H) != type);
            });
        }
Exemplo n.º 8
0
        /// <summary>
        /// 初始化助手
        /// </summary>
        public void OnInitialization()
        {
            List <Type> types = ReflectionToolkit.GetTypesInRunTimeAssemblies(type =>
            {
                return(type.IsSubclassOf(typeof(DataSetBase)));
            });

            for (int i = 0; i < types.Count; i++)
            {
                DataSets.Add(types[i], new List <DataSetBase>());
            }
        }
Exemplo n.º 9
0
        /// <summary>
        /// 初始化助手
        /// </summary>
        public void OnInitialization()
        {
            List <Type> types = ReflectionToolkit.GetTypesInRunTimeAssemblies(type =>
            {
                return(type.IsSubclassOf(typeof(ECS_System)));
            });

            for (int i = 0; i < types.Count; i++)
            {
                Systems.Add(types[i], Activator.CreateInstance(types[i]) as ECS_System);
            }
        }
Exemplo n.º 10
0
        /// <summary>
        /// 初始化助手
        /// </summary>
        public void OnInitialization()
        {
            List <Type> types = ReflectionToolkit.GetTypesInRunTimeAssemblies(type =>
            {
                return(type.IsSubclassOf(typeof(EventHandlerBase)) && !type.IsAbstract);
            });

            for (int i = 0; i < types.Count; i++)
            {
                EventHandlerList1.Add(types[i], null);
                EventHandlerList2.Add(types[i], null);
                EventHandlerList3.Add(types[i], null);
            }
        }
Exemplo n.º 11
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 = ReflectionToolkit.GetTypesInRunTimeAssemblies(type =>
                        {
                            return(type.IsSubclassOf(typeof(LicenserBase)) && !type.IsAbstract);
                        });
                        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++)
                        {
                            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();
        }
Exemplo n.º 12
0
        internal override void OnInitialization()
        {
            base.OnInitialization();

            //注册所有数据集
            List <Type> types = ReflectionToolkit.GetTypesInRunTimeAssemblies(type =>
            {
                return(type.IsSubclassOf(typeof(DataSetBase)));
            });

            for (int i = 0; i < types.Count; i++)
            {
                _dataSets.Add(types[i], new List <DataSetBase>());
            }
        }
Exemplo n.º 13
0
        internal override void OnInitialization()
        {
            base.OnInitialization();

            //注册所有存在的事件
            List <Type> types = ReflectionToolkit.GetTypesInRunTimeAssemblies(type =>
            {
                return(type.IsSubclassOf(typeof(EventHandlerBase)));
            });

            for (int i = 0; i < types.Count; i++)
            {
                _eventHandlerList1.Add(types[i], null);
                _eventHandlerList2.Add(types[i], null);
                _eventHandlerList3.Add(types[i], null);
            }
        }
Exemplo n.º 14
0
        private void ChangeHelper()
        {
            GenericMenu gm    = new GenericMenu();
            List <Type> types = ReflectionToolkit.GetTypesInRunTimeAssemblies(type =>
            {
                return(HelperInterface.IsAssignableFrom(type) && HelperInterface != type);
            });

            for (int i = 0; i < types.Count; i++)
            {
                int j = i;
                gm.AddItem(new GUIContent(types[j].FullName), _module.HelperType == types[j].FullName, () =>
                {
                    _module.HelperType = types[j].FullName;
                });
            }
            gm.ShowAsContext();
        }
Exemplo n.º 15
0
        internal 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 = ReflectionToolkit.GetTypesInRunTimeAssemblies(type =>
            {
                return(type.IsSubclassOf(typeof(EntityLogicBase)));
            });

            for (int i = 0; i < types.Count; i++)
            {
                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 标记!");
                }
            }
        }
        /// <summary>
        /// 初始化助手
        /// </summary>
        public void OnInitialization()
        {
            List <Type> types = ReflectionToolkit.GetTypesInRunTimeAssemblies(type =>
            {
                return(type.IsSubclassOf(typeof(CustomModuleBase)) && !type.IsAbstract);
            });

            for (int i = 0; i < types.Count; i++)
            {
                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();
            }
        }
Exemplo n.º 17
0
        protected override void OnInspectorDefaultGUI()
        {
            base.OnInspectorDefaultGUI();

            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 = ReflectionToolkit.GetTypesInRunTimeAssemblies(type =>
                    {
                        return(type == typeof(Debugger) || type.IsSubclassOf(typeof(Debugger)));
                    });
                    for (int i = 0; i < types.Count; i++)
                    {
                        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();
            }
        }
Exemplo n.º 18
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 = ReflectionToolkit.GetTypesInRunTimeAssemblies(type =>
                        {
                            return(type.IsSubclassOf(typeof(TaskContentBase)));
                        });
                        for (int i = 0; i < types.Count; i++)
                        {
                            Type   type                = types[i];
                            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;
                            }
                        }
                    }
                };
            }
        }
Exemplo n.º 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 = ReflectionToolkit.GetTypesInRunTimeAssemblies(type =>
                        {
                            return(type.IsSubclassOf(typeof(TaskPointBase)));
                        });
                        for (int i = 0; i < types.Count; i++)
                        {
                            Type               type        = types[i];
                            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);
                            });
                        }
                        StringToolkit.BeginNoRepeatNaming();
                        for (int i = 0; i < _currentContent.Points.Count; i++)
                        {
                            TaskPointBase point = _currentContent.Points[i];
                            gm.AddItem(new GUIContent(StringToolkit.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);
                }
            }
        }
Exemplo n.º 20
0
        protected override void OnInspectorDefaultGUI()
        {
            base.OnInspectorDefaultGUI();

            GUI.enabled = !EditorApplication.isPlaying;

            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(EditorGlobalTools.Styles.Box);

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

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

                GUILayout.BeginHorizontal();
                GUILayout.Label("Type", GUILayout.Width(40));
                if (GUILayout.Button(Target.DefineUINames[i], EditorGlobalTools.Styles.MiniPopup))
                {
                    GenericMenu gm    = new GenericMenu();
                    List <Type> types = ReflectionToolkit.GetTypesInRunTimeAssemblies(type =>
                    {
                        return(type.IsSubclassOf(typeof(UILogicBase)) && !type.IsAbstract);
                    });
                    for (int m = 0; m < types.Count; m++)
                    {
                        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();
                }
                GUI.backgroundColor = Color.red;
                if (GUILayout.Button("Delete", EditorStyles.miniButton, GUILayout.Width(50)))
                {
                    Undo.RecordObject(target, "Delete Define UI");
                    Target.DefineUINames.RemoveAt(i);
                    Target.DefineUIEntitys.RemoveAt(i);
                    HasChanged();
                    continue;
                }
                GUI.backgroundColor = Color.white;
                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", EditorStyles.miniButton))
            {
                Undo.RecordObject(target, "New Define UI");
                Target.DefineUINames.Add("<None>");
                Target.DefineUIEntitys.Add(null);
                HasChanged();
            }
            GUILayout.EndHorizontal();

            GUILayout.EndVertical();

            GUI.enabled = true;
        }
Exemplo n.º 21
0
        /// <summary>
        /// 初始化助手
        /// </summary>
        public void OnInitialization()
        {
            _module = Module as UIManager;

            for (int i = 0; i < _module.DefineUINames.Count; i++)
            {
                if (!_defineUIAndEntitys.ContainsKey(_module.DefineUINames[i]))
                {
                    _defineUIAndEntitys.Add(_module.DefineUINames[i], _module.DefineUIEntitys[i]);
                }
            }

            _UIEntity              = _module.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");
            _maskPanel             = _overlayUIRoot.FindChildren("MaskPanel");
            UICamera = _UIEntity.GetComponentByChild <Camera>("UICamera");

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

            //创建所有UI的逻辑对象
            List <Type> types = ReflectionToolkit.GetTypesInRunTimeAssemblies(type =>
            {
                return((type.IsSubclassOf(typeof(UILogicResident)) || type.IsSubclassOf(typeof(UILogicTemporary))) && !type.IsAbstract);
            });

            for (int i = 0; i < types.Count; i++)
            {
                UIResourceAttribute attribute = types[i].GetCustomAttribute <UIResourceAttribute>();
                if (attribute != null)
                {
                    switch (attribute.EntityType)
                    {
                    case UIType.Overlay:
                        if (_module.IsEnableOverlayUI)
                        {
                            OverlayUIs.Add(types[i], Activator.CreateInstance(types[i]) as UILogicBase);
                        }
                        break;

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

                    case UIType.World:
                        if (_module.IsEnableWorldUI)
                        {
                            if (!WorldUIs.ContainsKey(attribute.WorldUIDomainName))
                            {
                                WorldUIs.Add(attribute.WorldUIDomainName, new UIWorldDomain(attribute.WorldUIDomainName, _worldUIRoot.FindChildren("CanvasTem")));
                            }
                            WorldUIs[attribute.WorldUIDomainName].Injection(types[i]);
                        }
                        break;
                    }
                }
                else
                {
                    throw new HTFrameworkException(HTFrameworkModule.UI, "创建UI逻辑对象失败:UI逻辑类 " + types[i].Name + " 丢失 UIResourceAttribute 标记!");
                }
            }
        }
        protected override void OnDefaultEnable()
        {
            base.OnDefaultEnable();

            if (Targets.Length > 1)
            {
                return;
            }

            _stateGC           = new GUIContent();
            _stateGC.image     = EditorGUIUtility.IconContent("AnimatorState Icon").image;
            _addGC             = new GUIContent();
            _addGC.image       = EditorGUIUtility.IconContent("d_Toolbar Plus More").image;
            _addGC.tooltip     = "Add a new state";
            _removeGC          = new GUIContent();
            _removeGC.image    = EditorGUIUtility.IconContent("d_Toolbar Minus").image;
            _removeGC.tooltip  = "Remove select state";
            _defaultGC         = new GUIContent();
            _defaultGC.image   = EditorGUIUtility.IconContent("TimelineEditModeRippleON").image;
            _defaultGC.tooltip = "Default state";
            _finalGC           = new GUIContent();
            _finalGC.image     = EditorGUIUtility.IconContent("TimelineEditModeReplaceON").image;
            _finalGC.tooltip   = "Final state";
            _editGC            = new GUIContent();
            _editGC.image      = EditorGUIUtility.IconContent("d_editicon.sml").image;
            _editGC.tooltip    = "Edit state script";

            _states    = GetProperty("States");
            _stateList = new ReorderableList(serializedObject, _states, true, true, false, false);
            _stateList.drawHeaderCallback = (Rect rect) =>
            {
                Rect sub = rect;
                sub.Set(rect.x, rect.y, 200, rect.height);
                GUI.Label(sub, "Enabled States:");

                if (!EditorApplication.isPlaying)
                {
                    sub.Set(rect.x + rect.width - 40, rect.y - 2, 20, 20);
                    if (GUI.Button(sub, _addGC, "InvisibleButton"))
                    {
                        GenericMenu gm    = new GenericMenu();
                        List <Type> types = ReflectionToolkit.GetTypesInRunTimeAssemblies(type =>
                        {
                            return(type.IsSubclassOf(typeof(FiniteStateBase)) && !type.IsAbstract);
                        });
                        for (int i = 0; i < types.Count; i++)
                        {
                            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);
                                    if (string.IsNullOrEmpty(Target.DefaultState))
                                    {
                                        Target.DefaultState = Target.States[0];
                                    }
                                    if (string.IsNullOrEmpty(Target.FinalState))
                                    {
                                        Target.FinalState = Target.States[0];
                                    }
                                    HasChanged();
                                });
                            }
                        }
                        gm.ShowAsContext();
                    }

                    sub.Set(rect.x + rect.width - 20, rect.y - 2, 20, 20);
                    GUI.enabled = _stateList.index >= 0 && _stateList.index < Target.States.Count;
                    if (GUI.Button(sub, _removeGC, "InvisibleButton"))
                    {
                        Undo.RecordObject(target, "Delete FSM State");

                        if (Target.DefaultState == Target.States[_stateList.index])
                        {
                            Target.DefaultState = null;
                        }
                        if (Target.FinalState == Target.States[_stateList.index])
                        {
                            Target.FinalState = null;
                        }

                        Target.States.RemoveAt(_stateList.index);

                        if (string.IsNullOrEmpty(Target.DefaultState) && Target.States.Count > 0)
                        {
                            Target.DefaultState = Target.States[0];
                        }
                        if (string.IsNullOrEmpty(Target.FinalState) && Target.States.Count > 0)
                        {
                            Target.FinalState = Target.States[0];
                        }

                        HasChanged();
                    }
                    GUI.enabled = true;
                }
            };
            _stateList.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) =>
            {
                if (index >= 0 && index < Target.States.Count)
                {
                    SerializedProperty property  = _states.GetArrayElementAtIndex(index);
                    string             stateType = property.stringValue;
                    if (!_stateNames.ContainsKey(stateType))
                    {
                        Type type = ReflectionToolkit.GetTypeInRunTimeAssemblies(stateType);
                        if (type != null)
                        {
                            string stateName = type.FullName;
                            FiniteStateNameAttribute fsmAtt = type.GetCustomAttribute <FiniteStateNameAttribute>();
                            if (fsmAtt != null)
                            {
                                stateName = fsmAtt.Name;
                            }
                            _stateNames.Add(stateType, stateName);
                        }
                        else
                        {
                            _stateNames.Add(stateType, "<Missing>");
                        }
                    }

                    Rect subrect = rect;
                    subrect.Set(rect.x, rect.y + 2, rect.width, 16);
                    _stateGC.text = _stateNames[stateType];
                    GUI.color     = _stateGC.text != "<Missing>" ? Color.white : Color.red;
                    GUI.Label(subrect, _stateGC);
                    GUI.color = Color.white;

                    int size = 20;
                    if (Target.FinalState == stateType)
                    {
                        subrect.Set(rect.x + rect.width - size, rect.y + 2, 20, 16);
                        if (GUI.Button(subrect, _finalGC, "InvisibleButton"))
                        {
                            GenericMenu gm = new GenericMenu();
                            foreach (var state in _stateNames)
                            {
                                gm.AddItem(new GUIContent(state.Value), Target.FinalState == state.Key, () =>
                                {
                                    Undo.RecordObject(target, "Set FSM Final State");
                                    Target.FinalState = state.Key;
                                    HasChanged();
                                });
                            }
                            gm.ShowAsContext();
                        }
                        size += 20;
                    }
                    if (Target.DefaultState == stateType)
                    {
                        subrect.Set(rect.x + rect.width - size, rect.y + 2, 20, 16);
                        if (GUI.Button(subrect, _defaultGC, "InvisibleButton"))
                        {
                            GenericMenu gm = new GenericMenu();
                            foreach (var state in _stateNames)
                            {
                                gm.AddItem(new GUIContent(state.Value), Target.DefaultState == state.Key, () =>
                                {
                                    Undo.RecordObject(target, "Set FSM Default State");
                                    Target.DefaultState = state.Key;
                                    HasChanged();
                                });
                            }
                            gm.ShowAsContext();
                        }
                        size += 20;
                    }
                    if (isActive && isFocused)
                    {
                        subrect.Set(rect.x + rect.width - size, rect.y, 20, 20);
                        if (GUI.Button(subrect, _editGC, "InvisibleButton"))
                        {
                            MonoScriptToolkit.OpenMonoScript(stateType);
                        }
                        size += 20;
                    }
                }
            };
            _stateList.drawElementBackgroundCallback = (Rect rect, int index, bool isActive, bool isFocused) =>
            {
                if (Event.current.type == EventType.Repaint)
                {
                    GUIStyle gUIStyle = (index % 2 != 0) ? "CN EntryBackEven" : "CN EntryBackodd";
                    gUIStyle    = (!isActive && !isFocused) ? gUIStyle : "RL Element";
                    rect.x     += 2;
                    rect.width -= 6;
                    gUIStyle.Draw(rect, false, isActive, isActive, isFocused);
                }
            };
            _stateNames = new Dictionary <string, string>();

            if (Target.Args == null)
            {
                FSMArgsBase args = Target.GetComponent <FSMArgsBase>();
                if (args != null)
                {
                    Target.Args = args;
                    HasChanged();
                }
            }
            if (Target.Args != null)
            {
                Target.Args.hideFlags = HideFlags.HideInHierarchy | HideFlags.HideInInspector;
            }
        }
Exemplo n.º 23
0
        protected override void OnInspectorDefaultGUI()
        {
            base.OnInspectorDefaultGUI();

            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", EditorGlobalTools.Styles.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();

            GUILayout.BeginVertical(EditorGlobalTools.Styles.Box);

            GUILayout.BeginHorizontal();
            GUILayout.Label("Enabled Procedures:");
            GUILayout.FlexibleSpace();
            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("▲", EditorStyles.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("▼", EditorStyles.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", EditorStyles.miniButtonMid))
                {
                    MonoScriptToolkit.OpenMonoScript(Target.ActivatedProcedures[i]);
                }
                if (GUILayout.Button("Delete", EditorStyles.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", EditorGlobalTools.Styles.MiniPopup))
            {
                GenericMenu gm    = new GenericMenu();
                List <Type> types = ReflectionToolkit.GetTypesInRunTimeAssemblies(type =>
                {
                    return(type.IsSubclassOf(typeof(ProcedureBase)));
                });
                for (int i = 0; i < types.Count; i++)
                {
                    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();

            GUILayout.EndVertical();
        }
        private void OnArgsGUI()
        {
            GUILayout.BeginHorizontal();
            GUILayout.Label("Args", GUILayout.Width(LabelWidth));
            string argsName = Target.Args != null?Target.Args.GetType().FullName : "<None>";

            if (GUILayout.Button(argsName, EditorStyles.popup, GUILayout.Width(EditorGUIUtility.currentViewWidth - LabelWidth - 25)))
            {
                GenericMenu gm = new GenericMenu();
                gm.AddItem(new GUIContent("<None>"), Target.Args == null, () =>
                {
                    if (_argsEditor != null)
                    {
                        DestroyImmediate(_argsEditor);
                        _argsEditor = null;
                    }
                    if (Target.Args != null)
                    {
                        Undo.DestroyObjectImmediate(Target.Args);
                        Target.Args = null;
                        HasChanged();
                    }
                });
                gm.AddItem(new GUIContent("<New Args Script>"), false, () =>
                {
                    EditorGlobalTools.CreateScriptFormTemplate(EditorPrefsTable.Script_FSMArgs_Folder, "FSMArgs", "FSMArgsTemplate");
                });
                gm.AddSeparator("");
                Type argsType = Target.Args != null?Target.Args.GetType() : null;

                List <Type> types = ReflectionToolkit.GetTypesInRunTimeAssemblies(type =>
                {
                    return(type.IsSubclassOf(typeof(FSMArgsBase)) && !type.IsAbstract);
                });
                for (int i = 0; i < types.Count; i++)
                {
                    int j = i;
                    gm.AddItem(new GUIContent(types[j].FullName), argsType == types[j], () =>
                    {
                        if (argsType != types[j])
                        {
                            if (_argsEditor != null)
                            {
                                DestroyImmediate(_argsEditor);
                                _argsEditor = null;
                            }
                            if (Target.Args != null)
                            {
                                Undo.DestroyObjectImmediate(Target.Args);
                                Target.Args = null;
                                HasChanged();
                            }

                            Target.Args           = Undo.AddComponent(Target.gameObject, types[j]) as FSMArgsBase;
                            Target.Args.hideFlags = HideFlags.HideInHierarchy | HideFlags.HideInInspector;
                            HasChanged();
                        }
                    });
                }
                gm.ShowAsContext();
            }
            GUILayout.EndHorizontal();

            if (Target.Args != null)
            {
                if (_argsEditor == null)
                {
                    _argsEditor = CreateEditor(Target.Args);
                }

                GUILayout.BeginVertical("Icon.InfiniteTrack");
                GUILayout.Space(5);

                _argsEditor.OnInspectorGUI();

                GUILayout.Space(5);
                GUILayout.EndVertical();
            }
        }
Exemplo n.º 25
0
        protected override void OnInspectorDefaultGUI()
        {
            base.OnInspectorDefaultGUI();

            GUILayout.BeginHorizontal();
            EditorGUILayout.HelpBox("Finite state machine!", MessageType.Info);
            GUILayout.EndHorizontal();

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

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

            GUILayout.BeginHorizontal();
            TextField(Target.Group, out Target.Group, "Group");
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUI.color = Target.Data == "<None>" ? Color.gray : Color.white;
            GUILayout.Label("Data", GUILayout.Width(60));
            if (GUILayout.Button(Target.Data, EditorGlobalTools.Styles.MiniPopup))
            {
                GenericMenu gm = new GenericMenu();
                gm.AddItem(new GUIContent("<None>"), Target.Data == "<None>", () =>
                {
                    Undo.RecordObject(target, "Set FSM Data Class");
                    Target.Data = "<None>";
                    HasChanged();
                });
                List <Type> types = ReflectionToolkit.GetTypesInRunTimeAssemblies(type =>
                {
                    return(type.IsSubclassOf(typeof(FSMDataBase)) && !type.IsAbstract);
                });
                for (int i = 0; i < types.Count; i++)
                {
                    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();
            }
            GUI.color = Color.white;
            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", EditorGlobalTools.Styles.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();

            GUILayout.BeginHorizontal();
            GUI.enabled = Target.FinalStateName != "";
            GUILayout.Label("Final: " + Target.FinalStateName);
            GUI.enabled = true;
            GUILayout.FlexibleSpace();
            GUI.enabled = Target.StateNames.Count > 0;
            if (GUILayout.Button("Set Final", EditorGlobalTools.Styles.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.FinalStateName == Target.StateNames[j], () =>
                    {
                        Undo.RecordObject(target, "Set FSM Final State");
                        Target.FinalState     = Target.States[j];
                        Target.FinalStateName = Target.StateNames[j];
                        HasChanged();
                    });
                }
                gm.ShowAsContext();
            }
            GUI.enabled = true;
            GUILayout.EndHorizontal();

            GUILayout.BeginVertical(EditorGlobalTools.Styles.Box);

            GUILayout.BeginHorizontal();
            GUILayout.Label("Enabled State:");
            GUILayout.FlexibleSpace();
            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", EditorStyles.miniButtonLeft))
                {
                    MonoScriptToolkit.OpenMonoScript(Target.States[i]);
                }
                if (GUILayout.Button("Delete", EditorStyles.miniButtonRight))
                {
                    Undo.RecordObject(target, "Delete FSM State");

                    if (Target.DefaultStateName == Target.StateNames[i])
                    {
                        Target.DefaultState     = "";
                        Target.DefaultStateName = "";
                    }
                    if (Target.FinalStateName == Target.StateNames[i])
                    {
                        Target.FinalState     = "";
                        Target.FinalStateName = "";
                    }

                    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];
                    }
                    if (Target.FinalStateName == "" && Target.StateNames.Count > 0)
                    {
                        Target.FinalState     = Target.States[0];
                        Target.FinalStateName = Target.StateNames[0];
                    }

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

            GUILayout.BeginHorizontal();
            if (GUILayout.Button("Add State", EditorGlobalTools.Styles.MiniPopup))
            {
                GenericMenu gm    = new GenericMenu();
                List <Type> types = ReflectionToolkit.GetTypesInRunTimeAssemblies(type =>
                {
                    return(type.IsSubclassOf(typeof(FiniteStateBase)) && !type.IsAbstract);
                });
                for (int i = 0; i < types.Count; i++)
                {
                    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];
                            }
                            if (Target.FinalStateName == "")
                            {
                                Target.FinalState     = Target.States[0];
                                Target.FinalStateName = Target.StateNames[0];
                            }
                            HasChanged();
                        });
                    }
                }
                gm.ShowAsContext();
            }
            GUILayout.EndHorizontal();

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

            _addGC            = new GUIContent();
            _addGC.image      = EditorGUIUtility.IconContent("d_Toolbar Plus More").image;
            _addGC.tooltip    = "Add a new channel";
            _removeGC         = new GUIContent();
            _removeGC.image   = EditorGUIUtility.IconContent("d_Toolbar Minus").image;
            _removeGC.tooltip = "Remove select channel";
            _editGC           = new GUIContent();
            _editGC.image     = EditorGUIUtility.IconContent("d_editicon.sml").image;
            _editGC.tooltip   = "Edit channel script";

            _channelTypes    = GetProperty("ChannelTypes");
            _channelTypeList = new ReorderableList(serializedObject, _channelTypes, true, true, false, false);
            _channelTypeList.drawHeaderCallback = (Rect rect) =>
            {
                Rect sub = rect;
                sub.Set(rect.x, rect.y, 200, rect.height);
                GUI.Label(sub, "Enabled Channels:");

                if (!EditorApplication.isPlaying)
                {
                    sub.Set(rect.x + rect.width - 40, rect.y - 2, 20, 20);
                    if (GUI.Button(sub, _addGC, "InvisibleButton"))
                    {
                        GenericMenu gm    = new GenericMenu();
                        List <Type> types = ReflectionToolkit.GetTypesInRunTimeAssemblies(type =>
                        {
                            return(type.IsSubclassOf(typeof(ProtocolChannelBase)) && !type.IsAbstract);
                        });
                        for (int i = 0; i < types.Count; i++)
                        {
                            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();
                    }

                    sub.Set(rect.x + rect.width - 20, rect.y - 2, 20, 20);
                    GUI.enabled = _channelTypeList.index >= 0 && _channelTypeList.index < Target.ChannelTypes.Count;
                    if (GUI.Button(sub, _removeGC, "InvisibleButton"))
                    {
                        Undo.RecordObject(target, "Delete Channel");
                        Target.ChannelTypes.RemoveAt(_channelTypeList.index);
                        HasChanged();
                    }
                    GUI.enabled = true;
                }
            };
            _channelTypeList.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) =>
            {
                if (index >= 0 && index < Target.ChannelTypes.Count)
                {
                    Rect subrect = rect;
                    subrect.Set(rect.x, rect.y + 2, rect.width, 16);
                    GUI.Label(subrect, Target.ChannelTypes[index]);

                    int size = 20;
                    if (isActive && isFocused)
                    {
                        subrect.Set(rect.x + rect.width - size, rect.y, 20, 20);
                        if (GUI.Button(subrect, _editGC, "InvisibleButton"))
                        {
                            MonoScriptToolkit.OpenMonoScript(Target.ChannelTypes[index]);
                        }
                        size += 20;
                    }
                }
            };
            _channelTypeList.drawElementBackgroundCallback = (Rect rect, int index, bool isActive, bool isFocused) =>
            {
                if (Event.current.type == EventType.Repaint)
                {
                    GUIStyle gUIStyle = (index % 2 != 0) ? "CN EntryBackEven" : "CN EntryBackodd";
                    gUIStyle    = (!isActive && !isFocused) ? gUIStyle : "RL Element";
                    rect.x     += 2;
                    rect.width -= 6;
                    gUIStyle.Draw(rect, false, isActive, isActive, isFocused);
                }
            };
        }
Exemplo n.º 27
0
        protected override void OnInspectorDefaultGUI()
        {
            base.OnInspectorDefaultGUI();

            GUI.enabled = !EditorApplication.isPlaying;

            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("Edit", EditorStyles.miniButtonLeft))
                {
                    MonoScriptToolkit.OpenMonoScript(Target.ChannelTypes[i]);
                }
                if (GUILayout.Button("Delete", EditorStyles.miniButtonRight))
                {
                    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 = ReflectionToolkit.GetTypesInRunTimeAssemblies(type =>
                {
                    return(type.IsSubclassOf(typeof(ProtocolChannelBase)));
                });
                for (int i = 0; i < types.Count; i++)
                {
                    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();

            GUI.enabled = true;
        }
Exemplo n.º 28
0
        /// <summary>
        /// 任务点GUI事件处理
        /// </summary>
        private void OnPointEventHandle()
        {
            if (_currentContent != null && Event.current != null)
            {
                Vector2 pos = Event.current.mousePosition;

                switch (Event.current.type)
                {
                case EventType.MouseDown:
                    if (Event.current.button == 1)
                    {
                        GenericMenu gm = new GenericMenu();
                        gm.AddItem(new GUIContent(GetWord("Add Task Point") + "/默认"), false, () =>
                        {
                            AddPoint(_currentContent, typeof(TaskPointDefault), pos);
                        });
                        List <Type> types = ReflectionToolkit.GetTypesInRunTimeAssemblies(type =>
                        {
                            return(type.IsSubclassOf(typeof(TaskPointBase)) && !type.IsAbstract && type != typeof(TaskPointDefault));
                        });
                        for (int i = 0; i < types.Count; i++)
                        {
                            Type               type      = types[i];
                            string             pointName = type.FullName;
                            TaskPointAttribute attribute = type.GetCustomAttribute <TaskPointAttribute>();
                            if (attribute != null)
                            {
                                pointName = attribute.Name;
                            }
                            gm.AddItem(new GUIContent(GetWord("Add Task Point") + "/" + pointName), false, () =>
                            {
                                AddPoint(_currentContent, type, pos);
                            });
                        }
                        StringToolkit.BeginNoRepeatNaming();
                        for (int i = 0; i < _currentContent.Points.Count; i++)
                        {
                            TaskPointBase point = _currentContent.Points[i];
                            gm.AddItem(new GUIContent(StringToolkit.GetNoRepeatName(GetWord("Find Task Point") + "/" + point.Name)), false, () =>
                            {
                                FindPoint(point);
                            });
                        }
                        gm.AddSeparator("");
                        CopyTaskPoint(gm);
                        PasteTaskPoint(gm, pos);
                        gm.AddSeparator("");
                        gm.AddItem(new GUIContent(GetWord("Collapse All")), false, () =>
                        {
                            for (int i = 0; i < _currentContent.Points.Count; i++)
                            {
                                TaskPointBase point = _currentContent.Points[i];
                                point.IsExpand      = false;
                            }
                            GUI.changed = true;
                        });
                        gm.AddItem(new GUIContent(GetWord("Expand All")), false, () =>
                        {
                            for (int i = 0; i < _currentContent.Points.Count; i++)
                            {
                                TaskPointBase point = _currentContent.Points[i];
                                point.IsExpand      = true;
                            }
                            GUI.changed = true;
                        });
                        gm.AddSeparator("");
                        gm.AddItem(new GUIContent(GetWord("Enable All")), false, () =>
                        {
                            for (int i = 0; i < _currentContent.Points.Count; i++)
                            {
                                TaskPointBase point = _currentContent.Points[i];
                                point.IsEnable      = true;
                            }
                            GUI.changed = true;
                        });
                        gm.AddItem(new GUIContent(GetWord("Disable All")), false, () =>
                        {
                            for (int i = 0; i < _currentContent.Points.Count; i++)
                            {
                                TaskPointBase point = _currentContent.Points[i];
                                point.IsEnable      = false;
                            }
                            GUI.changed = true;
                        });
                        gm.AddSeparator("");
                        gm.AddItem(new GUIContent(GetWord("<New Task Point Script>")), false, () =>
                        {
                            NewTaskPointScript();
                        });
                        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;

                case EventType.KeyDown:
                    switch (Event.current.keyCode)
                    {
                    case KeyCode.LeftAlt:
                    case KeyCode.RightAlt:
                        _isBreakDepend = true;
                        GUI.changed    = true;
                        break;
                    }
                    break;

                case EventType.KeyUp:
                    switch (Event.current.keyCode)
                    {
                    case KeyCode.LeftAlt:
                    case KeyCode.RightAlt:
                        _isBreakDepend = false;
                        GUI.changed    = true;
                        break;
                    }
                    break;
                }

                for (int i = 0; i < _currentContent.Points.Count; i++)
                {
                    _currentContent.Points[i].OnPointEventHandle(Event.current, _contentAsset, _currentContent, _getWord);
                }
            }
        }
Exemplo n.º 29
0
        protected override void OnDefaultEnable()
        {
            base.OnDefaultEnable();

            _addGC            = new GUIContent();
            _addGC.image      = EditorGUIUtility.IconContent("d_Toolbar Plus More").image;
            _addGC.tooltip    = "Add a new define";
            _removeGC         = new GUIContent();
            _removeGC.image   = EditorGUIUtility.IconContent("d_Toolbar Minus").image;
            _removeGC.tooltip = "Remove select define";

            _entityList = new ReorderableList(Target.DefineEntityNames, typeof(string), true, true, false, false);
            _entityList.elementHeight      = 45;
            _entityList.drawHeaderCallback = (Rect rect) =>
            {
                Rect sub = rect;
                sub.Set(rect.x, rect.y, 200, rect.height);
                GUI.Label(sub, "Define Entity:");

                if (!EditorApplication.isPlaying)
                {
                    sub.Set(rect.x + rect.width - 40, rect.y - 2, 20, 20);
                    if (GUI.Button(sub, _addGC, "InvisibleButton"))
                    {
                        Target.DefineEntityNames.Add("<None>");
                        Target.DefineEntityTargets.Add(null);
                        HasChanged();
                    }

                    sub.Set(rect.x + rect.width - 20, rect.y - 2, 20, 20);
                    GUI.enabled = _entityList.index >= 0 && _entityList.index < Target.DefineEntityNames.Count;
                    if (GUI.Button(sub, _removeGC, "InvisibleButton"))
                    {
                        Target.DefineEntityNames.RemoveAt(_entityList.index);
                        Target.DefineEntityTargets.RemoveAt(_entityList.index);
                        HasChanged();
                    }
                    GUI.enabled = true;
                }
            };
            _entityList.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) =>
            {
                if (index >= 0 && index < Target.DefineEntityNames.Count)
                {
                    Rect subrect = rect;

                    subrect.Set(rect.x, rect.y + 2, 50, 16);
                    GUI.Label(subrect, "Type");
                    if (isActive)
                    {
                        subrect.Set(rect.x + 50, rect.y + 2, rect.width - 50, 16);
                        if (GUI.Button(subrect, Target.DefineEntityNames[index], EditorGlobalTools.Styles.MiniPopup))
                        {
                            GenericMenu gm    = new GenericMenu();
                            List <Type> types = ReflectionToolkit.GetTypesInRunTimeAssemblies(type =>
                            {
                                return(type.IsSubclassOf(typeof(EntityLogicBase)) && !type.IsAbstract);
                            });
                            for (int m = 0; m < types.Count; m++)
                            {
                                int j = index;
                                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, () =>
                                    {
                                        Target.DefineEntityNames[j] = types[n].FullName;
                                        HasChanged();
                                    });
                                }
                            }
                            gm.ShowAsContext();
                        }
                    }
                    else
                    {
                        subrect.Set(rect.x + 50, rect.y + 2, rect.width - 50, 16);
                        GUI.Label(subrect, Target.DefineEntityNames[index]);
                    }

                    subrect.Set(rect.x, rect.y + 22, 50, 16);
                    GUI.Label(subrect, "Entity");
                    subrect.Set(rect.x + 50, rect.y + 22, rect.width - 50, 16);
                    GameObject entity = EditorGUI.ObjectField(subrect, Target.DefineEntityTargets[index], typeof(GameObject), false) as GameObject;
                    if (entity != Target.DefineEntityTargets[index])
                    {
                        Target.DefineEntityTargets[index] = entity;
                        HasChanged();
                    }
                }
            };
            _entityList.drawElementBackgroundCallback = (Rect rect, int index, bool isActive, bool isFocused) =>
            {
                if (Event.current.type == EventType.Repaint)
                {
                    GUIStyle gUIStyle = (index % 2 != 0) ? "CN EntryBackEven" : "CN EntryBackodd";
                    gUIStyle    = (!isActive && !isFocused) ? gUIStyle : "RL Element";
                    rect.x     += 2;
                    rect.width -= 6;
                    gUIStyle.Draw(rect, false, isActive, isActive, isFocused);
                }
            };
            _entityList.onReorderCallbackWithDetails = (ReorderableList list, int oldIndex, int newIndex) =>
            {
                GameObject entity = Target.DefineEntityTargets[oldIndex];
                Target.DefineEntityTargets.RemoveAt(oldIndex);
                Target.DefineEntityTargets.Insert(newIndex, entity);
                HasChanged();
            };
        }