internal static void BuildConfigMenus(RectTransform parent)
        {
            ConfigMenus.Clear();

            if (GadgetCoreAPI.GetUMFAPI() != null)
            {
                if (UMFConfigMenu == null || UMFConfigMenu.Item2 == null)
                {
                    UMFConfigMenu umfConfigMenu = new UMFConfigMenu();
                    RectTransform menuParent    = new GameObject("uModFramework", typeof(RectTransform)).GetComponent <RectTransform>();
                    menuParent.gameObject.SetActive(false);
                    menuParent.SetParent(parent);
                    menuParent.anchorMin = new Vector2(0f, 0f);
                    menuParent.anchorMax = new Vector2(1f, 1f);
                    menuParent.offsetMin = Vector2.zero;
                    menuParent.offsetMax = Vector2.zero;
                    umfConfigMenu.Build(menuParent);
                    UMFConfigMenu = Tuple.Create <IGadgetConfigMenu, RectTransform>(umfConfigMenu, menuParent);
                }
                else
                {
                    UMFConfigMenu.Item1.Reset();
                }
            }

            for (int i = 0; i < ModMenuController.modEntries.Count; i++)
            {
                ModMenuEntry entry = ModMenuController.modEntries[i];
                if (entry.Type == ModMenuEntryType.GADGET || entry.Type == ModMenuEntryType.UMF || entry.Type == ModMenuEntryType.DISABLED_UMF)
                {
                    try
                    {
                        GadgetInfo        gadgetForConfig = entry.Gadgets.FirstOrDefault(x => x.Attribute.Name == entry.Name);
                        IGadgetConfigMenu configMenu      = gadgetForConfig?.Gadget.GetConfigMenu();
                        if (configMenu != null)
                        {
                            RectTransform menuParent = new GameObject(entry.Name, typeof(RectTransform)).GetComponent <RectTransform>();
                            menuParent.gameObject.SetActive(false);
                            menuParent.SetParent(parent);
                            menuParent.anchorMin = new Vector2(0f, 0f);
                            menuParent.anchorMax = new Vector2(1f, 1f);
                            menuParent.offsetMin = Vector2.zero;
                            menuParent.offsetMax = Vector2.zero;
                            configMenu.Build(menuParent);
                            ConfigMenus.Add((i << 16) + 0xFFFF, Tuple.Create(configMenu, menuParent));
                        }
                        else
                        {
                            ConfigMenus.Add((i << 16) + 0xFFFF, null);
                        }
                    }
                    catch (InvalidOperationException e)
                    {
                        if (e.Message == INIGadgetConfigMenu.NO_CONFIGURABLE_DATA)
                        {
                            ConfigMenus.Add((i << 16) + 0xFFFF, null);
                        }
                        else
                        {
                            throw;
                        }
                    }

                    for (int g = 0; g < entry.Gadgets.Length; g++)
                    {
                        GadgetInfo gadget = entry.Gadgets[g];
                        try
                        {
                            IGadgetConfigMenu configMenu = gadget?.Gadget.GetConfigMenu();
                            if (configMenu != null)
                            {
                                RectTransform menuParent = new GameObject(gadget.Attribute.Name, typeof(RectTransform)).GetComponent <RectTransform>();
                                menuParent.gameObject.SetActive(false);
                                menuParent.SetParent(parent);
                                menuParent.anchorMin = new Vector2(0f, 0f);
                                menuParent.anchorMax = new Vector2(1f, 1f);
                                menuParent.offsetMin = Vector2.zero;
                                menuParent.offsetMax = Vector2.zero;
                                configMenu.Build(menuParent);
                                ConfigMenus.Add((i << 16) + g, Tuple.Create(configMenu, menuParent));
                            }
                            else
                            {
                                ConfigMenus.Add((i << 16) + g, null);
                            }
                        }
                        catch (InvalidOperationException e)
                        {
                            if (e.Message == INIGadgetConfigMenu.NO_CONFIGURABLE_DATA)
                            {
                                ConfigMenus.Add((i << 16) + g, null);
                            }
                            else
                            {
                                throw;
                            }
                        }
                    }
                }
            }
        }
Example #2
0
        internal static void BuildConfigMenus(RectTransform parent)
        {
            UMFConfigMenu umfConfigMenu = new UMFConfigMenu();

            if (umfConfigMenu != null)
            {
                RectTransform menuParent = new GameObject("uModFramework", typeof(RectTransform)).GetComponent <RectTransform>();
                menuParent.gameObject.SetActive(false);
                menuParent.SetParent(parent);
                menuParent.anchorMin = new Vector2(0f, 0f);
                menuParent.anchorMax = new Vector2(1f, 1f);
                menuParent.offsetMin = Vector2.zero;
                menuParent.offsetMax = Vector2.zero;
                umfConfigMenu.Build(menuParent);
                UMFConfigMenu = Tuple.Create <IGadgetConfigMenu, RectTransform>(umfConfigMenu, menuParent);
            }

            ConfigMenus = new List <Tuple <IGadgetConfigMenu, RectTransform> >();
            GadgetModInfo[] gadgetMods = GadgetMods.ListAllModInfos();
            string[]        allMods    = gadgetMods.Select(x => x.Attribute.Name).Concat(GadgetCore.nonGadgetMods).Concat(GadgetCore.disabledMods).Concat(GadgetCore.incompatibleMods).Concat(GadgetCore.packedMods).ToArray();
            for (int i = 0; i < allMods.Length; i++)
            {
                try
                {
                    if (i < gadgetMods.Length)
                    {
                        IGadgetConfigMenu configMenu = gadgetMods[i].Mod.GetConfigMenu();
                        if (configMenu != null)
                        {
                            RectTransform menuParent = new GameObject(allMods[i], typeof(RectTransform)).GetComponent <RectTransform>();
                            menuParent.gameObject.SetActive(false);
                            menuParent.SetParent(parent);
                            menuParent.anchorMin = new Vector2(0f, 0f);
                            menuParent.anchorMax = new Vector2(1f, 1f);
                            menuParent.offsetMin = Vector2.zero;
                            menuParent.offsetMax = Vector2.zero;
                            configMenu.Build(menuParent);
                            ConfigMenus.Add(Tuple.Create(configMenu, menuParent));
                        }
                        else
                        {
                            ConfigMenus.Add(null);
                        }
                    }
                    else
                    {
                        try
                        {
                            IGadgetConfigMenu configMenu = new UMFGadgetConfigMenu(allMods[i], false, Path.Combine(UMFData.ConfigsPath, allMods[i]) + ".ini");
                            if (configMenu != null)
                            {
                                RectTransform menuParent = new GameObject(allMods[i], typeof(RectTransform)).GetComponent <RectTransform>();
                                menuParent.gameObject.SetActive(false);
                                menuParent.SetParent(parent);
                                menuParent.anchorMin = new Vector2(0f, 0f);
                                menuParent.anchorMax = new Vector2(1f, 1f);
                                menuParent.offsetMin = Vector2.zero;
                                menuParent.offsetMax = Vector2.zero;
                                configMenu.Build(menuParent);
                                ConfigMenus.Add(Tuple.Create(configMenu, menuParent));
                            }
                            else
                            {
                                ConfigMenus.Add(null);
                            }
                        }
                        catch (InvalidOperationException e)
                        {
                            if (e.Message == UMFGadgetConfigMenu.NO_CONFIGURABLE_DATA)
                            {
                                ConfigMenus.Add(null);
                            }
                            else
                            {
                                throw;
                            }
                        }
                    }
                }
                catch
                {
                    ConfigMenus.Add(null);
                    throw;
                }
            }
        }