diff --git a/MiraAPI.Example/Modifiers/GeneralModifierOptions.cs b/MiraAPI.Example/Modifiers/GeneralModifierOptions.cs new file mode 100644 index 0000000..378c460 --- /dev/null +++ b/MiraAPI.Example/Modifiers/GeneralModifierOptions.cs @@ -0,0 +1,19 @@ +using MiraAPI.GameOptions; +using MiraAPI.GameOptions.Attributes; + +namespace MiraAPI.Example.Modifiers; + +public class GeneralModifierOptions : AbstractOptionGroup +{ + public override string GroupName => "General"; + + public override uint GroupPriority => 0; + + public override bool ShowInModifiersMenu => true; + + [ModdedToggleOption("Some Boolean Option")] + public bool SomeBooleanOption { get; set; } = true; + + [ModdedNumberOption("Number Option", 0, 10, 1)] + public float NumberOption { get; set; } = 5; +} diff --git a/MiraAPI/GameOptions/AbstractOptionGroup.cs b/MiraAPI/GameOptions/AbstractOptionGroup.cs index c3e9cde..45f9bd4 100644 --- a/MiraAPI/GameOptions/AbstractOptionGroup.cs +++ b/MiraAPI/GameOptions/AbstractOptionGroup.cs @@ -21,6 +21,12 @@ public abstract class AbstractOptionGroup /// public virtual Type? OptionableType => null; + /// + /// Gets a value indicating whether the group should be shown in the modifiers menu. + /// + // TODO: make this not a boolean + public virtual bool ShowInModifiersMenu => false; + /// /// Gets the function that determines whether the group should be visible or not. /// diff --git a/MiraAPI/Patches/Options/GameOptionsMenuPatch.cs b/MiraAPI/Patches/Options/GameOptionsMenuPatch.cs index 744c754..825ecc6 100644 --- a/MiraAPI/Patches/Options/GameOptionsMenuPatch.cs +++ b/MiraAPI/Patches/Options/GameOptionsMenuPatch.cs @@ -111,7 +111,7 @@ public static class GameOptionsMenuPatch private static void ModifiersUpdate(ref float num) { var groups = GameSettingMenuPatches.SelectedMod?.OptionGroups - .Where(x => x.OptionableType?.IsAssignableTo(typeof(BaseModifier)) == true) ?? []; + .Where(x => x.ShowInModifiersMenu || x.OptionableType?.IsAssignableTo(typeof(BaseModifier)) == true) ?? []; foreach (var modGroup in groups) { @@ -122,7 +122,7 @@ public static class GameOptionsMenuPatch private static void ModifiersCreate(GameOptionsMenu menu) { var groups = GameSettingMenuPatches.SelectedMod?.OptionGroups - .Where(x => x.OptionableType?.IsAssignableTo(typeof(BaseModifier))==true) ?? []; + .Where(x => x.ShowInModifiersMenu || x.OptionableType?.IsAssignableTo(typeof(BaseModifier))==true) ?? []; foreach (var group in groups) { CreateGroup(menu, group); diff --git a/MiraAPI/Patches/Options/GameSettingMenuPatches.cs b/MiraAPI/Patches/Options/GameSettingMenuPatches.cs index bb52c4a..cb84518 100644 --- a/MiraAPI/Patches/Options/GameSettingMenuPatches.cs +++ b/MiraAPI/Patches/Options/GameSettingMenuPatches.cs @@ -203,7 +203,7 @@ internal static class GameSettingMenuPatches _smallRolesButton.gameObject.SetActive(false); menu.RoleSettingsButton.gameObject.SetActive(false); if (SelectedModIdx != 0 && - SelectedMod?.OptionGroups.Exists(x => x.OptionableType?.IsAssignableTo(typeof(BaseModifier)) == true) == true) + SelectedMod?.OptionGroups.Exists(x => x.ShowInModifiersMenu || x.OptionableType?.IsAssignableTo(typeof(BaseModifier)) == true) == true) { _modifiersButton.gameObject.SetActive(true); _smallRolesButton.gameObject.SetActive(true); diff --git a/MiraAPI/Patches/Options/LobbyViewPanePatches.cs b/MiraAPI/Patches/Options/LobbyViewPanePatches.cs index f5895be..9b2a934 100644 --- a/MiraAPI/Patches/Options/LobbyViewPanePatches.cs +++ b/MiraAPI/Patches/Options/LobbyViewPanePatches.cs @@ -128,7 +128,7 @@ public static class LobbyViewPanePatches ModifiersTabButton?.SelectButton(true); var filteredGroups = SelectedMod.OptionGroups - .Where(x => x.OptionableType?.IsAssignableTo(typeof(BaseModifier))==true); + .Where(x => x.GroupVisible() && (x.ShowInModifiersMenu || x.OptionableType?.IsAssignableTo(typeof(BaseModifier))==true)); DrawOptions(__instance, filteredGroups); return false; }