Mods can now choose to appear in the settings menu

This commit is contained in:
Atony committed 2026-05-31 08:54:27 -05:00
1 parent 390e4c1157
commit 154b50fd76
5 files changed
+23 -8

No files matched your search

+3
View File
@@ -32,6 +32,9 @@ public partial class MiraApiPlugin : BasePlugin, IMiraPlugin
/// <inheritdoc />
public string OptionsTitleText => "MiraAPI";
/// <inheritdoc />
public bool ShowInSettings => false;
/// <summary>
/// Gets a value indicating whether the current device is running Starlight (on mobile).
/// </summary>
@@ -199,7 +199,7 @@ internal static class GameSettingMenuPatches
{
SaveScrollPositions(__instance);
SelectedModIdx += 1;
if (SelectedModIdx > MiraPluginManager.Instance.RegisteredPlugins.Length)
if (SelectedModIdx > MiraPluginManager.Instance.ConfigurablePlugins.Length)
{
SelectedModIdx = 0;
}
@@ -220,7 +220,7 @@ internal static class GameSettingMenuPatches
SelectedModIdx -= 1;
if (SelectedModIdx < 0)
{
SelectedModIdx = MiraPluginManager.Instance.RegisteredPlugins.Length;
SelectedModIdx = MiraPluginManager.Instance.ConfigurablePlugins.Length;
}
UpdateText(__instance, __instance.GameSettingsTab, __instance.RoleSettingsTab);
@@ -352,7 +352,7 @@ internal static class GameSettingMenuPatches
_modifierBtnOgPos = _modifiersButton.transform.localPosition;
foreach (var plugin in MiraPluginManager.Instance.RegisteredPlugins)
foreach (var plugin in MiraPluginManager.Instance.ConfigurablePlugins)
{
PresetManager.LoadPresets(plugin);
}
@@ -399,17 +399,17 @@ internal static class GameSettingMenuPatches
{
if (_text is not null && SelectedModIdx == 0)
{
_text.text = $"<size=40%>(Page 0/{MiraPluginManager.Instance.RegisteredPlugins.Length})</size>\nDefault";
_text.text = $"<size=40%>(Page 0/{MiraPluginManager.Instance.ConfigurablePlugins.Length})</size>\nDefault";
_text.fontSizeMax = 3.2f;
SelectedMod = null;
}
else if (_text is not null)
{
_text.fontSizeMax = 2.3f;
SelectedMod = MiraPluginManager.Instance.RegisteredPlugins[SelectedModIdx - 1];
SelectedMod = MiraPluginManager.Instance.ConfigurablePlugins[SelectedModIdx - 1];
var name = SelectedMod.MiraPlugin.OptionsTitleText;
_text.text = $"<size=50%>(Page {SelectedModIdx}/{MiraPluginManager.Instance.RegisteredPlugins.Length})</size>\n" + name[..Math.Min(name.Length, 25)];
_text.text = $"<size=50%>(Page {SelectedModIdx}/{MiraPluginManager.Instance.ConfigurablePlugins.Length})</size>\n" + name[..Math.Min(name.Length, 25)];
}
bool replaceWithModifiers = true;
@@ -26,7 +26,7 @@ public static class LobbyViewPanePatches
private static MiraPluginInfo? SelectedMod => SelectedModIdx == 0
? null
: MiraPluginManager.Instance.RegisteredPlugins[SelectedModIdx - 1];
: MiraPluginManager.Instance.ConfigurablePlugins[SelectedModIdx - 1];
private static PassiveButton? ModifiersTabButton { get; set; }
@@ -76,7 +76,7 @@ public static class LobbyViewPanePatches
(UnityAction)(() =>
{
SelectedModIdx += 1;
if (SelectedModIdx > MiraPluginManager.Instance.RegisteredPlugins.Length)
if (SelectedModIdx > MiraPluginManager.Instance.ConfigurablePlugins.Length)
{
SelectedModIdx = 0;
}
+5
View File
@@ -12,6 +12,11 @@ public interface IMiraPlugin
/// </summary>
string OptionsTitleText { get; }
/// <summary>
/// Gets the value indicating if the mod appears in the settings menu.
/// </summary>
public virtual bool ShowInSettings => true;
/// <summary>
/// Gets the name for the first custom category in the game options menu, if any.
/// </summary>
@@ -34,8 +34,10 @@ namespace MiraAPI.PluginLoading;
public sealed class MiraPluginManager
{
private readonly Dictionary<Assembly, MiraPluginInfo> _registeredPlugins = [];
private readonly Dictionary<Assembly, MiraPluginInfo> _configurablePlugins = [];
internal MiraPluginInfo[] RegisteredPlugins { get; private set; } = null!;
internal MiraPluginInfo[] ConfigurablePlugins { get; private set; } = null!;
internal Dictionary<MiraPluginInfo, List<Type>> QueuedRoleRegistrations { get; } = [];
internal static MiraPluginManager Instance { get; private set; } = new();
@@ -236,6 +238,10 @@ public sealed class MiraPluginManager
QueuedRoleRegistrations.Add(info, roles);
_registeredPlugins.Add(assembly, info);
if (miraPlugin.ShowInSettings)
{
_configurablePlugins.Add(assembly, info);
}
info.SavePublicCollections();
PresetManager.CreateDefaultPreset(info);
@@ -250,6 +256,7 @@ public sealed class MiraPluginManager
// Cache all the registered plugins into an array for easy access
RegisteredPlugins = [.. _registeredPlugins.Values];
ConfigurablePlugins = [.. _configurablePlugins.Values];
ModifierManager.Modifiers = new ReadOnlyCollection<BaseModifier>(ModifierManager.InternalModifiers);