diff --git a/MiraAPI/GameOptions/IModdedOption.cs b/MiraAPI/GameOptions/IModdedOption.cs index 099194e1..fdf71a62 100644 --- a/MiraAPI/GameOptions/IModdedOption.cs +++ b/MiraAPI/GameOptions/IModdedOption.cs @@ -121,4 +121,24 @@ public interface IModdedOption /// public interface IModdedOptionList : IReadOnlyList { + /// + /// Gets the function to name the keys of the individual options in the configuration file. + /// + /// Return to use the default of the property's name with its index appended. + /// + Func? ConfigName { get; init; } +} + +/// +/// Interface for list of options. +/// +/// The type of . +public interface IModdedOptionList : IModdedOptionList + where T : IModdedOption +{ + /// + new T this[int index] { get; } + + /// + new IEnumerator GetEnumerator(); } diff --git a/MiraAPI/GameOptions/ModdedOptionsManager.cs b/MiraAPI/GameOptions/ModdedOptionsManager.cs index 387a1f80..b893040c 100644 --- a/MiraAPI/GameOptions/ModdedOptionsManager.cs +++ b/MiraAPI/GameOptions/ModdedOptionsManager.cs @@ -198,9 +198,11 @@ internal static void RegisterPropertyOptionList(Type type, PropertyInfo property return; } + Func configName = optionList.ConfigName ?? (i => property.Name + (i + 1)); + for (int i = 0; i < optionList.Count; i++) { - RegisterOption(optionList[i], group, property.Name + i, pluginInfo); + RegisterOption(optionList[i], group, configName(i), pluginInfo); } } @@ -277,7 +279,7 @@ internal static void RegisterAttributeOptionList( option.Visible = () => visibilityFunc(i); } - RegisterOption(option, group, property.Name + i, pluginInfo); + RegisterOption(option, group, property.Name + (i + 1), pluginInfo); } } diff --git a/MiraAPI/GameOptions/OptionTypes/ModdedOptionList.cs b/MiraAPI/GameOptions/OptionTypes/ModdedOptionList.cs index 6f9e8d5a..257ae6ee 100644 --- a/MiraAPI/GameOptions/OptionTypes/ModdedOptionList.cs +++ b/MiraAPI/GameOptions/OptionTypes/ModdedOptionList.cs @@ -9,7 +9,7 @@ namespace MiraAPI.GameOptions.OptionTypes; /// Represents a modded option list. /// /// The type of options. -public class ModdedOptionList : IModdedOptionList +public class ModdedOptionList : IModdedOptionList where T : IModdedOption { /// @@ -20,6 +20,9 @@ public class ModdedOptionList : IModdedOptionList /// public IReadOnlyList Options { get; } + /// + public Func? ConfigName { get; init; } + /// /// Initializes a new instance of the class. /// @@ -41,10 +44,10 @@ public ModdedOptionList(IEnumerable options) Options = [.. options]; } - /// - public IEnumerator GetEnumerator() + /// + public IEnumerator GetEnumerator() { - return ((IEnumerable)Options).GetEnumerator(); + return Options.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() @@ -52,6 +55,11 @@ IEnumerator IEnumerable.GetEnumerator() return Options.GetEnumerator(); } + IEnumerator IEnumerable.GetEnumerator() + { + return ((IEnumerable)Options).GetEnumerator(); + } + /// /// Indexes the option of type . ///