From e070d86894bc61c2b677863ff72ff8518b0061ec Mon Sep 17 00:00:00 2001 From: NotAKidoS <37721153+NotAKidOnSteam@users.noreply.github.com> Date: Thu, 18 May 2023 23:34:05 -0500 Subject: [PATCH] Add testing local NetIK pass. i wanted to compare proper lowerleg fix vs funni netik pass fix. --- IKFixes/HarmonyPatches.cs | 33 +++++++++++++++++++++++++++++++++ IKFixes/Main.cs | 4 ++++ 2 files changed, 37 insertions(+) diff --git a/IKFixes/HarmonyPatches.cs b/IKFixes/HarmonyPatches.cs index 1aba20c..ce04070 100644 --- a/IKFixes/HarmonyPatches.cs +++ b/IKFixes/HarmonyPatches.cs @@ -6,6 +6,7 @@ using ABI_RC.Systems.MovementSystem; using HarmonyLib; using RootMotion.FinalIK; using UnityEngine; +using UnityEngine.Events; namespace NAK.IKFixes.HarmonyPatches; @@ -263,6 +264,38 @@ internal static class IKSystemPatches __instance.applyOriginalHipPosition = true; __instance.applyOriginalHipRotation = true; } + + static HumanPose _enforcementPose; + + [HarmonyPrefix] + [HarmonyPatch(typeof(IKSystem), nameof(IKSystem.InitializeHalfBodyIK))] + static void Prefix_IKSystem_InitializeHalfBodyIK(IKSystem __instance) + { + if (IKSystem._vrik != null) + { + UnityAction onPostSolverUpdate = null; + onPostSolverUpdate = () => + { + if (!IKFixes.EntryNetIKPass.Value) return; + + // This will enforce locally what we see over the network + if (__instance._poseHandler == null) + __instance._poseHandler = new HumanPoseHandler(__instance.animator.avatar, __instance.animator.transform); + + Transform hipTransform = __instance.animator.GetBoneTransform(HumanBodyBones.Hips); + Vector3 hipPosition = hipTransform.position; + Quaternion hipRotation = hipTransform.rotation; + + __instance._poseHandler.GetHumanPose(ref _enforcementPose); + __instance._poseHandler.SetHumanPose(ref _enforcementPose); + + hipTransform.position = hipPosition; + hipTransform.rotation = hipRotation; + }; + + IKSystem._vrik.onPostSolverUpdate.AddListener(onPostSolverUpdate); + } + } } internal static class VRIKPatches diff --git a/IKFixes/Main.cs b/IKFixes/Main.cs index a942bac..373320f 100644 --- a/IKFixes/Main.cs +++ b/IKFixes/Main.cs @@ -28,6 +28,10 @@ public class IKFixes : MelonMod public static readonly MelonPreferences_Entry EntryAltElbowDirection = Category.CreateEntry("Alt Elbow Direction", true, description: "Should bodyRotation be reset to identity when muscleupdate happens? Should fix chest tracking & tpose while running."); + public static readonly MelonPreferences_Entry EntryNetIKPass = + Category.CreateEntry("Network IK Pass", true, description: "Should NetIK pass be run?"); + + public override void OnInitializeMelon() { ApplyPatches(typeof(HarmonyPatches.VRIKPatches));