From ffb4794dc653a976e4c647a1c7d936bd0c7818f8 Mon Sep 17 00:00:00 2001 From: Nicolas Gnyra Date: Sun, 24 Nov 2024 17:43:43 -0500 Subject: [PATCH] Only flip camera when it renders --- Source/CustomAvatar/CustomAvatar.csproj | 4 +++- Source/CustomAvatar/Rendering/MainCamera.cs | 26 +++++++++++++++++---- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/Source/CustomAvatar/CustomAvatar.csproj b/Source/CustomAvatar/CustomAvatar.csproj index ffffb0a9..f996fb16 100644 --- a/Source/CustomAvatar/CustomAvatar.csproj +++ b/Source/CustomAvatar/CustomAvatar.csproj @@ -181,6 +181,8 @@ $(BeatSaberDir)Beat Saber_Data\Managed\UnityEngine.SpatialTracking.dll False + True + False $(BeatSaberDir)Beat Saber_Data\Managed\UnityEngine.SubsystemsModule.dll @@ -224,7 +226,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Source/CustomAvatar/Rendering/MainCamera.cs b/Source/CustomAvatar/Rendering/MainCamera.cs index 991f5df5..77074a54 100644 --- a/Source/CustomAvatar/Rendering/MainCamera.cs +++ b/Source/CustomAvatar/Rendering/MainCamera.cs @@ -163,21 +163,29 @@ protected void OnDestroy() RemoveFromPlayerSpaceManager(); } - private void OnCameraNearClipPlaneChanged(float value) + protected void OnPreCull() { + if (_trackedPoseDriver != null) + { + _trackedPoseDriver.UseRelativeTransform = !beatSaberUtilities.hasFocus; + _trackedPoseDriver.PerformUpdate(); + } + UpdateCameraMask(); } - private void OnFpfcSettingsChanged(IFPFCSettings fpfcSettings) + protected void OnPostRender() { - UpdateCameraMask(); + if (_trackedPoseDriver != null) + { + _trackedPoseDriver.UseRelativeTransform = false; + } } private void OnFocusChanged(bool hasFocus) { if (_trackedPoseDriver != null) { - _trackedPoseDriver.UseRelativeTransform = !hasFocus; _trackedPoseDriver.originPose = hasFocus ? Pose.identity : new Pose( Vector3.Project(Quaternion.Euler(0, 180, 0) * -transform.localPosition * 2, Vector3.right) + new Vector3(0, 0, 1.5f), Quaternion.Euler(0, 180, 0)); @@ -186,6 +194,16 @@ private void OnFocusChanged(bool hasFocus) UpdateCameraMask(); } + private void OnCameraNearClipPlaneChanged(float value) + { + UpdateCameraMask(); + } + + private void OnFpfcSettingsChanged(IFPFCSettings fpfcSettings) + { + UpdateCameraMask(); + } + private void UpdateCameraMask() { if (_logger == null || _settings == null || fpfcSettings == null)