예제 #1
0
            private static Menu GetMenu(DebugMenuAttribute item, out string name)
            {
                if (string.IsNullOrEmpty(item.Path))
                {
                    name = null;
                    return(_rootMenu);
                }
                else
                {
                    string[] menus = item.Path.Split('/');
                    Menu     menu  = _rootMenu;

                    for (int i = 0; i < menus.Length - 1; i++)
                    {
                        menu = FindOrAddMenu(menu, menus[i]);
                    }

                    name = menus[menus.Length - 1];

                    return(menu);
                }
            }
예제 #2
0
            private static void AddField(DebugMenuAttribute item, FieldInfo field)
            {
                Menu menu = GetMenu(item, out string name);

                menu._items.Add(new MenuItemField(string.IsNullOrEmpty(name) ? field.Name : name, field));
            }
예제 #3
0
            private static void AddProperty(DebugMenuAttribute item, PropertyInfo property)
            {
                Menu menu = GetMenu(item, out string name);

                menu._items.Add(new MenuItemProperty(string.IsNullOrEmpty(name) ? property.Name : name, property));
            }
예제 #4
0
            private static void AddFunction(DebugMenuAttribute item, MethodInfo method)
            {
                Menu menu = GetMenu(item, out string name);

                menu._items.Add(new MenuItemFunction(string.IsNullOrEmpty(name) ? method.Name : name, method));
            }
예제 #5
0
            private static void BuildMenus()
            {
                _rootMenu = new Menu("Debug Menu");
                _rootMenu._items.Add(new MenuItemExit());

                Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();

                for (int i = 0; i < assemblies.Length; i++)
                {
                    if (assemblies[i].ReflectionOnly)
                    {
                        continue;
                    }

                    Type[] types = null;

                    try
                    {
                        types = assemblies[i].GetTypes();
                    }
                    catch
                    {
                        continue;
                    }

                    foreach (Type type in types)
                    {
                        //Check all methods for static paramterless functions marked with attribute
                        MethodInfo[] methods = type.GetMethods(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);

                        foreach (MethodInfo method in methods)
                        {
                            if (method.GetParameters().Length == 0)
                            {
                                DebugMenuAttribute item = SystemUtils.GetAttribute <DebugMenuAttribute>(method);

                                if (item != null)
                                {
                                    AddFunction(item, method);
                                }
                            }
                        }

                        PropertyInfo[] properties = type.GetProperties(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);

                        foreach (PropertyInfo property in properties)
                        {
                            DebugMenuAttribute item = SystemUtils.GetAttribute <DebugMenuAttribute>(property);

                            if (item != null)
                            {
                                AddProperty(item, property);
                            }
                        }

                        FieldInfo[] fields = type.GetFields(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);

                        foreach (FieldInfo field in fields)
                        {
                            DebugMenuAttribute item = SystemUtils.GetAttribute <DebugMenuAttribute>(field);

                            if (item != null)
                            {
                                AddField(item, field);
                            }
                        }
                    }
                }
            }