show different plugin gamemodes in lobby view pane

This commit is contained in:
XtraCube committed 2026-08-16 10:46:19 -04:00
1 parent 06c746c632
commit 0e3b6be5be
2 files changed
+29 -8

No files matched your search

@@ -24,9 +24,11 @@ public static class LobbyViewPanePatches
{
private static int SelectedModIdx { get; set; }
private static MiraPluginInfo[] Plugins => MiraPluginManager.Instance.PluginsWithOptionsOrGameModes;
private static MiraPluginInfo? SelectedMod => SelectedModIdx == 0
? null
: MiraPluginManager.Instance.RegisteredPluginsWithOptions[SelectedModIdx - 1];
: Plugins[SelectedModIdx - 1];
private static PassiveButton? ModifiersTabButton { get; set; }
@@ -76,7 +78,7 @@ public static class LobbyViewPanePatches
(UnityAction)(() =>
{
SelectedModIdx += 1;
if (SelectedModIdx > MiraPluginManager.Instance.RegisteredPluginsWithOptions.Length)
if (SelectedModIdx > Plugins.Length)
{
SelectedModIdx = 0;
}
@@ -100,7 +102,7 @@ public static class LobbyViewPanePatches
SelectedModIdx -= 1;
if (SelectedModIdx < 0)
{
SelectedModIdx = MiraPluginManager.Instance.RegisteredPluginsWithOptions.Length;
SelectedModIdx = Plugins.Length;
}
Refresh(__instance);
@@ -109,7 +111,22 @@ public static class LobbyViewPanePatches
private static void Refresh(LobbyViewSettingsPane menu)
{
ModifiersTabButton?.gameObject.SetActive(SelectedModIdx != 0);
if (SelectedMod == null)
{
ModifiersTabButton?.gameObject.SetActive(false);
menu.rolesTabButton.gameObject.SetActive(true);
}
else
{
var showModifierButton = SelectedMod.InternalOptionGroups.Any(m =>
m.ParentMenu is MenuCategory.Modifiers || m.OptionableType?.IsAssignableTo(typeof(BaseModifier)) == true);
var showRolesButton = SelectedMod.InternalOptionGroups.Any(r =>
r.ParentMenu is MenuCategory.Roles || r.OptionableType?.IsAssignableTo(typeof(ICustomRole)) == true);
ModifiersTabButton?.gameObject.SetActive(showModifierButton);
menu.rolesTabButton.gameObject.SetActive(showRolesButton);
}
menu.gameModeText.text = SelectedMod?.PluginInfo.Metadata.Name ?? "Main";
menu.RefreshTab();
menu.scrollBar.ScrollToTop();
@@ -142,7 +159,7 @@ public static class LobbyViewPanePatches
[HarmonyPatch(nameof(LobbyViewSettingsPane.DrawNormalTab))]
public static bool DrawNormalTabPatch(LobbyViewSettingsPane __instance)
{
if (SelectedModIdx == 0 || SelectedMod == null)
if ((CustomGameModeManager.IsClassic() || CustomGameModeManager.IsHideNSeek()) && (SelectedModIdx == 0 || SelectedMod == null))
{
return true;
}
@@ -153,7 +170,9 @@ public static class LobbyViewPanePatches
}
var filteredGroups = SelectedMod.InternalOptionGroups
.Where(x => x is { ParentMenu: not MenuCategory.Modifiers, OptionableType: null } && x.GroupVisible());
.Where(x => (x is { ParentMenu: not MenuCategory.Modifiers, OptionableType: null }
|| x.OptionableType?.IsAssignableTo(typeof(AbstractGameMode)) == true)
&& x.GroupVisible());
DrawOptions(__instance, filteredGroups);
return false;
+4 -2
View File
@@ -36,8 +36,9 @@ public sealed class MiraPluginManager
{
private readonly Dictionary<Assembly, MiraPluginInfo> _registeredPlugins = [];
internal MiraPluginInfo[] RegisteredPlugins { get; private set; } = null!;
internal MiraPluginInfo[] RegisteredPluginsWithOptions { get; private set; } = null!;
internal MiraPluginInfo[] RegisteredPlugins { get; private set; } = [];
internal MiraPluginInfo[] RegisteredPluginsWithOptions { get; private set; } = [];
internal MiraPluginInfo[] PluginsWithOptionsOrGameModes { get; private set; } = [];
internal Dictionary<MiraPluginInfo, List<Type>> QueuedRoleRegistrations { get; } = [];
internal static MiraPluginManager Instance { get; private set; } = new();
@@ -253,6 +254,7 @@ public sealed class MiraPluginManager
// Cache all the registered plugins into an array for easy access
RegisteredPlugins = [.. _registeredPlugins.Values];
RegisteredPluginsWithOptions = [.. RegisteredPlugins.Where(m => m.MiraPlugin.DisplayOnOptionsMenu)];
PluginsWithOptionsOrGameModes = [..RegisteredPlugins.Where(m => m.MiraPlugin.DisplayOnOptionsMenu || m.GameModes.Count > 0)];
ModifierManager.Modifiers = new ReadOnlyCollection<BaseModifier>(ModifierManager.InternalModifiers);