From ca828ea3887ba95d36fd880791095caa30a54aad Mon Sep 17 00:00:00 2001 From: XtraCube <72575280+XtraCube@users.noreply.github.com> Date: Mon, 19 Aug 2024 21:14:29 -0400 Subject: [PATCH] Various fixes (csproj and options) --- MiraAPI.Example/ExampleOptions2.cs | 27 +++++++++++++ MiraAPI.Example/MiraAPI.Example.csproj | 10 ++--- MiraAPI/GameOptions/IModdedOption.cs | 2 +- MiraAPI/GameOptions/ModdedGroupSingleton.cs | 2 +- MiraAPI/GameOptions/ModdedOptionGroup.cs | 15 ------- MiraAPI/GameOptions/ModdedOptionsManager.cs | 4 +- .../OptionTypes/ModdedNumberOption.cs | 2 +- .../GameOptions/OptionTypes/ModdedOption.cs | 2 +- MiraAPI/MiraAPI.csproj | 10 ++--- .../Patches/Options/GameOptionsMenuPatch.cs | 4 +- .../Patches/Options/GameSettingMenuPatches.cs | 40 ++++++++++--------- .../Patches/Options/RoleSettingMenuPatches.cs | 14 +++---- MiraAPI/PluginLoading/MiraPluginInfo.cs | 19 +++------ MiraAPI/PluginLoading/MiraPluginManager.cs | 20 +++++----- nuget.config | 3 ++ 15 files changed, 92 insertions(+), 82 deletions(-) create mode 100644 MiraAPI.Example/ExampleOptions2.cs delete mode 100644 MiraAPI/GameOptions/ModdedOptionGroup.cs diff --git a/MiraAPI.Example/ExampleOptions2.cs b/MiraAPI.Example/ExampleOptions2.cs new file mode 100644 index 0000000..e6b8fb6 --- /dev/null +++ b/MiraAPI.Example/ExampleOptions2.cs @@ -0,0 +1,27 @@ +using MiraAPI.GameOptions; +using MiraAPI.GameOptions.OptionTypes; + +namespace MiraAPI.Example; + +public class ExampleOptions2 : IModdedOptionGroup +{ + public string GroupName => "Example 2"; + + public ModdedToggleOption UseThing { get; } = new("Use Thingy 5", false); + + public ModdedToggleOption UseThing2 { get; } = new("Use Thingy 6", false); + + public ModdedStringOption Sussy { get; } = new("Sussy", 0, ["Sussy 1", "Sussy 2", "Sussy 3"]); + + public ModdedEnumOption SussyEnum { get; } = new("Sussy Enum", 0, typeof(SussyEnum)); + + public ModdedNumberOption YeezyLevel { get; } = new("Yeezy Level", 50, 0, 100, 25, NumberSuffixes.Multiplier); +} + +public enum SussyEnum +{ + Sussy, + Baka, + Imposter, + Kanye +} \ No newline at end of file diff --git a/MiraAPI.Example/MiraAPI.Example.csproj b/MiraAPI.Example/MiraAPI.Example.csproj index 0f097ae..193a9ed 100644 --- a/MiraAPI.Example/MiraAPI.Example.csproj +++ b/MiraAPI.Example/MiraAPI.Example.csproj @@ -12,14 +12,14 @@ Steam - 2024.3.5 + 2024.6.18 - - - - + + + + diff --git a/MiraAPI/GameOptions/IModdedOption.cs b/MiraAPI/GameOptions/IModdedOption.cs index 059657d..9822eb1 100644 --- a/MiraAPI/GameOptions/IModdedOption.cs +++ b/MiraAPI/GameOptions/IModdedOption.cs @@ -9,7 +9,7 @@ public interface IModdedOption { public uint Id { get; } public BaseGameSetting Data { get; } - public ModdedOptionGroup Group { get; set; } + public IModdedOptionGroup Group { get; set; } public IMiraPlugin ParentMod { get; set; } public Type AdvancedRole { get; } public OptionBehaviour OptionBehaviour { get; protected set; } diff --git a/MiraAPI/GameOptions/ModdedGroupSingleton.cs b/MiraAPI/GameOptions/ModdedGroupSingleton.cs index 4d1ee95..8019537 100644 --- a/MiraAPI/GameOptions/ModdedGroupSingleton.cs +++ b/MiraAPI/GameOptions/ModdedGroupSingleton.cs @@ -3,7 +3,7 @@ using System.Linq; namespace MiraAPI.GameOptions; -public class ModdedGroupSingleton where T : ModdedOptionGroup +public class ModdedGroupSingleton where T : IModdedOptionGroup { private static T _instance; diff --git a/MiraAPI/GameOptions/ModdedOptionGroup.cs b/MiraAPI/GameOptions/ModdedOptionGroup.cs deleted file mode 100644 index 6d0dfa9..0000000 --- a/MiraAPI/GameOptions/ModdedOptionGroup.cs +++ /dev/null @@ -1,15 +0,0 @@ -using MiraAPI.PluginLoading; -using System; -using UnityEngine; - -namespace MiraAPI.GameOptions; - -public class ModdedOptionGroup -{ - public IMiraPlugin ParentMod; - public GameObject Header; - public string GroupName; - public Func GroupVisible; - public Color GroupColor; - public Type AdvancedRole; -} \ No newline at end of file diff --git a/MiraAPI/GameOptions/ModdedOptionsManager.cs b/MiraAPI/GameOptions/ModdedOptionsManager.cs index 67ef5c1..02e99f9 100644 --- a/MiraAPI/GameOptions/ModdedOptionsManager.cs +++ b/MiraAPI/GameOptions/ModdedOptionsManager.cs @@ -14,9 +14,9 @@ public class ModdedOptionsManager { public static readonly Dictionary ModdedOptions = new(); public static readonly List Options = []; - public static readonly List Groups = []; + public static readonly List Groups = []; private static readonly Dictionary OptionAttributes = new(); - public static readonly Dictionary OriginalTypes = new(); + public static readonly Dictionary OriginalTypes = new(); public static uint NextId = 1; public static IModdedOption RegisterOption(Type type, ModdedOptionAttribute attribute, PropertyInfo property) diff --git a/MiraAPI/GameOptions/OptionTypes/ModdedNumberOption.cs b/MiraAPI/GameOptions/OptionTypes/ModdedNumberOption.cs index 11c21c5..72882db 100644 --- a/MiraAPI/GameOptions/OptionTypes/ModdedNumberOption.cs +++ b/MiraAPI/GameOptions/OptionTypes/ModdedNumberOption.cs @@ -19,7 +19,7 @@ public class ModdedNumberOption : ModdedOption public bool ZeroInfinity { get; } - public ModdedNumberOption(string title, float defaultValue, float min, float max, float increment, NumberSuffixes suffixType, bool zeroInfinity, Type roleType=null) : base(title, defaultValue, roleType) + public ModdedNumberOption(string title, float defaultValue, float min, float max, float increment, NumberSuffixes suffixType, bool zeroInfinity=false, Type roleType=null) : base(title, defaultValue, roleType) { Min = min; Max = max; diff --git a/MiraAPI/GameOptions/OptionTypes/ModdedOption.cs b/MiraAPI/GameOptions/OptionTypes/ModdedOption.cs index 882a81c..366ab2d 100644 --- a/MiraAPI/GameOptions/OptionTypes/ModdedOption.cs +++ b/MiraAPI/GameOptions/OptionTypes/ModdedOption.cs @@ -21,7 +21,7 @@ public abstract class ModdedOption : IModdedOption public Func Visible { get; set; } public Type AdvancedRole { get; } public OptionBehaviour OptionBehaviour { get; set; } - public ModdedOptionGroup Group { get; set; } = null; + public IModdedOptionGroup Group { get; set; } = null; public IMiraPlugin ParentMod { get; set; } = null; protected ModdedOption(string title, T defaultValue, Type roleType) : this() diff --git a/MiraAPI/MiraAPI.csproj b/MiraAPI/MiraAPI.csproj index c1e2979..aad0751 100644 --- a/MiraAPI/MiraAPI.csproj +++ b/MiraAPI/MiraAPI.csproj @@ -12,7 +12,7 @@ Steam - 2024.3.5 + 2024.6.18 @@ -25,10 +25,10 @@ - - - - + + + + diff --git a/MiraAPI/Patches/Options/GameOptionsMenuPatch.cs b/MiraAPI/Patches/Options/GameOptionsMenuPatch.cs index 202607e..fc494c8 100644 --- a/MiraAPI/Patches/Options/GameOptionsMenuPatch.cs +++ b/MiraAPI/Patches/Options/GameOptionsMenuPatch.cs @@ -17,12 +17,12 @@ public static class GameOptionsMenuPatch [HarmonyPatch(nameof(GameOptionsMenu.CreateSettings))] public static bool SettingsPatch(GameOptionsMenu __instance) { - if (GameSettingMenuPatches.currentSelectedMod == 0) return true; + if (GameSettingMenuPatches.CurrentSelectedMod == 0) return true; __instance.MapPicker.gameObject.SetActive(false); float num = 2.1f; - foreach (IModdedOptionGroup group in GameSettingMenuPatches.selectedMod.OptionGroups) + foreach (IModdedOptionGroup group in GameSettingMenuPatches.SelectedMod.OptionGroups) { CategoryHeaderMasked categoryHeaderMasked = Object.Instantiate(__instance.categoryHeaderOrigin, Vector3.zero, Quaternion.identity, __instance.settingsContainer); categoryHeaderMasked.SetHeader(CustomStringName.CreateAndRegister(group.GroupName), 20); diff --git a/MiraAPI/Patches/Options/GameSettingMenuPatches.cs b/MiraAPI/Patches/Options/GameSettingMenuPatches.cs index 420abbe..fb153d1 100644 --- a/MiraAPI/Patches/Options/GameSettingMenuPatches.cs +++ b/MiraAPI/Patches/Options/GameSettingMenuPatches.cs @@ -15,9 +15,11 @@ namespace MiraAPI.Patches.Options; [HarmonyPatch(typeof(GameSettingMenu))] public static class GameSettingMenuPatches { - public static int currentSelectedMod = 0; - public static MiraPluginInfo selectedMod = null; - public static TextMeshPro text; + public static int CurrentSelectedMod { get; private set; } + + public static MiraPluginInfo SelectedMod { get; private set; } + + private static TextMeshPro _text; [HarmonyPrefix] [HarmonyPatch(nameof(GameSettingMenu.Start))] @@ -32,11 +34,11 @@ public static class GameSettingMenuPatches tmpText.name = "SelectedMod"; tmpText.transform.localPosition = new Vector3(-3.3382f, 1.5399f, -2); - text = tmpText.GetComponent(); - text.fontSizeMax = 3.2f; + _text = tmpText.GetComponent(); + _text.fontSizeMax = 3.2f; UpdateText(__instance.GameSettingsTab, __instance.RoleSettingsTab); - text.alignment = TextAlignmentOptions.Center; + _text.alignment = TextAlignmentOptions.Center; GameObject nextButton = Object.Instantiate(__instance.BackButton, __instance.BackButton.transform.parent).gameObject; nextButton.transform.localPosition = new Vector3(-2.2663f, 1.5272f, -25f); @@ -49,9 +51,9 @@ public static class GameSettingMenuPatches passiveButton.OnClick = new ButtonClickedEvent(); passiveButton.OnClick.AddListener((UnityAction)(() => { - if (currentSelectedMod != MiraPluginManager.Instance.RegisteredPlugins.Count) + if (CurrentSelectedMod != MiraPluginManager.Instance.RegisteredPlugins.Count) { - currentSelectedMod += 1; + CurrentSelectedMod += 1; UpdateText(__instance.GameSettingsTab, __instance.RoleSettingsTab); } })); @@ -63,9 +65,9 @@ public static class GameSettingMenuPatches backButton.transform.FindChild("Active").gameObject.GetComponent().flipX = backButton.transform.FindChild("Inactive").gameObject.GetComponent().flipX = true; backButton.gameObject.GetComponent().OnClick.AddListener((UnityAction)(() => { - if (currentSelectedMod != 0) + if (CurrentSelectedMod != 0) { - currentSelectedMod -= 1; + CurrentSelectedMod -= 1; UpdateText(__instance.GameSettingsTab, __instance.RoleSettingsTab); } })); @@ -73,23 +75,23 @@ public static class GameSettingMenuPatches public static void UpdateText(GameOptionsMenu settings, RolesSettingsMenu roles) { - if (currentSelectedMod == 0) + if (CurrentSelectedMod == 0) { - text.text = "Default"; - text.fontSizeMax = 3.2f; + _text.text = "Default"; + _text.fontSizeMax = 3.2f; } else { - text.fontSizeMax = 2f; - selectedMod = MiraPluginManager.Instance.RegisteredPlugins.ElementAt(currentSelectedMod - 1).Value; - if (selectedMod == null) + _text.fontSizeMax = 2f; + SelectedMod = MiraPluginManager.Instance.RegisteredPlugins.ElementAt(CurrentSelectedMod - 1).Value; + if (SelectedMod == null) { - currentSelectedMod = 0; + CurrentSelectedMod = 0; UpdateText(settings, roles); } - string name = selectedMod.PluginInfo.Metadata.Name; - text.text = name.Substring(0, Math.Min(name.Length, 15)); + string name = SelectedMod.PluginInfo.Metadata.Name; + _text.text = name.Substring(0, Math.Min(name.Length, 15)); } if (roles is not null && roles.roleChances is not null) diff --git a/MiraAPI/Patches/Options/RoleSettingMenuPatches.cs b/MiraAPI/Patches/Options/RoleSettingMenuPatches.cs index ae21f1a..14837d7 100644 --- a/MiraAPI/Patches/Options/RoleSettingMenuPatches.cs +++ b/MiraAPI/Patches/Options/RoleSettingMenuPatches.cs @@ -28,7 +28,7 @@ public static class RoleSettingMenuPatches var maskBg = __instance.scrollBar.transform.FindChild("MaskBg"); - if (GameSettingMenuPatches.currentSelectedMod == 0) + if (GameSettingMenuPatches.CurrentSelectedMod == 0) { __instance.AllButton.transform.parent.gameObject.SetActive(true); __instance.AllButton.gameObject.SetActive(true); @@ -52,7 +52,7 @@ public static class RoleSettingMenuPatches num -= 0.522f; int num3 = 0; - foreach (var role in GameSettingMenuPatches.selectedMod.CustomRoles.Values.OfType().Where(role => role.Team == ModdedRoleTeams.Crewmate)) + foreach (var role in GameSettingMenuPatches.SelectedMod.CustomRoles.Values.OfType().Where(role => role.Team == ModdedRoleTeams.Crewmate)) { CreateQuotaOption(__instance, role as RoleBehaviour, ref num, num3); num3++; @@ -65,7 +65,7 @@ public static class RoleSettingMenuPatches num -= 0.522f; - foreach (var role in GameSettingMenuPatches.selectedMod.CustomRoles.Values.OfType().Where(role => role.Team == ModdedRoleTeams.Impostor)) + foreach (var role in GameSettingMenuPatches.SelectedMod.CustomRoles.Values.OfType().Where(role => role.Team == ModdedRoleTeams.Impostor)) { CreateQuotaOption(__instance, role as RoleBehaviour, ref num, num3); num3++; @@ -79,7 +79,7 @@ public static class RoleSettingMenuPatches num -= 0.522f; - foreach (var role in GameSettingMenuPatches.selectedMod.CustomRoles.Values.OfType().Where(role => role.Team == ModdedRoleTeams.Neutral)) + foreach (var role in GameSettingMenuPatches.SelectedMod.CustomRoles.Values.OfType().Where(role => role.Team == ModdedRoleTeams.Neutral)) { CreateQuotaOption(__instance, role as RoleBehaviour, ref num, num3); num3++; @@ -92,7 +92,7 @@ public static class RoleSettingMenuPatches [HarmonyPatch(nameof(RolesSettingsMenu.Update))] public static bool UpdatePatch() { - if (GameSettingMenuPatches.currentSelectedMod == 0) + if (GameSettingMenuPatches.CurrentSelectedMod == 0) { return true; } @@ -132,7 +132,7 @@ public static class RoleSettingMenuPatches __instance.advancedSettingChildren.Clear(); float num = -0.872f; - foreach (var option in GameSettingMenuPatches.selectedMod.Options.Where(option => option.AdvancedRole == role.GetType())) + foreach (var option in GameSettingMenuPatches.SelectedMod.Options.Where(option => option.AdvancedRole == role.GetType())) { OptionBehaviour newOpt = option.CreateOption(__instance.checkboxOrigin, __instance.numberOptionOrigin, __instance.stringOptionOrigin, __instance.AdvancedRolesSettings.transform); newOpt.transform.localPosition = new Vector3(2.17f, num, -2f); @@ -210,7 +210,7 @@ public static class RoleSettingMenuPatches ChangeTab(role, __instance); })); - if (index < GameSettingMenuPatches.selectedMod.CustomRoles.Count - 1) + if (index < GameSettingMenuPatches.SelectedMod.CustomRoles.Count - 1) { yPos += -0.43f; } diff --git a/MiraAPI/PluginLoading/MiraPluginInfo.cs b/MiraAPI/PluginLoading/MiraPluginInfo.cs index f44bc50..8214316 100644 --- a/MiraAPI/PluginLoading/MiraPluginInfo.cs +++ b/MiraAPI/PluginLoading/MiraPluginInfo.cs @@ -6,25 +6,16 @@ using System.Collections.Generic; namespace MiraAPI.PluginLoading; -public class MiraPluginInfo +public class MiraPluginInfo(string id, IMiraPlugin miraPlugin, PluginInfo info) { - public string PluginId { get; set; } - public IMiraPlugin MiraPlugin { get; set; } - public PluginInfo PluginInfo { get; set; } - public ConfigFile PluginConfig { get; set; } + public string PluginId { get; set; } = id; + public IMiraPlugin MiraPlugin { get; set; } = miraPlugin; + public PluginInfo PluginInfo { get; set; } = info; + public ConfigFile PluginConfig { get; set; } = miraPlugin.GetConfigFile(); public readonly List OptionGroups = []; public readonly List Options = []; public readonly Dictionary CustomRoles = []; public readonly Dictionary GameModes = []; - - public MiraPluginInfo(string id, IMiraPlugin miraPlugin, PluginInfo info) - { - PluginId = id; - MiraPlugin = miraPlugin; - PluginInfo = info; - PluginConfig = miraPlugin.GetConfigFile(); - } - } \ No newline at end of file diff --git a/MiraAPI/PluginLoading/MiraPluginManager.cs b/MiraAPI/PluginLoading/MiraPluginManager.cs index 4843658..5178873 100644 --- a/MiraAPI/PluginLoading/MiraPluginManager.cs +++ b/MiraAPI/PluginLoading/MiraPluginManager.cs @@ -74,17 +74,19 @@ public class MiraPluginManager if (typeof(IModdedOptionGroup).IsAssignableFrom(type)) { IModdedOptionGroup group = (IModdedOptionGroup)Activator.CreateInstance(type); - ModdedOptionGroup newGroup = new ModdedOptionGroup - { - AdvancedRole = group.AdvancedRole, - GroupColor = group.GroupColor, - GroupName = group.GroupName, - GroupVisible = group.GroupVisible - }; - ModdedOptionsManager.Groups.Add(newGroup); - ModdedOptionsManager.OriginalTypes.Add(type, newGroup); + ModdedOptionsManager.Groups.Add(group); + ModdedOptionsManager.OriginalTypes.Add(type, group); pluginInfo.OptionGroups.Add(group); + + foreach (var property in type.GetProperties()) + { + if (typeof(IModdedOption).IsAssignableFrom(property.PropertyType)) + { + IModdedOption option = (IModdedOption)property.GetValue(group); + option.Group = group; + } + } } } } diff --git a/nuget.config b/nuget.config index 3ee52a2..06c3fec 100644 --- a/nuget.config +++ b/nuget.config @@ -3,5 +3,8 @@ + + +