From 44d5c7762bd6a119125777d86a2034b143a7c538 Mon Sep 17 00:00:00 2001 From: NotAKidoS <37721153+NotAKidOnSteam@users.noreply.github.com> Date: Thu, 22 Jun 2023 21:47:50 -0500 Subject: [PATCH] [AvatarScaleMod] Implement actual avatar scaling as test. fuckin 30 minutes proof of concept --- AvatarScale/HarmonyPatches.cs | 36 +++++++++++++++++------------------ AvatarScale/Main.cs | 3 +++ AvatarScale/Utils.cs | 24 +++++++++++++++++++++++ 3 files changed, 44 insertions(+), 19 deletions(-) create mode 100644 AvatarScale/Utils.cs diff --git a/AvatarScale/HarmonyPatches.cs b/AvatarScale/HarmonyPatches.cs index 1b61424..a8b7e20 100644 --- a/AvatarScale/HarmonyPatches.cs +++ b/AvatarScale/HarmonyPatches.cs @@ -1,11 +1,11 @@ -using ABI_RC.Core; -using ABI_RC.Core.Player; +using ABI_RC.Core.Player; using HarmonyLib; namespace NAK.AvatarScaleMod.HarmonyPatches; class PlayerSetupPatches { + /** [HarmonyPostfix] [HarmonyPatch(typeof(PlayerSetup), nameof(PlayerSetup.SetupAvatar))] static void Postfix_PlayerSetup_SetupAvatar(ref PlayerSetup __instance, ref float ____initialAvatarHeight) @@ -19,7 +19,7 @@ class PlayerSetupPatches } // User has cleared MelonPrefs, store a default value. - AvatarScaleMod.HiddenAvatarScale.Value = CalculateParameterValue(____initialAvatarHeight); + AvatarScaleMod.HiddenAvatarScale.Value = Utils.CalculateParameterValue(____initialAvatarHeight); } [HarmonyPrefix] @@ -28,29 +28,27 @@ class PlayerSetupPatches { if (!AvatarScaleMod.EntryEnabled.Value) return; - if (!IsSupportedAvatar(__instance.animatorManager) && !AvatarScaleMod.EntryPersistAnyways.Value) + if (!Utils.IsSupportedAvatar(__instance.animatorManager) && !AvatarScaleMod.EntryPersistAnyways.Value) { return; } - - AvatarScaleMod.HiddenAvatarScale.Value = CalculateParameterValue(____avatarHeight); + + AvatarScaleMod.HiddenAvatarScale.Value = Utils.CalculateParameterValue(____avatarHeight); } + **/ - public static float CalculateParameterValue(float lastAvatarHeight) + [HarmonyPostfix] + [HarmonyPatch(typeof(PlayerSetup), nameof(PlayerSetup.SetupAvatar))] + static void Postfix_PlayerSetup_SetupAvatar(ref PlayerSetup __instance) { - float t = (lastAvatarHeight - AvatarScaleMod.MinimumHeight) / (AvatarScaleMod.MaximumHeight - AvatarScaleMod.MinimumHeight); - return t; - } - - public static bool IsSupportedAvatar(CVRAnimatorManager manager) - { - if (manager.animatorParameterFloatList.Contains(AvatarScaleMod.ParameterName) && manager._animator != null) + try { - if (manager._advancedAvatarIndicesFloat.TryGetValue(AvatarScaleMod.ParameterName, out int index)) - { - return index < manager._advancedAvatarCacheFloat.Count; - } + __instance._avatar.AddComponent().Initialize(__instance._initialAvatarHeight, __instance.initialScale); + } + catch (Exception e) + { + AvatarScaleMod.Logger.Error($"Error during the patched method {nameof(Postfix_PlayerSetup_SetupAvatar)}"); + AvatarScaleMod.Logger.Error(e); } - return false; } } \ No newline at end of file diff --git a/AvatarScale/Main.cs b/AvatarScale/Main.cs index d6303c8..df26ce9 100644 --- a/AvatarScale/Main.cs +++ b/AvatarScale/Main.cs @@ -8,6 +8,8 @@ public class AvatarScaleMod : MelonMod internal const float MinimumHeight = 0.25f; internal const float MaximumHeight = 2.5f; + internal static MelonLogger.Instance Logger; + public static readonly MelonPreferences_Category Category = MelonPreferences.CreateCategory(nameof(AvatarScaleMod)); @@ -22,6 +24,7 @@ public class AvatarScaleMod : MelonMod public override void OnInitializeMelon() { + Logger = LoggerInstance; ApplyPatches(typeof(HarmonyPatches.PlayerSetupPatches)); } diff --git a/AvatarScale/Utils.cs b/AvatarScale/Utils.cs new file mode 100644 index 0000000..5388f01 --- /dev/null +++ b/AvatarScale/Utils.cs @@ -0,0 +1,24 @@ +using ABI_RC.Core; + +namespace NAK.AvatarScaleMod; + +class Utils +{ + public static bool IsSupportedAvatar(CVRAnimatorManager manager) + { + if (manager.animatorParameterFloatList.Contains(AvatarScaleMod.ParameterName) && manager._animator != null) + { + if (manager._advancedAvatarIndicesFloat.TryGetValue(AvatarScaleMod.ParameterName, out int index)) + { + return index < manager._advancedAvatarCacheFloat.Count; + } + } + return false; + } + + public static float CalculateParameterValue(float lastAvatarHeight) + { + float t = (lastAvatarHeight - AvatarScaleMod.MinimumHeight) / (AvatarScaleMod.MaximumHeight - AvatarScaleMod.MinimumHeight); + return t; + } +}