mirror of
https://github.com/NotAKidoS/NAK_CVR_Mods.git
synced 2025-09-02 14:29:25 +00:00
[AvatarScaleMod] Implement actual avatar scaling as test.
fuckin 30 minutes proof of concept
This commit is contained in:
parent
3d8f392f1d
commit
44d5c7762b
3 changed files with 44 additions and 19 deletions
|
@ -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<AvatarScaleManager>().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;
|
||||
}
|
||||
}
|
|
@ -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));
|
||||
}
|
||||
|
||||
|
|
24
AvatarScale/Utils.cs
Normal file
24
AvatarScale/Utils.cs
Normal file
|
@ -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;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue