diff --git a/RelativeSync/Patches.cs b/RelativeSync/Patches.cs index 43937dd..10acf15 100644 --- a/RelativeSync/Patches.cs +++ b/RelativeSync/Patches.cs @@ -6,6 +6,7 @@ using ABI.CCK.Components; using HarmonyLib; using NAK.RelativeSync.Components; using NAK.RelativeSync.Networking; +using UnityEngine; namespace NAK.RelativeSync.Patches; @@ -27,20 +28,6 @@ internal static class PuppetMasterPatches { __instance.AddComponentIfMissing(); } - - private static bool ShouldProcessAvatarVisibility { get; set; } - - [HarmonyPrefix] - [HarmonyPatch(typeof(PuppetMaster), nameof(PuppetMaster.ProcessAvatarVisibility))] - private static bool Prefix_PuppetMaster_ProcessAvatarVisibility() - => ShouldProcessAvatarVisibility; - - public static void ForceProcessAvatarVisibility(PuppetMaster puppetMaster) - { - ShouldProcessAvatarVisibility = true; - puppetMaster.ProcessAvatarVisibility(); - ShouldProcessAvatarVisibility = false; - } } internal static class CVRSeatPatches @@ -104,16 +91,18 @@ internal static class NetIKController_Patches { if (!RelativeSyncManager.NetIkControllersToRelativeSyncControllers.TryGetValue(__instance, out RelativeSyncController syncController)) - { - // Process visibility only after applying network IK - PuppetMasterPatches.ForceProcessAvatarVisibility(__instance._puppetMaster); return; - } // Apply relative sync after the network IK has been applied syncController.OnPostNetIkControllerLateUpdate(); - - // Process visibility after we have moved the remote player - PuppetMasterPatches.ForceProcessAvatarVisibility(__instance._puppetMaster); + } + + [HarmonyPrefix] + [HarmonyPatch(typeof(NetIKController), nameof(NetIKController.GetLocalPlayerPosition))] + private static bool Prefix_NetIKController_GetLocalPlayerPosition(ref NetIKController __instance, ref Vector3 __result) + { + // why is the original method so bad + __result = PlayerSetup.Instance.activeCam.transform.position; + return false; } } \ No newline at end of file diff --git a/RelativeSync/RelativeSync/Components/RelativeSyncController.cs b/RelativeSync/RelativeSync/Components/RelativeSyncController.cs index 66af2c7..a94cde0 100644 --- a/RelativeSync/RelativeSync/Components/RelativeSyncController.cs +++ b/RelativeSync/RelativeSync/Components/RelativeSyncController.cs @@ -1,4 +1,5 @@ using ABI_RC.Core.Player; +using ABI_RC.Systems.Movement; using UnityEngine; namespace NAK.RelativeSync.Components; @@ -62,7 +63,7 @@ public class RelativeSyncController : MonoBehaviour Animator animator = puppetMaster._animator; if (animator == null) return; - + Transform avatarTransform = animator.transform; Transform hipTrans = (animator.avatar != null && animator.isHuman) ? animator.GetBoneTransform(HumanBodyBones.Hips) : null; @@ -97,6 +98,11 @@ public class RelativeSyncController : MonoBehaviour hipTrans.position = transform.position + transform.rotation * relativeHipPos; hipTrans.rotation = transform.rotation * relativeHipRot; } + + // Reprocess the root distance so we don't fuck avatar distance hider + NetIKController netIkController = puppetMaster.netIkController; + netIkController._rootDistance = Vector3.Distance((netIkController._collider.transform.position + netIkController._collider.center), + netIkController.GetLocalPlayerPosition()) - (netIkController._collider.radius + BetterBetterCharacterController.Instance.Radius); } private void ApplyRelativeRotation(Transform avatarTransform, Transform hipTransform, float lerp) diff --git a/RelativeSync/format.json b/RelativeSync/format.json index b917a7d..a5346fa 100644 --- a/RelativeSync/format.json +++ b/RelativeSync/format.json @@ -18,6 +18,6 @@ ], "downloadlink": "https://github.com/NotAKidoS/NAK_CVR_Mods/releases/download/r46/RelativeSync.dll", "sourcelink": "https://github.com/NotAKidoS/NAK_CVR_Mods/tree/main/RelativeSync/", - "changelog": "- Recompiled for 2025r179\n- Fixed execution order of RelativeSyncController & PuppetMaster.ProcessAvatarVisibility, so moving at high speeds with passengers does not disrupt voice or avatar distance hider", + "changelog": "- Recompiled for 2025r179\n- Fixed execution order of RelativeSyncController so moving at high speeds with passengers does not disrupt voice or avatar distance hider", "embedcolor": "#f61963" } \ No newline at end of file