From 126df24a2306ee8b2d58b57ba1b68d8eb35ca5ab Mon Sep 17 00:00:00 2001 From: XtraCube <72575280+XtraCube@users.noreply.github.com> Date: Sat, 31 Aug 2024 21:33:32 -0400 Subject: [PATCH] HideFromIl2Cpp and slight modification to TimedModifier to use new HudString method --- .../Modifiers/Freezer/FreezeModifier.cs | 15 ++++++++++++++- MiraAPI.Example/Roles/FreezerRole.cs | 4 +++- MiraAPI.Example/Roles/TeleporterRole.cs | 4 +++- MiraAPI/Modifiers/ModifierComponent.cs | 14 ++++++++++---- MiraAPI/Modifiers/Types/TimedModifier.cs | 12 +++++++++++- MiraAPI/Roles/ICustomRole.cs | 7 +++++-- 6 files changed, 46 insertions(+), 10 deletions(-) diff --git a/MiraAPI.Example/Modifiers/Freezer/FreezeModifier.cs b/MiraAPI.Example/Modifiers/Freezer/FreezeModifier.cs index fc6746f..12a87ec 100644 --- a/MiraAPI.Example/Modifiers/Freezer/FreezeModifier.cs +++ b/MiraAPI.Example/Modifiers/Freezer/FreezeModifier.cs @@ -1,5 +1,8 @@ -using MiraAPI.Modifiers; +using Il2CppSystem; +using MiraAPI.Example.Roles; +using MiraAPI.Modifiers; using MiraAPI.Modifiers.Types; +using UnityEngine; namespace MiraAPI.Example.Modifiers.Freezer; @@ -20,6 +23,16 @@ public class FreezeModifier : TimedModifier } } + public override void FixedUpdate() + { + base.FixedUpdate(); + + if (Player?.AmOwner == true || PlayerControl.LocalPlayer.Data.Role is FreezerRole) + { + Player?.cosmetics.SetOutline(true, new Nullable(Palette.LightBlue)); + } + } + public override void OnTimerComplete() { if (Player?.AmOwner == true) diff --git a/MiraAPI.Example/Roles/FreezerRole.cs b/MiraAPI.Example/Roles/FreezerRole.cs index 490ce3d..55e22c0 100644 --- a/MiraAPI.Example/Roles/FreezerRole.cs +++ b/MiraAPI.Example/Roles/FreezerRole.cs @@ -1,4 +1,5 @@ -using MiraAPI.Roles; +using Il2CppInterop.Runtime.Attributes; +using MiraAPI.Roles; using MiraAPI.Utilities.Assets; using UnityEngine; @@ -12,6 +13,7 @@ public class FreezerRole : ImpostorRole, ICustomRole public string RoleDescription => RoleLongDescription; public Color RoleColor => Palette.Blue; public ModdedRoleTeams Team => ModdedRoleTeams.Impostor; + [HideFromIl2Cpp] public LoadableAsset OptionsScreenshot => ExampleAssets.Banner; public int MaxPlayers => 2; } diff --git a/MiraAPI.Example/Roles/TeleporterRole.cs b/MiraAPI.Example/Roles/TeleporterRole.cs index b41baf8..c45f942 100644 --- a/MiraAPI.Example/Roles/TeleporterRole.cs +++ b/MiraAPI.Example/Roles/TeleporterRole.cs @@ -1,4 +1,5 @@ -using MiraAPI.Roles; +using Il2CppInterop.Runtime.Attributes; +using MiraAPI.Roles; using MiraAPI.Utilities.Assets; using UnityEngine; @@ -12,5 +13,6 @@ public class TeleporterRole : CrewmateRole, ICustomRole public string RoleDescription => RoleLongDescription; public Color RoleColor => new Color32(221, 176, 152, 255); public ModdedRoleTeams Team => ModdedRoleTeams.Crewmate; + [HideFromIl2Cpp] public LoadableAsset OptionsScreenshot => ExampleAssets.Banner; } diff --git a/MiraAPI/Modifiers/ModifierComponent.cs b/MiraAPI/Modifiers/ModifierComponent.cs index 785ef30..eecda1a 100644 --- a/MiraAPI/Modifiers/ModifierComponent.cs +++ b/MiraAPI/Modifiers/ModifierComponent.cs @@ -4,6 +4,7 @@ using System.Collections.Immutable; using System.Globalization; using System.Linq; using System.Text; +using Il2CppInterop.Runtime.Attributes; using MiraAPI.Modifiers.Types; using MiraAPI.Utilities; using Reactor.Utilities; @@ -22,8 +23,10 @@ public class ModifierComponent(IntPtr ptr) : MonoBehaviour(ptr) /// /// Gets the active modifiers on the player. /// + [HideFromIl2Cpp] public ImmutableList ActiveModifiers => Modifiers.ToImmutableList(); + [HideFromIl2Cpp] private List Modifiers { get; set; } = []; private PlayerControl? _player; @@ -115,10 +118,6 @@ public class ModifierComponent(IntPtr ptr) : MonoBehaviour(ptr) foreach (var mod in baseModifiers) { stringBuild.Append(CultureInfo.InvariantCulture, $"\n{mod.GetHudString()}"); - if (mod is TimedModifier timer) - { - stringBuild.Append(CultureInfo.InvariantCulture, $" ({Math.Round(timer.Duration - timer.TimeRemaining, 0)}s/{timer.Duration}s)"); - } } _modifierText!.text = $"Modifiers:{stringBuild}"; } @@ -132,6 +131,7 @@ public class ModifierComponent(IntPtr ptr) : MonoBehaviour(ptr) /// Removes a modifier from the player. /// /// The modifier type. + [HideFromIl2Cpp] public void RemoveModifier(Type type) { var modifier = Modifiers.Find(x => x.GetType() == type); @@ -149,6 +149,7 @@ public class ModifierComponent(IntPtr ptr) : MonoBehaviour(ptr) /// Removes a modifier from the player. /// /// The modifier type. + [HideFromIl2Cpp] public void RemoveModifier() where T : BaseModifier { RemoveModifier(typeof(T)); @@ -158,6 +159,7 @@ public class ModifierComponent(IntPtr ptr) : MonoBehaviour(ptr) /// Removes a modifier from the player. /// /// The modifier ID. + [HideFromIl2Cpp] public void RemoveModifier(uint modifierId) { var modifier = Modifiers.Find(x => x.ModifierId == modifierId); @@ -175,6 +177,7 @@ public class ModifierComponent(IntPtr ptr) : MonoBehaviour(ptr) /// Removes a modifier from the player. /// /// The modifier object. + [HideFromIl2Cpp] public void RemoveModifier(BaseModifier modifier) { if (!Modifiers.Contains(modifier)) @@ -191,6 +194,7 @@ public class ModifierComponent(IntPtr ptr) : MonoBehaviour(ptr) /// /// The modifier to add. /// The modifier that was added. + [HideFromIl2Cpp] public BaseModifier? AddModifier(BaseModifier modifier) { if (Modifiers.Contains(modifier)) @@ -218,6 +222,7 @@ public class ModifierComponent(IntPtr ptr) : MonoBehaviour(ptr) /// /// The modifier type. /// The modifier that was added. + [HideFromIl2Cpp] public BaseModifier? AddModifier(Type type) { var modifierId = ModifierManager.GetModifierId(type); @@ -249,6 +254,7 @@ public class ModifierComponent(IntPtr ptr) : MonoBehaviour(ptr) /// /// The Type of the modifier. /// The new modifier. + [HideFromIl2Cpp] public T? AddModifier() where T : BaseModifier { return AddModifier(typeof(T)) as T; diff --git a/MiraAPI/Modifiers/Types/TimedModifier.cs b/MiraAPI/Modifiers/Types/TimedModifier.cs index 248af76..f18b136 100644 --- a/MiraAPI/Modifiers/Types/TimedModifier.cs +++ b/MiraAPI/Modifiers/Types/TimedModifier.cs @@ -1,4 +1,5 @@ -using MiraAPI.Utilities; +using System; +using MiraAPI.Utilities; using Reactor.Utilities; using UnityEngine; @@ -39,6 +40,15 @@ public abstract class TimedModifier : BaseModifier /// public float TimeRemaining { get; protected set; } + /// + /// Gets the HUD information for Timed Modifier, including the time remaining. + /// + /// A string with the hud information + timer. + public override string GetHudString() + { + return base.GetHudString() + $" ({Math.Round(Duration - TimeRemaining, 0)}s/{Duration}s)"; + } + /// /// The FixedUpdate method for timed modifiers. Automatically handles the timer logic. /// diff --git a/MiraAPI/Roles/ICustomRole.cs b/MiraAPI/Roles/ICustomRole.cs index 2ffd24f..ffe2327 100644 --- a/MiraAPI/Roles/ICustomRole.cs +++ b/MiraAPI/Roles/ICustomRole.cs @@ -1,10 +1,11 @@ -using AmongUs.GameOptions; +using System.Text; +using AmongUs.GameOptions; using BepInEx.Configuration; +using Il2CppInterop.Runtime.Attributes; using MiraAPI.Modifiers; using MiraAPI.PluginLoading; using MiraAPI.Utilities; using MiraAPI.Utilities.Assets; -using System.Text; using UnityEngine; namespace MiraAPI.Roles; @@ -47,11 +48,13 @@ public interface ICustomRole /// /// Gets the Sprite used for the Role Options menu screenshot. /// + [HideFromIl2Cpp] LoadableAsset OptionsScreenshot => MiraAssets.Empty; /// /// Gets the Sprite used for the Role Icon. /// + [HideFromIl2Cpp] LoadableAsset Icon => MiraAssets.Empty; ///