NAK_CVR_Mods/AvatarScale/HarmonyPatches.cs
2023-04-29 02:02:24 -05:00

56 lines
No EOL
1.9 KiB
C#

using ABI_RC.Core;
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)
{
if (!AvatarScaleMod.EntryEnabled.Value) return;
if (AvatarScaleMod.HiddenAvatarScale.Value > 0f)
{
__instance.changeAnimatorParam(AvatarScaleMod.ParameterName, AvatarScaleMod.HiddenAvatarScale.Value);
return;
}
// User has cleared MelonPrefs, store a default value.
AvatarScaleMod.HiddenAvatarScale.Value = CalculateParameterValue(____initialAvatarHeight);
}
[HarmonyPrefix]
[HarmonyPatch(typeof(PlayerSetup), nameof(PlayerSetup.ClearAvatar))]
static void Prefix_PlayerSetup_ClearAvatar(ref PlayerSetup __instance, ref float ____avatarHeight)
{
if (!AvatarScaleMod.EntryEnabled.Value) return;
if (!IsSupportedAvatar(__instance.animatorManager) && !AvatarScaleMod.EntryPersistAnyways.Value)
{
return;
}
AvatarScaleMod.HiddenAvatarScale.Value = CalculateParameterValue(____avatarHeight);
}
public static float CalculateParameterValue(float lastAvatarHeight)
{
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)
{
if (manager._advancedAvatarIndicesFloat.TryGetValue(AvatarScaleMod.ParameterName, out int index))
{
return index < manager._advancedAvatarCacheFloat.Count;
}
}
return false;
}
}