diff --git a/README.md b/README.md index 8801a64..e6dedf0 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ Merged set of MelonLoader mods for ChilloutVR. |-----------|------------|----------------|-----------------------------------------------------------------|----------------|-------| | Avatar Change Info | ml_aci | 1.0.2 | Yes | Working | | Avatar Motion Tweaker | ml_amt | 1.1.0 | On review | Working | -| Desktop Head Tracking | ml_dht | 1.0.1 | On review | Working | +| Desktop Head Tracking | ml_dht | 1.0.2 | On review | Working | | Desktop Reticle Switch | ml_drs | 1.0.0 | Yes | Working | | Four Point Tracking | ml_fpt | 1.0.6 | On review | Working | | Leap Motion Extension | ml_lme | 1.1.8 | Yes | Working | diff --git a/ml_dht/FaceTracked.cs b/ml_dht/FaceTracked.cs index 4409c6b..2373f3c 100644 --- a/ml_dht/FaceTracked.cs +++ b/ml_dht/FaceTracked.cs @@ -6,7 +6,7 @@ namespace ml_dht { class FaceTracked : MonoBehaviour { - bool m_enabled = true; + bool m_enabled = false; float m_smoothing = 0.5f; bool m_mirrored = false; bool m_faceOverride = true; @@ -41,20 +41,6 @@ namespace ml_dht m_eyebrowsProgress = p_data.m_brows; } - public void OnEyeControllerUpdate() - { - if(m_enabled) - { - // Gaze - PlayerSetup.Instance.eyeMovement.manualViewTarget = true; - PlayerSetup.Instance.eyeMovement.targetViewPosition = m_camera.position + m_camera.rotation * new Vector3((m_gazeDirection.x - 0.5f) * -2f, (m_gazeDirection.y - 0.5f) * 2f, 1f); - - // Blink - PlayerSetup.Instance.eyeMovement.manualBlinking = true; - PlayerSetup.Instance.eyeMovement.blinkProgress = m_blinkProgress; - } - } - void OnLookIKPostUpdate() { if(m_enabled && (m_headBone != null)) @@ -64,6 +50,20 @@ namespace ml_dht } } + public void OnEyeControllerUpdate(CVREyeController p_component) + { + if(m_enabled) + { + // Gaze + p_component.manualViewTarget = true; + p_component.targetViewPosition = m_camera.position + m_camera.rotation * new Vector3((m_gazeDirection.x - 0.5f) * -2f, (m_gazeDirection.y - 0.5f) * 2f, 1f); + + // Blink + p_component.manualBlinking = true; + p_component.blinkProgress = m_blinkProgress; + } + } + public void OnFaceTrackingUpdate(CVRFaceTracking p_component) { if(m_enabled && m_faceOverride) diff --git a/ml_dht/Main.cs b/ml_dht/Main.cs index f81c471..e1c30a2 100644 --- a/ml_dht/Main.cs +++ b/ml_dht/Main.cs @@ -6,27 +6,27 @@ namespace ml_dht public class DesktopHeadTracking : MelonLoader.MelonMod { static DesktopHeadTracking ms_instance = null; - + MemoryMapReader m_mapReader = null; byte[] m_buffer = null; TrackingData m_trackingData; - + FaceTracked m_localTracked = null; - + public override void OnApplicationStart() { if(ms_instance == null) ms_instance = this; - + Settings.Init(); Settings.EnabledChange += this.OnEnabledChanged; Settings.MirroredChange += this.OnMirroredChanged; Settings.SmoothingChange += this.OnSmoothingChanged; Settings.FaceOverrideChange += this.OnFaceOverrideChange; - + m_mapReader = new MemoryMapReader(); m_buffer = new byte[1024]; - + m_mapReader.Open("head/data"); // Patches @@ -51,20 +51,20 @@ namespace ml_dht new HarmonyLib.HarmonyMethod(typeof(DesktopHeadTracking).GetMethod(nameof(OnFaceTrackingUpdate_Postfix), System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic)) ); - MelonLoader.MelonCoroutines.Start(WaitForPlayer()); + MelonLoader.MelonCoroutines.Start(WaitForPlayer()); } System.Collections.IEnumerator WaitForPlayer() { while(PlayerSetup.Instance == null) yield return null; - + m_localTracked = PlayerSetup.Instance.gameObject.AddComponent(); m_localTracked.SetEnabled(Settings.Enabled); m_localTracked.SetMirrored(Settings.Mirrored); m_localTracked.SetSmoothing(Settings.Smoothing); } - + public override void OnUpdate() { if(Settings.Enabled && m_mapReader.Read(ref m_buffer)) @@ -74,7 +74,7 @@ namespace ml_dht m_localTracked.UpdateTrackingData(ref m_trackingData); } } - + void OnEnabledChanged(bool p_state) { if(m_localTracked != null) @@ -95,7 +95,7 @@ namespace ml_dht if(m_localTracked != null) m_localTracked.SetFaceOverride(p_state); } - + static void OnSetupAvatarGeneral_Postfix() => ms_instance?.OnSetupAvatarGeneral(); void OnSetupAvatarGeneral() { @@ -109,7 +109,7 @@ namespace ml_dht MelonLoader.MelonLogger.Error(e); } } - + static void OnAvatarClear_Postfix() => ms_instance?.OnAvatarClear(); void OnAvatarClear() { @@ -124,23 +124,19 @@ namespace ml_dht } } - static void OnEyeControllerUpdate_Postfix(ref CVREyeController __instance) + static void OnEyeControllerUpdate_Postfix(ref CVREyeController __instance) => ms_instance?.OnEyeControllerUpdate(__instance); + void OnEyeControllerUpdate(CVREyeController p_component) { try { - if(__instance == PlayerSetup.Instance.eyeMovement) - ms_instance?.OnEyeControllerUpdate(); + if(p_component.isLocal && (m_localTracked != null)) + m_localTracked.OnEyeControllerUpdate(p_component); } catch(System.Exception e) { MelonLoader.MelonLogger.Error(e); } } - void OnEyeControllerUpdate() - { - if(m_localTracked != null) - m_localTracked.OnEyeControllerUpdate(); - } static void OnFaceTrackingUpdate_Postfix(ref CVRFaceTracking __instance) => ms_instance?.OnFaceTrackingUpdate(__instance); void OnFaceTrackingUpdate(CVRFaceTracking p_component) diff --git a/ml_dht/Properties/AssemblyInfo.cs b/ml_dht/Properties/AssemblyInfo.cs index 51384e8..a1ab7a9 100644 --- a/ml_dht/Properties/AssemblyInfo.cs +++ b/ml_dht/Properties/AssemblyInfo.cs @@ -1,10 +1,10 @@ using System.Reflection; [assembly: AssemblyTitle("DesktopHeadTracking")] -[assembly: AssemblyVersion("1.0.1")] -[assembly: AssemblyFileVersion("1.0.1")] +[assembly: AssemblyVersion("1.0.2")] +[assembly: AssemblyFileVersion("1.0.2")] -[assembly: MelonLoader.MelonInfo(typeof(ml_dht.DesktopHeadTracking), "DesktopHeadTracking", "1.0.1", "SDraw", "https://github.com/SDraw/ml_mods_cvr")] +[assembly: MelonLoader.MelonInfo(typeof(ml_dht.DesktopHeadTracking), "DesktopHeadTracking", "1.0.2", "SDraw", "https://github.com/SDraw/ml_mods_cvr")] [assembly: MelonLoader.MelonGame(null, "ChilloutVR")] [assembly: MelonLoader.MelonPlatform(MelonLoader.MelonPlatformAttribute.CompatiblePlatforms.WINDOWS_X64)] [assembly: MelonLoader.MelonPlatformDomain(MelonLoader.MelonPlatformDomainAttribute.CompatibleDomains.MONO)] \ No newline at end of file