diff --git a/MiraAPI/Patches/Options/RoleSettingMenuPatches.cs b/MiraAPI/Patches/Options/RoleSettingMenuPatches.cs index 2350801..ff62645 100644 --- a/MiraAPI/Patches/Options/RoleSettingMenuPatches.cs +++ b/MiraAPI/Patches/Options/RoleSettingMenuPatches.cs @@ -106,11 +106,18 @@ public static class RoleSettingMenuPatches var role = roleSetting.Role as ICustomRole; if (role is null or { HideSettings: true }) return; - PluginSingleton.Instance.Config.TryGetEntry(role.NumConfigDefinition, out var numEntry); - numEntry.Value = roleSetting.RoleMaxCount; + try + { + role.ParentMod.PluginConfig.TryGetEntry(role.NumConfigDefinition, out var numEntry); + numEntry.Value = roleSetting.RoleMaxCount; - PluginSingleton.Instance.Config.TryGetEntry(role.ChanceConfigDefinition, out var chanceEntry); - chanceEntry.Value = roleSetting.RoleChance; + role.ParentMod.PluginConfig.TryGetEntry(role.ChanceConfigDefinition, out var chanceEntry); + chanceEntry.Value = roleSetting.RoleChance; + } + catch (Exception e) + { + Logger.Warning(e); + } roleSetting.UpdateValuesAndText(GameOptionsManager.Instance.CurrentGameOptions.RoleOptions); DestroyableSingleton.Instance.Notifier.AddRoleSettingsChangeMessage(roleSetting.Role.StringName, roleSetting.RoleMaxCount, roleSetting.RoleChance, roleSetting.Role.TeamType, false); @@ -156,14 +163,14 @@ public static class RoleSettingMenuPatches newOpt.Initialize(); } - __instance.scrollBar.CalculateAndSetYBounds((float)(__instance.advancedSettingChildren.Count + 3), 1f, 6f, 0.45f); + __instance.scrollBar.CalculateAndSetYBounds(__instance.advancedSettingChildren.Count + 3, 1f, 6f, 0.45f); } private static void ChangeTab(RoleBehaviour role, RolesSettingsMenu __instance) { ICustomRole customRole = role as ICustomRole; __instance.roleDescriptionText.text = customRole.RoleLongDescription; - __instance.roleTitleText.text = DestroyableSingleton.Instance.GetString(role.StringName, Array.Empty()); - __instance.roleScreenshot.sprite = Sprite.Create(role.RoleScreenshot.texture, new Rect(0, 0, 370, 230), Vector2.one / 2, 100); + __instance.roleTitleText.text = DestroyableSingleton.Instance.GetString(role.StringName, []); + __instance.roleScreenshot.sprite = Sprite.Create(customRole.OptionsScreenshot.LoadAsset().texture, new Rect(0, 0, 370, 230), Vector2.one / 2, 100); __instance.roleScreenshot.drawMode = SpriteDrawMode.Sliced; __instance.roleHeaderSprite.color = customRole.RoleColor; __instance.roleHeaderText.color = customRole.RoleColor.DarkenColor(); diff --git a/MiraAPI/Patches/Roles/RoleOptionsCollectionPatch.cs b/MiraAPI/Patches/Roles/RoleOptionsCollectionPatch.cs index e49c432..60a4794 100644 --- a/MiraAPI/Patches/Roles/RoleOptionsCollectionPatch.cs +++ b/MiraAPI/Patches/Roles/RoleOptionsCollectionPatch.cs @@ -1,7 +1,6 @@ using AmongUs.GameOptions; using HarmonyLib; using MiraAPI.Roles; -using Reactor.Utilities; namespace MiraAPI.Patches.Roles; @@ -22,7 +21,7 @@ public static class RoleOptionsCollectionPatch return false; } - PluginSingleton.Instance.Config.TryGetEntry(customRole.ChanceConfigDefinition, out var entry); + customRole.ParentMod.PluginConfig.TryGetEntry(customRole.ChanceConfigDefinition, out var entry); __result = entry.Value; return false; } @@ -44,7 +43,7 @@ public static class RoleOptionsCollectionPatch return false; } - PluginSingleton.Instance.Config.TryGetEntry(customRole.NumConfigDefinition, out var entry); + customRole.ParentMod.PluginConfig.TryGetEntry(customRole.NumConfigDefinition, out var entry); __result = entry.Value; return false; } diff --git a/MiraAPI/PluginLoading/MiraPluginManager.cs b/MiraAPI/PluginLoading/MiraPluginManager.cs index a96fbf8..6ac174e 100644 --- a/MiraAPI/PluginLoading/MiraPluginManager.cs +++ b/MiraAPI/PluginLoading/MiraPluginManager.cs @@ -84,6 +84,7 @@ public class MiraPluginManager if (typeof(IModdedOption).IsAssignableFrom(property.PropertyType)) { IModdedOption option = (IModdedOption)property.GetValue(group); + group.Options.Add(option); option.Group = group; option.AdvancedRole = group.AdvancedRole; } @@ -101,7 +102,7 @@ public class MiraPluginManager ClassInjector.RegisterTypeInIl2Cpp(type); - var role = CustomRoleManager.RegisterRole(type, attribute.RoleId); + var role = CustomRoleManager.RegisterRole(type, attribute.RoleId, pluginInfo); try { diff --git a/MiraAPI/Roles/CustomRoleManager.cs b/MiraAPI/Roles/CustomRoleManager.cs index 1d1f3c2..27cf965 100644 --- a/MiraAPI/Roles/CustomRoleManager.cs +++ b/MiraAPI/Roles/CustomRoleManager.cs @@ -36,7 +36,7 @@ public static class CustomRoleManager RoleManager.Instance.AllRoles = RoleManager.Instance.AllRoles.Concat(CustomRoles.Values).ToArray(); } - internal static RoleBehaviour RegisterRole(Type roleType, ushort roleId) + internal static RoleBehaviour RegisterRole(Type roleType, ushort roleId, MiraPluginInfo parentMod) { if (!(typeof(RoleBehaviour).IsAssignableFrom(roleType) && typeof(ICustomRole).IsAssignableFrom(roleType))) { @@ -79,7 +79,7 @@ public static class CustomRoleManager return roleBehaviour; } - var config = PluginSingleton.Instance.Config; + var config = parentMod.PluginConfig; config.Bind(customRole.NumConfigDefinition, 1); config.Bind(customRole.ChanceConfigDefinition, 100); @@ -88,7 +88,7 @@ public static class CustomRoleManager public static MiraPluginInfo FindParentMod(ICustomRole role) { - return MiraPluginManager.Instance.RegisteredPlugins.First(plugin => plugin.Value.CustomRoles.Values.Contains(role as RoleBehaviour)).Value; + return MiraPluginManager.Instance.RegisteredPlugins.First(plugin => plugin.Value.CustomRoles.ContainsValue(role as RoleBehaviour)).Value; } public static bool GetCustomRoleBehaviour(RoleTypes roleType, out ICustomRole result) @@ -150,8 +150,8 @@ public static class CustomRoleManager continue; } - PluginSingleton.Instance.Config.TryGetEntry(customRole.NumConfigDefinition, out var numEntry); - PluginSingleton.Instance.Config.TryGetEntry(customRole.ChanceConfigDefinition, out var chanceEntry); + customRole.ParentMod.PluginConfig.TryGetEntry(customRole.NumConfigDefinition, out var numEntry); + customRole.ParentMod.PluginConfig.TryGetEntry(customRole.ChanceConfigDefinition, out var chanceEntry); var netData = new NetData((uint)role.Role, BitConverter.GetBytes(numEntry.Value).AddRangeToArray(BitConverter.GetBytes(chanceEntry.Value))); @@ -186,8 +186,8 @@ public static class CustomRoleManager var num = BitConverter.ToInt32(netData.Data, 0); var chance = BitConverter.ToInt32(netData.Data, 4); - PluginSingleton.Instance.Config.TryGetEntry(customRole.NumConfigDefinition, out var numEntry); - PluginSingleton.Instance.Config.TryGetEntry(customRole.ChanceConfigDefinition, out var chanceEntry); + customRole.ParentMod.PluginConfig.TryGetEntry(customRole.NumConfigDefinition, out var numEntry); + customRole.ParentMod.PluginConfig.TryGetEntry(customRole.ChanceConfigDefinition, out var chanceEntry); numEntry.Value = num; chanceEntry.Value = chance; diff --git a/MiraAPI/Roles/ICustomRole.cs b/MiraAPI/Roles/ICustomRole.cs index 67e6506..15807e6 100644 --- a/MiraAPI/Roles/ICustomRole.cs +++ b/MiraAPI/Roles/ICustomRole.cs @@ -6,7 +6,7 @@ using MiraAPI.Utilities.Assets; using System.Text; using HarmonyLib; using MiraAPI.Networking; -using Reactor.Utilities; +using MiraAPI.PluginLoading; using UnityEngine; namespace MiraAPI.Roles; @@ -22,8 +22,8 @@ public interface ICustomRole Color RoleColor { get; } ModdedRoleTeams Team { get; } - - LoadableAsset OptionsScreenshot { get; } + + LoadableAsset OptionsScreenshot => MiraAssets.Empty; LoadableAsset Icon => MiraAssets.Empty; @@ -53,6 +53,8 @@ public interface ICustomRole RoleTypes GhostRole => Team == ModdedRoleTeams.Crewmate ? RoleTypes.CrewmateGhost : RoleTypes.ImpostorGhost; + MiraPluginInfo ParentMod => CustomRoleManager.FindParentMod(this); + void CreateOptions() { } void PlayerControlFixedUpdate(PlayerControl playerControl) { } @@ -72,8 +74,8 @@ public interface ICustomRole NetData GetNetData(RoleBehaviour roleBehaviour) { - PluginSingleton.Instance.Config.TryGetEntry(NumConfigDefinition, out var numEntry); - PluginSingleton.Instance.Config.TryGetEntry(ChanceConfigDefinition, out var chanceEntry); + ParentMod.PluginConfig.TryGetEntry(NumConfigDefinition, out var numEntry); + ParentMod.PluginConfig.TryGetEntry(ChanceConfigDefinition, out var chanceEntry); return new NetData((uint)roleBehaviour.Role, BitConverter.GetBytes(numEntry.Value).AddRangeToArray(BitConverter.GetBytes(chanceEntry.Value))); }