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;
}