From 0429cd800525dc40d0e29d8420dc76fdb126e5e0 Mon Sep 17 00:00:00 2001 From: XtraCube <72575280+XtraCube@users.noreply.github.com> Date: Sat, 31 Aug 2024 10:41:16 -0400 Subject: [PATCH] remove ModdedStringOption.cs, improve code in Options API --- MiraAPI.Example/Options/ExampleOptions.cs | 13 ++-- MiraAPI.Example/Options/ExampleOptions2.cs | 2 - .../Attributes/ModdedEnumOptionAttribute.cs | 19 +++-- .../Attributes/ModdedNumberOptionAttribute.cs | 26 ++++--- .../Attributes/ModdedStringOptionAttribute.cs | 27 ------- .../Attributes/ModdedToggleOptionAttribute.cs | 27 +++++-- MiraAPI/GameOptions/OptionGroupSingleton.cs | 26 +++---- .../OptionTypes/ModdedEnumOption.cs | 36 +++++++-- .../OptionTypes/ModdedNumberOption.cs | 73 ++++++++++++++---- .../OptionTypes/ModdedStringOption.cs | 77 ------------------- .../OptionTypes/ModdedToggleOption.cs | 22 +++++- MiraAPI/Hud/CustomButtonSingleton.cs | 26 +------ MiraAPI/Patches/Roles/GameStartupPatch.cs | 1 - README.md | 9 +-- 14 files changed, 177 insertions(+), 207 deletions(-) delete mode 100644 MiraAPI/GameOptions/Attributes/ModdedStringOptionAttribute.cs delete mode 100644 MiraAPI/GameOptions/OptionTypes/ModdedStringOption.cs diff --git a/MiraAPI.Example/Options/ExampleOptions.cs b/MiraAPI.Example/Options/ExampleOptions.cs index 13a7dd7..9e9fa59 100644 --- a/MiraAPI.Example/Options/ExampleOptions.cs +++ b/MiraAPI.Example/Options/ExampleOptions.cs @@ -19,16 +19,13 @@ public class ExampleOptions : AbstractOptionGroup [ModdedNumberOption("Number Opt", min: 0, max: 10, suffixType: MiraNumberSuffixes.Percent)] public float NumberOpt { get; set; } = 4f; - [ModdedStringOption("String Opt", ["Hello", "Hey", "Bye"])] - public int StringOpt { get; set; } = 2; - - [ModdedEnumOption("Best API", typeof(BestApiEnum), ["Mira API", "Mitochondria", "Reactor"])] - public BestApiEnum EnumOpt { get; set; } = BestApiEnum.MiraAPI; + [ModdedEnumOption("Best API", typeof(BestApi), ["Mira API", "Mitochondria", "Reactor"])] + public BestApi Opt { get; set; } = BestApi.MiraAPI; } -public enum BestApiEnum +public enum BestApi { MiraAPI, Mitochondria, - Reactor -} \ No newline at end of file + Reactor, +} diff --git a/MiraAPI.Example/Options/ExampleOptions2.cs b/MiraAPI.Example/Options/ExampleOptions2.cs index 1f86565..c521ea8 100644 --- a/MiraAPI.Example/Options/ExampleOptions2.cs +++ b/MiraAPI.Example/Options/ExampleOptions2.cs @@ -15,8 +15,6 @@ public class ExampleOptions2 : AbstractOptionGroup Visible = () => OptionGroupSingleton.Instance.ToggleOpt1.Value, }; - public ModdedStringOption StringOpt { get; } = new("String Opt", 0, ["Choice 1", "Choice 2", "Choice 3"]); - public ModdedEnumOption EnumOpt { get; } = new("Enum Opt", 0, typeof(TestingData)) { ChangedEvent = x => Logger.Info($"changed Enum Opt to {x}"), diff --git a/MiraAPI/GameOptions/Attributes/ModdedEnumOptionAttribute.cs b/MiraAPI/GameOptions/Attributes/ModdedEnumOptionAttribute.cs index 7e130d7..2944520 100644 --- a/MiraAPI/GameOptions/Attributes/ModdedEnumOptionAttribute.cs +++ b/MiraAPI/GameOptions/Attributes/ModdedEnumOptionAttribute.cs @@ -4,7 +4,11 @@ using System.Reflection; namespace MiraAPI.GameOptions.Attributes; -public class ModdedEnumOptionAttribute(string title, Type enumType, string[] values = null, Type? roleType = null) +/// +/// Attribute for creating an enum option. +/// +[AttributeUsage(AttributeTargets.Property)] +public class ModdedEnumOptionAttribute(string title, Type enumType, string[]? values = null, Type? roleType = null) : ModdedOptionAttribute(title, roleType) { internal override IModdedOption CreateOption(object? value, PropertyInfo property) @@ -13,15 +17,20 @@ public class ModdedEnumOptionAttribute(string title, Type enumType, string[] val return opt; } + /// public override void SetValue(object value) { var opt = HolderOption as ModdedEnumOption; - opt.SetValue((int)value); + opt?.SetValue((int)value); } + /// public override object GetValue() { - var opt = HolderOption as ModdedEnumOption; - return Enum.ToObject(enumType, opt.Value); + if (HolderOption is ModdedEnumOption opt) + { + return Enum.ToObject(enumType, opt.Value); + } + throw new InvalidOperationException($"HolderOption for option \"{Title}\" with EnumType ${enumType.FullName} is not a ModdedEnumOption"); } -} \ No newline at end of file +} diff --git a/MiraAPI/GameOptions/Attributes/ModdedNumberOptionAttribute.cs b/MiraAPI/GameOptions/Attributes/ModdedNumberOptionAttribute.cs index ac451ad..2bd4438 100644 --- a/MiraAPI/GameOptions/Attributes/ModdedNumberOptionAttribute.cs +++ b/MiraAPI/GameOptions/Attributes/ModdedNumberOptionAttribute.cs @@ -5,6 +5,10 @@ using System.Reflection; namespace MiraAPI.GameOptions.Attributes; +/// +/// A number option attribute for the modded options system. +/// +[AttributeUsage(AttributeTargets.Property)] public class ModdedNumberOptionAttribute( string title, float min, @@ -12,24 +16,28 @@ public class ModdedNumberOptionAttribute( float increment = 1, MiraNumberSuffixes suffixType = MiraNumberSuffixes.None, bool zeroInfinity = false, - Type roleType = null) + Type? roleType = null) : ModdedOptionAttribute(title, roleType) { - internal override IModdedOption CreateOption(object value, PropertyInfo property) + internal override IModdedOption CreateOption(object? value, PropertyInfo property) { - var toggleOpt = new ModdedNumberOption(Title, (float)value, min, max, increment, suffixType, zeroInfinity, RoleType); - return toggleOpt; + return new ModdedNumberOption(Title, (float)(value ?? min+increment), min, max, increment, suffixType, zeroInfinity, RoleType); } + /// public override void SetValue(object value) { - var toggleOpt = HolderOption as ModdedNumberOption; - toggleOpt.SetValue((float)value); + var opt = HolderOption as ModdedNumberOption; + opt?.SetValue((float)value); } + /// public override object GetValue() { - var toggleOpt = HolderOption as ModdedNumberOption; - return toggleOpt.Value; + if (HolderOption is ModdedNumberOption opt) + { + return opt.Value; + } + throw new InvalidOperationException($"HolderOption for option \"{Title}\" is not a ModdedNumberOption"); } -} \ No newline at end of file +} diff --git a/MiraAPI/GameOptions/Attributes/ModdedStringOptionAttribute.cs b/MiraAPI/GameOptions/Attributes/ModdedStringOptionAttribute.cs deleted file mode 100644 index cb8d6b8..0000000 --- a/MiraAPI/GameOptions/Attributes/ModdedStringOptionAttribute.cs +++ /dev/null @@ -1,27 +0,0 @@ -using MiraAPI.GameOptions.OptionTypes; -using System; -using System.Reflection; - -namespace MiraAPI.GameOptions.Attributes; - -public class ModdedStringOptionAttribute(string title, string[] values, Type roleType = null) - : ModdedOptionAttribute(title, roleType) -{ - internal override IModdedOption CreateOption(object value, PropertyInfo property) - { - var opt = new ModdedStringOption(Title, (int)value, values, RoleType); - return opt; - } - - public override void SetValue(object value) - { - var opt = HolderOption as ModdedStringOption; - opt.SetValue((int)value); - } - - public override object GetValue() - { - var opt = HolderOption as ModdedStringOption; - return opt.Value; - } -} \ No newline at end of file diff --git a/MiraAPI/GameOptions/Attributes/ModdedToggleOptionAttribute.cs b/MiraAPI/GameOptions/Attributes/ModdedToggleOptionAttribute.cs index 2ab75fc..c389292 100644 --- a/MiraAPI/GameOptions/Attributes/ModdedToggleOptionAttribute.cs +++ b/MiraAPI/GameOptions/Attributes/ModdedToggleOptionAttribute.cs @@ -4,23 +4,34 @@ using System.Reflection; namespace MiraAPI.GameOptions.Attributes; -public class ModdedToggleOptionAttribute(string title, Type roleType = null) : ModdedOptionAttribute(title, roleType) +/// +/// Attribute for a toggle option. +/// +/// The option title. +/// An optional role type. +[AttributeUsage(AttributeTargets.Property)] +public class ModdedToggleOptionAttribute(string title, Type? roleType = null) : ModdedOptionAttribute(title, roleType) { - internal override IModdedOption CreateOption(object value, PropertyInfo property) + internal override IModdedOption CreateOption(object? value, PropertyInfo property) { - var toggleOpt = new ModdedToggleOption(Title, (bool)value, RoleType); + var toggleOpt = new ModdedToggleOption(Title, (bool)(value ?? false), RoleType); return toggleOpt; } + /// public override void SetValue(object value) { - var toggleOpt = HolderOption as ModdedToggleOption; - toggleOpt.SetValue((bool)value); + var opt = HolderOption as ModdedToggleOption; + opt?.SetValue((bool)value); } + /// public override object GetValue() { - var toggleOpt = HolderOption as ModdedToggleOption; - return toggleOpt.Value; + if (HolderOption is ModdedToggleOption opt) + { + return opt.Value; + } + throw new InvalidOperationException($"Holder option for {Title} is not a ModdedToggleOption."); } -} \ No newline at end of file +} diff --git a/MiraAPI/GameOptions/OptionGroupSingleton.cs b/MiraAPI/GameOptions/OptionGroupSingleton.cs index d7678c6..03a11fa 100644 --- a/MiraAPI/GameOptions/OptionGroupSingleton.cs +++ b/MiraAPI/GameOptions/OptionGroupSingleton.cs @@ -3,21 +3,17 @@ using System.Linq; namespace MiraAPI.GameOptions; +/// +/// Singleton for option groups. +/// +/// The option group type. public class OptionGroupSingleton where T : AbstractOptionGroup { - private static T _instance; + private static T? _instance; - public static T Instance - { - get => _instance ??= ModdedOptionsManager.Groups.OfType().Single(); - set - { - if (_instance != null) - { - throw new InvalidOperationException($"Instance for {typeof(T)} is already set"); - } - - _instance = value; - } - } -} \ No newline at end of file + /// + /// Gets the instance of the option group. + /// + /// Can't + public static T Instance => _instance ??= ModdedOptionsManager.Groups.OfType().Single(); +} diff --git a/MiraAPI/GameOptions/OptionTypes/ModdedEnumOption.cs b/MiraAPI/GameOptions/OptionTypes/ModdedEnumOption.cs index 56ff161..c3f0f5e 100644 --- a/MiraAPI/GameOptions/OptionTypes/ModdedEnumOption.cs +++ b/MiraAPI/GameOptions/OptionTypes/ModdedEnumOption.cs @@ -2,18 +2,33 @@ using Reactor.Localization.Utilities; using System; using System.Linq; +using Il2CppInterop.Runtime.InteropTypes.Arrays; using UnityEngine; using Object = UnityEngine.Object; namespace MiraAPI.GameOptions.OptionTypes; +/// +/// An option for selecting an enum value. +/// public class ModdedEnumOption : ModdedOption { - public string[] Values { get; } + /// + /// Gets the string values of the enum. + /// + public string[]? Values { get; } - public ModdedEnumOption(string title, int defaultValue, Type enumType, string[] values = null, Type roleType = null) : base(title, defaultValue, roleType) + /// + /// Initializes a new instance of the class. + /// + /// The title of the option. + /// The default value as an int. + /// The Enum type. + /// An option list of string values to use in place of the enum name. + /// An optional role type to specify for a specific role. + public ModdedEnumOption(string title, int defaultValue, Type enumType, string[]? values = null, Type? roleType = null) : base(title, defaultValue, roleType) { - Values = values is null ? Enum.GetNames(enumType) : values; + Values = values ?? Enum.GetNames(enumType); Data = ScriptableObject.CreateInstance(); var data = (StringGameSetting)Data; @@ -26,6 +41,7 @@ public class ModdedEnumOption : ModdedOption data.Index = Value; } + /// public override OptionBehaviour CreateOption(ToggleOption toggleOpt, NumberOption numberOpt, StringOption stringOpt, Transform container) { var stringOption = Object.Instantiate(stringOpt, container); @@ -35,7 +51,7 @@ public class ModdedEnumOption : ModdedOption // SetUpFromData method doesnt work correctly so we must set the values manually stringOption.Title = StringName; - stringOption.Values = ((StringGameSetting)Data).Values; + stringOption.Values = (Data as StringGameSetting)?.Values ?? new Il2CppStructArray(0); stringOption.Value = Value; OptionBehaviour = stringOption; @@ -43,38 +59,42 @@ public class ModdedEnumOption : ModdedOption return stringOption; } + /// public override float GetFloatData() { return Value; } + /// public override NetData GetNetData() { return new NetData(Id, BitConverter.GetBytes(Value)); } + /// public override void HandleNetData(byte[] data) { SetValue(BitConverter.ToInt32(data)); } + /// public override int GetValueFromOptionBehaviour(OptionBehaviour optionBehaviour) { return optionBehaviour.GetInt(); } + /// protected override void OnValueChanged(int newValue) { - DestroyableSingleton.Instance.Notifier.AddSettingsChangeMessage(StringName, Data.GetValueString(newValue), false); + DestroyableSingleton.Instance.Notifier.AddSettingsChangeMessage(StringName, Data?.GetValueString(newValue), false); if (!OptionBehaviour) { return; } - var opt = OptionBehaviour as StringOption; - if (opt) + if (OptionBehaviour is StringOption opt) { opt.Value = newValue; } } -} \ No newline at end of file +} diff --git a/MiraAPI/GameOptions/OptionTypes/ModdedNumberOption.cs b/MiraAPI/GameOptions/OptionTypes/ModdedNumberOption.cs index 5b24131..65aa846 100644 --- a/MiraAPI/GameOptions/OptionTypes/ModdedNumberOption.cs +++ b/MiraAPI/GameOptions/OptionTypes/ModdedNumberOption.cs @@ -7,19 +7,56 @@ using Object = UnityEngine.Object; namespace MiraAPI.GameOptions.OptionTypes; +/// +/// Represents a modded number option. +/// public class ModdedNumberOption : ModdedOption { + /// + /// Gets the minimum value of the option. + /// public float Min { get; } + /// + /// Gets the maximum value of the option. + /// public float Max { get; } + /// + /// Gets the increment value of the option. + /// public float Increment { get; } + /// + /// Gets the suffix type of the option. + /// public MiraNumberSuffixes SuffixType { get; } + /// + /// Gets a value indicating whether zero is infinity. + /// public bool ZeroInfinity { get; } - public ModdedNumberOption(string title, float defaultValue, float min, float max, float increment, MiraNumberSuffixes suffixType, bool zeroInfinity = false, Type roleType = null) : base(title, defaultValue, roleType) + /// + /// Initializes a new instance of the class. + /// + /// The title of the option. + /// The default value as a float. + /// The minimum value. + /// The maximum value. + /// The increment. + /// The suffix type. + /// Whether zero is infinity or not. + /// An optional role type. + public ModdedNumberOption( + string title, + float defaultValue, + float min, + float max, + float increment, + MiraNumberSuffixes suffixType, + bool zeroInfinity = false, + Type? roleType = null) : base(title, defaultValue, roleType) { Min = min; Max = max; @@ -37,13 +74,18 @@ public class ModdedNumberOption : ModdedOption data.Value = Value; data.Increment = Increment; data.ValidRange = new FloatRange(Min, Max); - data.FormatString = Increment % 1 == 0 && Value % 1 == 0 && Min % 1 == 0 && Max % 1 == 0 ? "0" : "0.0"; + data.FormatString = Increment % 1 == 0 && Value % 1 == 0 && Min % 1 == 0 && Max % 1 == 0 ? "0" : "0.0"; // not sure if the == checks will work since this is floats but we'll find out data.ZeroIsInfinity = ZeroInfinity; data.SuffixType = (NumberSuffixes)SuffixType; data.OptionName = FloatOptionNames.Invalid; } - public override OptionBehaviour CreateOption(ToggleOption toggleOpt, NumberOption numberOpt, StringOption stringOpt, Transform container) + /// + public override OptionBehaviour CreateOption( + ToggleOption toggleOpt, + NumberOption numberOpt, + StringOption stringOpt, + Transform container) { var numberOption = Object.Instantiate(numberOpt, Vector3.zero, Quaternion.identity, container); @@ -54,51 +96,52 @@ public class ModdedNumberOption : ModdedOption numberOption.Value = Value; numberOption.Increment = Increment; numberOption.ValidRange = new FloatRange(Min, Max); - numberOption.FormatString = ((FloatGameSetting)Data).FormatString; + numberOption.FormatString = (Data as FloatGameSetting)?.FormatString ?? "0.0"; numberOption.ZeroIsInfinity = ZeroInfinity; numberOption.SuffixType = (NumberSuffixes)SuffixType; numberOption.floatOptionName = FloatOptionNames.Invalid; - OptionBehaviour = numberOption; return numberOption; } + /// public override float GetFloatData() { return Value; } + /// public override NetData GetNetData() { return new NetData(Id, BitConverter.GetBytes(Value)); } + /// public override void HandleNetData(byte[] data) { SetValue(BitConverter.ToSingle(data)); } + /// public override float GetValueFromOptionBehaviour(OptionBehaviour optionBehaviour) { return Mathf.Clamp(optionBehaviour.GetFloat(), Min, Max); } + /// protected override void OnValueChanged(float newValue) { Value = Mathf.Clamp(newValue, Min, Max); - DestroyableSingleton.Instance.Notifier.AddSettingsChangeMessage(StringName, Data.GetValueString(Value), false); + DestroyableSingleton.Instance.Notifier.AddSettingsChangeMessage( + StringName, + Data?.GetValueString(Value), + false); - if (!OptionBehaviour) + if (OptionBehaviour is NumberOption opt) { - return; - } - - var opt = OptionBehaviour as NumberOption; - if (opt) - { - opt.Value = newValue; + opt.Value = Value; } } -} \ No newline at end of file +} diff --git a/MiraAPI/GameOptions/OptionTypes/ModdedStringOption.cs b/MiraAPI/GameOptions/OptionTypes/ModdedStringOption.cs deleted file mode 100644 index 625225d..0000000 --- a/MiraAPI/GameOptions/OptionTypes/ModdedStringOption.cs +++ /dev/null @@ -1,77 +0,0 @@ -using Reactor.Localization.Utilities; -using System; -using System.Linq; -using MiraAPI.Networking; -using UnityEngine; -using Object = UnityEngine.Object; - -namespace MiraAPI.GameOptions.OptionTypes; - -public class ModdedStringOption : ModdedOption -{ - public string[] Values { get; } - - public ModdedStringOption(string title, int defaultValue, string[] values, Type roleType=null) : base(title, defaultValue, roleType) - { - Values = values; - Data = ScriptableObject.CreateInstance(); - var data = (StringGameSetting)Data; - - data.Title = StringName; - data.Type = global::OptionTypes.String; - data.Values = Values.Select(CustomStringName.CreateAndRegister).ToArray(); - data.Index = Value; - } - - public override OptionBehaviour CreateOption(ToggleOption toggleOpt, NumberOption numberOpt, StringOption stringOpt, Transform container) - { - var stringOption = Object.Instantiate(stringOpt, container); - - stringOption.SetUpFromData(Data, 20); - stringOption.OnValueChanged = (Il2CppSystem.Action)ValueChanged; - - // SetUpFromData method doesnt work correctly so we must set the values manually - stringOption.Title = StringName; - stringOption.Values = ((StringGameSetting)Data).Values; - stringOption.Value = Value; - - OptionBehaviour = stringOption; - - return stringOption; - } - - public override float GetFloatData() - { - return Value; - } - - public override NetData GetNetData() - { - return new NetData(Id, BitConverter.GetBytes(Value)); - } - - public override void HandleNetData(byte[] data) - { - SetValue(BitConverter.ToInt32(data)); - } - - public override int GetValueFromOptionBehaviour(OptionBehaviour optionBehaviour) - { - return optionBehaviour.GetInt(); - } - - protected override void OnValueChanged(int newValue) - { - DestroyableSingleton.Instance.Notifier.AddSettingsChangeMessage(StringName, Data.GetValueString(newValue), false); - if (!OptionBehaviour) - { - return; - } - - var opt = OptionBehaviour as StringOption; - if (opt) - { - opt.Value = newValue; - } - } -} \ No newline at end of file diff --git a/MiraAPI/GameOptions/OptionTypes/ModdedToggleOption.cs b/MiraAPI/GameOptions/OptionTypes/ModdedToggleOption.cs index 2c3e935..ad00c33 100644 --- a/MiraAPI/GameOptions/OptionTypes/ModdedToggleOption.cs +++ b/MiraAPI/GameOptions/OptionTypes/ModdedToggleOption.cs @@ -5,9 +5,18 @@ using Object = UnityEngine.Object; namespace MiraAPI.GameOptions.OptionTypes; +/// +/// A modded toggle option. +/// public class ModdedToggleOption : ModdedOption { - public ModdedToggleOption(string title, bool defaultValue, Type roleType = null) : base(title, defaultValue, roleType) + /// + /// Initializes a new instance of the class. + /// + /// The option title. + /// The default value. + /// An optional role type. + public ModdedToggleOption(string title, bool defaultValue, Type? roleType = null) : base(title, defaultValue, roleType) { Data = ScriptableObject.CreateInstance(); @@ -16,6 +25,7 @@ public class ModdedToggleOption : ModdedOption data.Type = global::OptionTypes.Checkbox; } + /// public override OptionBehaviour CreateOption(ToggleOption toggleOpt, NumberOption numberOpt, StringOption stringOpt, Transform container) { var toggleOption = Object.Instantiate(toggleOpt, Vector3.zero, Quaternion.identity, container); @@ -32,26 +42,31 @@ public class ModdedToggleOption : ModdedOption return toggleOption; } + /// public override float GetFloatData() { return Value ? 1 : 0; } + /// public override NetData GetNetData() { return new NetData(Id, BitConverter.GetBytes(Value)); } + /// public override void HandleNetData(byte[] data) { SetValue(BitConverter.ToBoolean(data)); } + /// public override bool GetValueFromOptionBehaviour(OptionBehaviour optionBehaviour) { return optionBehaviour.GetBool(); } + /// protected override void OnValueChanged(bool newValue) { DestroyableSingleton.Instance.Notifier.AddSettingsChangeMessage(StringName, newValue ? "On" : "Off", false); @@ -60,10 +75,9 @@ public class ModdedToggleOption : ModdedOption return; } - var toggleOpt = OptionBehaviour as ToggleOption; - if (toggleOpt) + if (OptionBehaviour is ToggleOption toggleOpt) { toggleOpt.CheckMark.enabled = newValue; } } -} \ No newline at end of file +} diff --git a/MiraAPI/Hud/CustomButtonSingleton.cs b/MiraAPI/Hud/CustomButtonSingleton.cs index 82403e7..3e732be 100644 --- a/MiraAPI/Hud/CustomButtonSingleton.cs +++ b/MiraAPI/Hud/CustomButtonSingleton.cs @@ -1,5 +1,4 @@ -using System; -using System.Linq; +using System.Linq; namespace MiraAPI.Hud; @@ -12,24 +11,7 @@ public static class CustomButtonSingleton where T : CustomActionButton private static T? _instance; /// - /// Gets or sets instance of the button. + /// Gets the instance of the button. /// - public static T Instance - { - get => _instance ??= CustomButtonManager.CustomButtons.OfType().Single(); - set - { - if (_instance == value) - { - return; - } - - if (_instance != null) - { - throw new InvalidOperationException($"Instance for {typeof(T)} is already set"); - } - - _instance = value; - } - } -} \ No newline at end of file + public static T Instance => _instance ??= CustomButtonManager.CustomButtons.OfType().Single(); +} diff --git a/MiraAPI/Patches/Roles/GameStartupPatch.cs b/MiraAPI/Patches/Roles/GameStartupPatch.cs index 335ba07..b452791 100644 --- a/MiraAPI/Patches/Roles/GameStartupPatch.cs +++ b/MiraAPI/Patches/Roles/GameStartupPatch.cs @@ -1,5 +1,4 @@ using HarmonyLib; -using MiraAPI.Colors; using MiraAPI.Roles; namespace MiraAPI.Patches.Roles; diff --git a/README.md b/README.md index 01c3d2c..9a8b11d 100644 --- a/README.md +++ b/README.md @@ -118,7 +118,7 @@ public float SussyLevel { get; set; } = 4f; // You can set a default value here. Here are the available Option Attributes and their signatures: ```csharp -ModdedEnumOption(string name, Type enumType, Type roleType = null) +ModdedEnumOption(string name, Type enumType, string[]? values = null, Type? roleType = null) ModdedNumberOption( string name, @@ -127,11 +127,9 @@ ModdedNumberOption( float increment=1 NumberSuffixes suffixType = NumberSuffixes.None, bool zeroInfinity = false, - Type roleType = null) - -ModdedStringOption(string title, string[] values, Type roleType = null) + Type? roleType = null) -ModdedToggleOption(string name, Type roleType = null) +ModdedToggleOption(string name, Type? roleType = null) ``` ### ModdedOption Properties @@ -144,7 +142,6 @@ public ModdedToggleOption YeezusAbility { get; } = new ModdedToggleOption("Yeezu Here is a full list of ModdedOption classes you can use: - `ModdedEnumOption` - `ModdedNumberOption` -- `ModdedStringOption` - `ModdedToggleOption` To see a full example of an options class, see [this file](https://github.com/All-Of-Us-Mods/MiraAPI/blob/master/MiraAPI.Example/Options/ExampleOptions.cs).