[RelativeSync] actually fixed distance hider

This commit is contained in:
NotAKidoS 2025-04-03 05:24:48 -05:00
parent 6249696efa
commit fea10ac221
2 changed files with 17 additions and 22 deletions

View file

@ -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<RelativeSyncController>();
}
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;
}
}

View file

@ -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)