update max height

This commit is contained in:
NotAKidoS 2023-04-29 02:02:24 -05:00
parent 214b05ff8e
commit 7187d3acf3
2 changed files with 28 additions and 7 deletions

View file

@ -1,4 +1,5 @@
using ABI_RC.Core.Player;
using ABI_RC.Core;
using ABI_RC.Core.Player;
using HarmonyLib;
namespace NAK.AvatarScaleMod.HarmonyPatches;
@ -6,12 +7,12 @@ namespace NAK.AvatarScaleMod.HarmonyPatches;
class PlayerSetupPatches
{
[HarmonyPostfix]
[HarmonyPatch(typeof(PlayerSetup), nameof(PlayerSetup.SetupAvatarGeneral))]
static void Postfix_PlayerSetup_SetupAvatarGeneral(ref PlayerSetup __instance, ref float ____initialAvatarHeight)
[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 > 0)
if (AvatarScaleMod.HiddenAvatarScale.Value > 0f)
{
__instance.changeAnimatorParam(AvatarScaleMod.ParameterName, AvatarScaleMod.HiddenAvatarScale.Value);
return;
@ -23,10 +24,15 @@ class PlayerSetupPatches
[HarmonyPrefix]
[HarmonyPatch(typeof(PlayerSetup), nameof(PlayerSetup.ClearAvatar))]
static void Prefix_PlayerSetup_ClearAvatar(ref float ____avatarHeight)
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);
}
@ -35,4 +41,16 @@ class PlayerSetupPatches
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;
}
}

View file

@ -6,13 +6,16 @@ public class AvatarScaleMod : MelonMod
{
internal const string ParameterName = "AvatarScale";
internal const float MinimumHeight = 0.25f;
internal const float MaximumHeight = 2f;
internal const float MaximumHeight = 2.5f;
public static readonly MelonPreferences_Category Category =
MelonPreferences.CreateCategory(nameof(AvatarScaleMod));
public static readonly MelonPreferences_Entry<bool> EntryEnabled =
Category.CreateEntry("Enabled", true, description: "Should there be persistant avatar scaling? This only works properly on supported avatars.");
Category.CreateEntry("Enabled", true, description: "Should there be persistant avatar scaling? This only works properly across supported avatars.");
public static readonly MelonPreferences_Entry<bool> EntryPersistAnyways =
Category.CreateEntry("Persist From Unsupported", true, description: "Should avatar scale persist even from unsupported avatars?");
public static readonly MelonPreferences_Entry<float> HiddenAvatarScale =
Category.CreateEntry("Last Avatar Scale", -1f, is_hidden: true);