diff --git a/MiraAPI/GameOptions/IModdedOptionList.cs b/MiraAPI/GameOptions/IModdedOptionList.cs index 4fed3b3..62dd7d5 100644 --- a/MiraAPI/GameOptions/IModdedOptionList.cs +++ b/MiraAPI/GameOptions/IModdedOptionList.cs @@ -20,14 +20,16 @@ public interface IModdedOptionList IMiraPlugin? ParentMod { get; set; } /// - /// Gets or sets the visibility function for the options. + /// Gets the visibility function for the options. + /// Leaving it null will leave the options unchanged. /// - Func Visible { get; set; } + Func? Visible { get; init; } /// - /// Gets or sets a value indicating whether the options should be included with presets. + /// Gets a value indicating whether the options should be included with presets. + /// Leaving it null will leave the options unchanged. /// - bool IncludeInPreset { get; set; } + bool? IncludeInPreset { get; init; } /// /// Saves the options to a preset configuration file. diff --git a/MiraAPI/GameOptions/OptionTypes/ModdedOptionList.cs b/MiraAPI/GameOptions/OptionTypes/ModdedOptionList.cs index a32a727..7e97a1a 100644 --- a/MiraAPI/GameOptions/OptionTypes/ModdedOptionList.cs +++ b/MiraAPI/GameOptions/OptionTypes/ModdedOptionList.cs @@ -38,12 +38,13 @@ public class ModdedOptionList : IModdedOptionList, IReadOnlyList where T : public IReadOnlyList Options { get; } /// - public Func Visible + public Func? Visible { get; - set + init { field = value; + if (value == null) return; foreach (var (option, idx) in Options.Select((o, i) => (o, i))) { option.Visible = () => value(idx); @@ -52,15 +53,16 @@ public class ModdedOptionList : IModdedOptionList, IReadOnlyList where T : } /// - public bool IncludeInPreset + public bool? IncludeInPreset { get; - set + init { field = value; + if (value == null) return; foreach (var option in Options) { - option.IncludeInPreset = value; + option.IncludeInPreset = value.Value; } } } @@ -71,12 +73,11 @@ public class ModdedOptionList : IModdedOptionList, IReadOnlyList where T : /// The option list's length. /// The option factory to instantiate the options from. /// Whether to include the options in the preset. - public ModdedOptionList(int count, Func optionFactory, bool includeInPreset = true) + public ModdedOptionList(int count, Func optionFactory, bool? includeInPreset = true) { Count = count; - Visible = _ => true; - IncludeInPreset = includeInPreset; Options = Enumerable.Range(0, Count).Select(optionFactory).ToArray(); + IncludeInPreset = includeInPreset; } ///