From 542bf72ece0b11e4d8330a7e4d444b89e147cc92 Mon Sep 17 00:00:00 2001 From: neilmjain <69025896+neilmjain@users.noreply.github.com> Date: Wed, 14 Oct 2026 20:45:01 -0400 Subject: [PATCH] Sort Pages by Priority of menus and groups --- MiraAPI/Utilities/GuideOptionsPatches.cs | 61 ++++++++++++++---------- 1 file changed, 35 insertions(+), 26 deletions(-) diff --git a/MiraAPI/Utilities/GuideOptionsPatches.cs b/MiraAPI/Utilities/GuideOptionsPatches.cs index 0e22103..3ae9f0e 100644 --- a/MiraAPI/Utilities/GuideOptionsPatches.cs +++ b/MiraAPI/Utilities/GuideOptionsPatches.cs @@ -32,45 +32,54 @@ internal static class GuideOptionPages var pages = new List(); var mode = CustomGameModeManager.ActiveMode; - // Same plugin set the in-game options menu lists (skips mods that hide themselves from it). - foreach (var plugin in MiraPluginManager.Instance.PluginsWithOptionsOrGameModes - .OrderBy(p => p.MiraPlugin.GetAbbreviatedModName(), StringComparer.OrdinalIgnoreCase)) + var groups = MiraPluginManager.Instance.PluginsWithOptionsOrGameModes + .SelectMany(plugin => plugin.InternalOptionGroups + .Where(group => group.ShowInMatchInfoGuide && IsSettingsGroup(group, mode) && SafeGroupVisible(group)) + .Select(group => (Group: group, ModAbbreviation: plugin.MiraPlugin.GetAbbreviatedModName()))) + .OrderBy(item => GetMenuOrder(item.Group.ParentMenu)) + .ThenBy(item => item.Group.GroupPriority) + .ThenBy(item => item.Group.GroupName, StringComparer.OrdinalIgnoreCase) + .ThenBy(item => item.ModAbbreviation, StringComparer.OrdinalIgnoreCase); + + foreach (var item in groups) { - var modAbbreviation = plugin.MiraPlugin.GetAbbreviatedModName(); + var groupName = item.Group.GroupName.Translate(); + var entries = new List(); - var groups = plugin.InternalOptionGroups - .Where(g => IsSettingsGroup(g, mode) && SafeGroupVisible(g)) - .OrderBy(g => g.GroupPriority) - .ThenBy(g => g.GroupName, StringComparer.OrdinalIgnoreCase); - - foreach (var group in groups) + foreach (var option in item.Group.Options) { - var groupName = group.GroupName.Translate(); - var entries = new List(); - - foreach (var option in group.Options) + if (!SafeOptionVisible(option)) { - if (!SafeOptionVisible(option)) - { - continue; - } - - var entry = TryCreateEntry(option, groupName, modAbbreviation, formatBool); - if (entry != null) - { - entries.Add(entry); - } + continue; } - if (entries.Count > 0) + var entry = TryCreateEntry(option, groupName, item.ModAbbreviation, formatBool); + if (entry != null) { - pages.Add(new GuideOptionPage(group, modAbbreviation, entries)); + entries.Add(entry); } } + + if (entries.Count > 0) + { + pages.Add(new GuideOptionPage(item.Group, item.ModAbbreviation, entries)); + } } return pages; } + + private static int GetMenuOrder(MenuCategory menu) + { + return menu switch + { + MenuCategory.Game => 0, + MenuCategory.CustomOne => 1, + MenuCategory.CustomTwo => 2, + _ => int.MaxValue, + }; + } + public static List Search(IEnumerable pages, string query) { query = query.Trim();