diff --git a/MiraAPI.Example/Options/Modifiers/FreezeModifierSettings.cs b/MiraAPI.Example/Options/Modifiers/FreezeModifierSettings.cs new file mode 100644 index 0000000..13cdef9 --- /dev/null +++ b/MiraAPI.Example/Options/Modifiers/FreezeModifierSettings.cs @@ -0,0 +1,13 @@ +using MiraAPI.Example.Modifiers.Freezer; +using MiraAPI.GameOptions; +using MiraAPI.GameOptions.Attributes; + +namespace MiraAPI.Example.Options.Modifiers; + +public class FreezeModifierSettings : AbstractOptionGroup +{ + public override string GroupName => "Freeze"; + + [ModdedToggleOption("Use Color")] + public bool UseColor { get; set; } = true; +} diff --git a/MiraAPI/GameOptions/ModifierOptionGroup.cs b/MiraAPI/GameOptions/ModifierOptionGroup.cs index f845952..cfa2eff 100644 --- a/MiraAPI/GameOptions/ModifierOptionGroup.cs +++ b/MiraAPI/GameOptions/ModifierOptionGroup.cs @@ -6,10 +6,10 @@ internal class ModifierOptionGroup : AbstractOptionGroup { public override string GroupName { get; } - public ModifierOptionGroup(string name, IModdedOption[] options, params AbstractOptionGroup[] others) + public ModifierOptionGroup(string name, IModdedOption[] options, params AbstractOptionGroup[] groups) { GroupName = name; Options.AddRange(options); - Options.AddRange(others.SelectMany(x=>x.Options)); + Options.AddRange(groups.SelectMany(x=>x.Options)); } } diff --git a/MiraAPI/Patches/Options/GameOptionsMenuPatch.cs b/MiraAPI/Patches/Options/GameOptionsMenuPatch.cs index 7b24619..7867c20 100644 --- a/MiraAPI/Patches/Options/GameOptionsMenuPatch.cs +++ b/MiraAPI/Patches/Options/GameOptionsMenuPatch.cs @@ -122,15 +122,22 @@ public static class GameOptionsMenuPatch private static void ModifiersCreate(GameOptionsMenu menu) { - var modifiers = GameSettingMenuPatches.SelectedMod?.GameModifiers ?? []; + var modifiers = GameSettingMenuPatches.SelectedMod?.Modifiers ?? []; var optLookup = GameSettingMenuPatches.SelectedMod?.OptionGroups - .Where(x => x is IOptionableGroup group && group.OptionableType.IsAssignableTo(typeof(GameModifier))) - .ToLookup(x => (x as IOptionableGroup)!.OptionableType); + .OfType() + .ToLookup(x => x.OptionableType); foreach (var mod in modifiers) { - mod.ModifierOptionsGroup = new ModifierOptionGroup(mod.ModifierName, [mod.AmountOption, mod.ChanceOption], [.. optLookup?[mod.GetType()] ?? []]); + IModdedOption[] opts = mod is GameModifier gm ? [gm.AmountOption, gm.ChanceOption] : []; + if (optLookup?[mod.GetType()].Any() == false && opts.Length == 0) + { + continue; + } + + var groups = optLookup?[mod.GetType()] ?? []; + mod.ModifierOptionsGroup = new ModifierOptionGroup(mod.ModifierName, opts, [.. groups.OfType()]); CreateGroup(menu, mod.ModifierOptionsGroup); } }