mirror of
https://github.com/NotAKidoS/NAK_CVR_Mods.git
synced 2025-09-02 22:39:22 +00:00
56 lines
No EOL
1.9 KiB
C#
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;
|
|
}
|
|
} |