From fc4baf0316b50e6098fd43b45f89207be8383100 Mon Sep 17 00:00:00 2001 From: XtraCube <72575280+XtraCube@users.noreply.github.com> Date: Sun, 18 Aug 2024 23:21:46 -0400 Subject: [PATCH] fixing HUD buttons not working oops --- MiraAPI/Hud/CustomActionButton.cs | 17 ++++-------- MiraAPI/Hud/RegisterButtonAttribute.cs | 20 ++------------ MiraAPI/Patches/MeetingHudPatches.cs | 18 +++++++++++++ MiraAPI/Patches/PlayerControlPatches.cs | 27 +++++++++++++++++++ MiraAPI/PluginLoading/MiraPluginManager.cs | 15 ++++++++++- .../Utilities/Assets/LoadableResourceAsset.cs | 6 ++--- MiraAPI/Utilities/Assets/MiraAssets.cs | 12 ++++----- 7 files changed, 75 insertions(+), 40 deletions(-) create mode 100644 MiraAPI/Patches/MeetingHudPatches.cs create mode 100644 MiraAPI/Patches/PlayerControlPatches.cs diff --git a/MiraAPI/Hud/CustomActionButton.cs b/MiraAPI/Hud/CustomActionButton.cs index ed5cf3e..8262358 100644 --- a/MiraAPI/Hud/CustomActionButton.cs +++ b/MiraAPI/Hud/CustomActionButton.cs @@ -127,12 +127,11 @@ public abstract class CustomActionButton { Timer -= Time.deltaTime; } - else + else if (HasEffect && EffectActive) { - if (HasEffect && EffectActive) - { - EffectEndHandler(); - } + EffectActive = false; + Timer = Cooldown; + OnEffectEnd(); } if (CanUse()) @@ -143,15 +142,9 @@ public abstract class CustomActionButton { Button.SetDisabled(); } + Button.SetCoolDown(Timer, EffectActive ? EffectDuration : Cooldown); FixedUpdate(playerControl); } - - private void EffectEndHandler() - { - EffectActive = false; - Timer = Cooldown; - OnEffectEnd(); - } } \ No newline at end of file diff --git a/MiraAPI/Hud/RegisterButtonAttribute.cs b/MiraAPI/Hud/RegisterButtonAttribute.cs index 818fec5..19fa8e8 100644 --- a/MiraAPI/Hud/RegisterButtonAttribute.cs +++ b/MiraAPI/Hud/RegisterButtonAttribute.cs @@ -4,21 +4,5 @@ using System.Reflection; namespace MiraAPI.Hud; -public class RegisterButtonAttribute : Attribute -{ - private static readonly HashSet RegisteredAssemblies = []; - - public static void Register(Assembly assembly) - { - if (!RegisteredAssemblies.Add(assembly)) return; - - foreach (var type in assembly.GetTypes()) - { - var attribute = type.GetCustomAttribute(); - if (attribute != null) - { - CustomButtonManager.RegisterButton(type); - } - } - } -} \ No newline at end of file +[AttributeUsage(AttributeTargets.Class)] +public class RegisterButtonAttribute : Attribute; \ No newline at end of file diff --git a/MiraAPI/Patches/MeetingHudPatches.cs b/MiraAPI/Patches/MeetingHudPatches.cs new file mode 100644 index 0000000..92fa311 --- /dev/null +++ b/MiraAPI/Patches/MeetingHudPatches.cs @@ -0,0 +1,18 @@ +using HarmonyLib; +using MiraAPI.Hud; + +namespace MiraAPI.Patches; + +[HarmonyPatch(typeof(MeetingHud))] +public static class MeetingHudPatches +{ + [HarmonyPostfix] + [HarmonyPatch(nameof(MeetingHud.VotingComplete))] + public static void VotingCompletePostfix() + { + foreach (var customActionButton in CustomButtonManager.CustomButtons) + { + customActionButton.ResetCooldown(); + } + } +} \ No newline at end of file diff --git a/MiraAPI/Patches/PlayerControlPatches.cs b/MiraAPI/Patches/PlayerControlPatches.cs new file mode 100644 index 0000000..68bd25e --- /dev/null +++ b/MiraAPI/Patches/PlayerControlPatches.cs @@ -0,0 +1,27 @@ +using HarmonyLib; +using MiraAPI.Hud; + +namespace MiraAPI.Patches; + +[HarmonyPatch(typeof(PlayerControl))] +public static class PlayerControlPatches +{ + + [HarmonyPostfix] + [HarmonyPatch(nameof(PlayerControl.FixedUpdate))] + public static void PlayerControlFixedUpdatePostfix(PlayerControl __instance) + { + if (!__instance.AmOwner) return; + + foreach (var button in CustomButtonManager.CustomButtons) + { + if (!button.Enabled(__instance.Data.Role)) + { + continue; + } + + button.FixedUpdateHandler(__instance); + } + } + +} \ No newline at end of file diff --git a/MiraAPI/PluginLoading/MiraPluginManager.cs b/MiraAPI/PluginLoading/MiraPluginManager.cs index 370f3c6..4843658 100644 --- a/MiraAPI/PluginLoading/MiraPluginManager.cs +++ b/MiraAPI/PluginLoading/MiraPluginManager.cs @@ -9,6 +9,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Reflection; +using MiraAPI.Hud; namespace MiraAPI.PluginLoading; @@ -36,6 +37,7 @@ public class MiraPluginManager RegisterRoleAttribute(assembly, info); RegisterOptionsGroups(assembly, info); RegisterOptionsAttributes(assembly, info); + RegisterButtonAttribute(assembly); RegisteredPlugins.Add(assembly, info); @@ -48,7 +50,6 @@ public class MiraPluginManager return RegisteredPlugins.Values.First(plugin => plugin.PluginId == guid); } - private static void RegisterOptionsAttributes(Assembly assembly, MiraPluginInfo pluginInfo) { foreach (var type in assembly.GetTypes()) @@ -102,4 +103,16 @@ public class MiraPluginManager pluginInfo.CustomRoles.Add((ushort)role.Role, role); } } + + private static void RegisterButtonAttribute(Assembly assembly) + { + foreach (var type in assembly.GetTypes()) + { + var attribute = type.GetCustomAttribute(); + if (attribute != null) + { + CustomButtonManager.RegisterButton(type); + } + } + } } \ No newline at end of file diff --git a/MiraAPI/Utilities/Assets/LoadableResourceAsset.cs b/MiraAPI/Utilities/Assets/LoadableResourceAsset.cs index 068ee13..c868c9a 100644 --- a/MiraAPI/Utilities/Assets/LoadableResourceAsset.cs +++ b/MiraAPI/Utilities/Assets/LoadableResourceAsset.cs @@ -2,7 +2,7 @@ namespace MiraAPI.Utilities.Assets { - public class LoadableResourceAsset(string name, string resourcesFolder) : LoadableAsset + public class LoadableResourceAsset(string path) : LoadableAsset { public override Sprite LoadAsset() { @@ -13,11 +13,11 @@ namespace MiraAPI.Utilities.Assets try { - return _loadedAsset = SpriteTools.LoadSpriteFromPath(resourcesFolder + name); + return _loadedAsset = SpriteTools.LoadSpriteFromPath(path); } catch { - Debug.LogError($"Not loading, invalid asset: {name}"); + Debug.LogError($"Not loading, invalid asset: {path}"); return null; } } diff --git a/MiraAPI/Utilities/Assets/MiraAssets.cs b/MiraAPI/Utilities/Assets/MiraAssets.cs index f42d011..106638b 100644 --- a/MiraAPI/Utilities/Assets/MiraAssets.cs +++ b/MiraAPI/Utilities/Assets/MiraAssets.cs @@ -2,12 +2,12 @@ { public static class MiraAssets { - public static readonly LoadableResourceAsset Empty = new("", ""); + public static readonly LoadableResourceAsset Empty = new(""); - public static readonly LoadableResourceAsset NextButton = new("NextButton.png", "MiraAPI.Resources."); - public static readonly LoadableResourceAsset NextButtonActive = new("NextButtonActive.png", "MiraAPI.Resources."); - public static readonly LoadableResourceAsset Cog = new("Cog.png", "MiraAPI.Resources."); - public static readonly LoadableResourceAsset CogActive = new("CogActive.png", "MiraAPI.Resources."); - public static readonly LoadableResourceAsset Banner = new("FortniteBanner.jpeg", "MiraAPI.Resources."); + public static readonly LoadableResourceAsset NextButton = new("MiraAPI.Resources.NextButton.png"); + public static readonly LoadableResourceAsset NextButtonActive = new("MiraAPI.Resources.NextButtonActive.png"); + public static readonly LoadableResourceAsset Cog = new("MiraAPI.Resources.Cog.png"); + public static readonly LoadableResourceAsset CogActive = new("MiraAPI.Resources.CogActive.png"); + public static readonly LoadableResourceAsset Banner = new("MiraAPI.Resources.FortniteBanner.jpeg"); } }