From a5d93643fae588e6919f1609d8fc9fba269a0550 Mon Sep 17 00:00:00 2001 From: SDraw Date: Tue, 8 Aug 2023 00:00:49 +0300 Subject: [PATCH] Finger tracking value override fix Rotation fix Me angery REEE Funni joke about sttuff --- ml_lme/LeapInput.cs | 321 +++++++++++++++++++++------------------ ml_lme/LeapTracked.cs | 16 +- ml_lme/Settings.cs | 16 +- ml_lme/resources/menu.js | 2 +- 4 files changed, 190 insertions(+), 165 deletions(-) diff --git a/ml_lme/LeapInput.cs b/ml_lme/LeapInput.cs index dc92f64..e0a4a09 100644 --- a/ml_lme/LeapInput.cs +++ b/ml_lme/LeapInput.cs @@ -27,7 +27,9 @@ namespace ml_lme ~LeapInput() { Settings.EnabledChange -= this.OnEnableChange; - Settings.InputChange -= this.OnInputChange; + Settings.InteractionChange -= this.OnInteractionChange; + Settings.GesturesChange -= this.OnGesturesChange; + Settings.FingersOnlyChange -= this.OnFingersOnlyChange; MetaPort.Instance.settings.settingBoolChanged.RemoveListener(this.OnGameSettingBoolChange); } @@ -35,9 +37,8 @@ namespace ml_lme public override void ModuleAdded() { base.ModuleAdded(); - base.InputEnabled = Settings.Enabled; - HapticFeedback = false; + base.HapticFeedback = false; m_inVR = Utils.IsInVR(); @@ -47,13 +48,6 @@ namespace ml_lme m_handRayLeft.isInteractionRay = true; m_handRayLeft.triggerGazeEvents = false; m_handRayLeft.holderRoot = m_handRayLeft.gameObject; - - m_handRayRight = LeapTracking.Instance.GetRightHand().gameObject.AddComponent(); - m_handRayRight.hand = false; - m_handRayRight.generalMask = -1485; - m_handRayRight.isInteractionRay = true; - m_handRayRight.triggerGazeEvents = false; - m_handRayRight.holderRoot = m_handRayRight.gameObject; m_handRayLeft.attachmentDistance = 0f; m_lineLeft = m_handRayLeft.gameObject.AddComponent(); @@ -67,6 +61,13 @@ namespace ml_lme m_lineLeft.enabled = false; m_lineLeft.receiveShadows = false; m_handRayLeft.lineRenderer = m_lineLeft; + + m_handRayRight = LeapTracking.Instance.GetRightHand().gameObject.AddComponent(); + m_handRayRight.hand = false; + m_handRayRight.generalMask = -1485; + m_handRayRight.isInteractionRay = true; + m_handRayRight.triggerGazeEvents = false; + m_handRayRight.holderRoot = m_handRayRight.gameObject; m_handRayRight.attachmentDistance = 0f; m_lineRight = m_handRayRight.gameObject.AddComponent(); @@ -82,12 +83,14 @@ namespace ml_lme m_handRayRight.lineRenderer = m_lineRight; Settings.EnabledChange += this.OnEnableChange; - Settings.InputChange += this.OnInputChange; + Settings.InteractionChange += this.OnInteractionChange; Settings.GesturesChange += this.OnGesturesChange; + Settings.FingersOnlyChange += this.OnFingersOnlyChange; OnEnableChange(Settings.Enabled); - OnInputChange(Settings.Input); + OnInteractionChange(Settings.Interaction); OnGesturesChange(Settings.Gestures); + OnFingersOnlyChange(Settings.FingersOnly); MelonLoader.MelonCoroutines.Start(WaitForSettings()); MelonLoader.MelonCoroutines.Start(WaitForMaterial()); @@ -128,134 +131,125 @@ namespace ml_lme if(l_data.m_leftHand.m_present) { m_handVisibleLeft = true; + SetFingersInput(l_data.m_leftHand, true); if(Settings.Gestures) { - _inputManager.gestureLeftRaw = 0f; + base._inputManager.gestureLeftRaw = 0f; // Finger Point & Finger Gun - if((_inputManager.fingerCurlLeftIndex < 0.2f) && (_inputManager.fingerCurlLeftMiddle > 0.75f) && - (_inputManager.fingerCurlLeftRing > 0.75f) && (_inputManager.fingerCurlLeftPinky > 0.75f)) + if((base._inputManager.fingerCurlLeftIndex < 0.2f) && (base._inputManager.fingerCurlLeftMiddle > 0.75f) && + (base._inputManager.fingerCurlLeftRing > 0.75f) && (base._inputManager.fingerCurlLeftPinky > 0.75f)) { - _inputManager.gestureLeftRaw = (_inputManager.fingerCurlLeftThumb >= 0.5f) ? 4f : 3f; + base._inputManager.gestureLeftRaw = (base._inputManager.fingerCurlLeftThumb >= 0.5f) ? 4f : 3f; } // Peace Sign - if((_inputManager.fingerCurlLeftIndex < 0.2f) && (_inputManager.fingerCurlLeftMiddle < 0.2f) && - (_inputManager.fingerCurlLeftRing > 0.75f) && (_inputManager.fingerCurlLeftPinky > 0.75f)) + if((base._inputManager.fingerCurlLeftIndex < 0.2f) && (base._inputManager.fingerCurlLeftMiddle < 0.2f) && + (base._inputManager.fingerCurlLeftRing > 0.75f) && (base._inputManager.fingerCurlLeftPinky > 0.75f)) { - _inputManager.gestureLeftRaw = 5f; + base._inputManager.gestureLeftRaw = 5f; } // Rock and Roll - if((_inputManager.fingerCurlLeftIndex < 0.2f) && (_inputManager.fingerCurlLeftMiddle > 0.75f) && - (_inputManager.fingerCurlLeftRing > 0.75f) && (_inputManager.fingerCurlLeftPinky < 0.5f)) + if((base._inputManager.fingerCurlLeftIndex < 0.2f) && (base._inputManager.fingerCurlLeftMiddle > 0.75f) && + (base._inputManager.fingerCurlLeftRing > 0.75f) && (base._inputManager.fingerCurlLeftPinky < 0.5f)) { - _inputManager.gestureLeftRaw = 6f; + base._inputManager.gestureLeftRaw = 6f; } // Fist & Thumbs Up - if((_inputManager.fingerCurlLeftIndex > 0.5f) && (_inputManager.fingerCurlLeftMiddle > 0.5f) && - (_inputManager.fingerCurlLeftRing > 0.5f) && (_inputManager.fingerCurlLeftPinky > 0.5f)) + if((base._inputManager.fingerCurlLeftIndex > 0.5f) && (base._inputManager.fingerCurlLeftMiddle > 0.5f) && + (base._inputManager.fingerCurlLeftRing > 0.5f) && (base._inputManager.fingerCurlLeftPinky > 0.5f)) { - _inputManager.gestureLeftRaw = (_inputManager.fingerCurlLeftThumb >= 0.5f) ? ((l_data.m_leftHand.m_grabStrength - 0.5f) * 2f) : 2f; + base._inputManager.gestureLeftRaw = (base._inputManager.fingerCurlLeftThumb >= 0.5f) ? ((l_data.m_leftHand.m_grabStrength - 0.5f) * 2f) : 2f; } // Open Hand - if((_inputManager.fingerCurlLeftIndex < 0.2f) && (_inputManager.fingerCurlLeftMiddle < 0.2f) && - (_inputManager.fingerCurlLeftRing < 0.2f) && (_inputManager.fingerCurlLeftPinky < 0.2f)) + if((base._inputManager.fingerCurlLeftIndex < 0.2f) && (base._inputManager.fingerCurlLeftMiddle < 0.2f) && + (base._inputManager.fingerCurlLeftRing < 0.2f) && (base._inputManager.fingerCurlLeftPinky < 0.2f)) { - _inputManager.gestureLeftRaw = -1f; + base._inputManager.gestureLeftRaw = -1f; } - _inputManager.gestureLeft = _inputManager.gestureLeftRaw; + base._inputManager.gestureLeft = base._inputManager.gestureLeftRaw; } } else { if(m_handVisibleLeft) { - m_handVisibleLeft = false; ResetFingers(true); if(Settings.Gestures) ResetGestures(true); } + + m_handVisibleLeft = false; } if(l_data.m_rightHand.m_present) { m_handVisibleRight = true; + SetFingersInput(l_data.m_rightHand, false); if(Settings.Gestures) { - _inputManager.gestureRightRaw = 0f; + base._inputManager.gestureRightRaw = 0f; // Finger Point & Finger Gun - if((_inputManager.fingerCurlRightIndex < 0.2f) && (_inputManager.fingerCurlRightMiddle > 0.75f) && - (_inputManager.fingerCurlRightRing > 0.75f) && (_inputManager.fingerCurlRightPinky > 0.75f)) + if((base._inputManager.fingerCurlRightIndex < 0.2f) && (base._inputManager.fingerCurlRightMiddle > 0.75f) && + (base._inputManager.fingerCurlRightRing > 0.75f) && (base._inputManager.fingerCurlRightPinky > 0.75f)) { - _inputManager.gestureRightRaw = (_inputManager.fingerCurlRightThumb >= 0.5f) ? 4f : 3f; + base._inputManager.gestureRightRaw = (base._inputManager.fingerCurlRightThumb >= 0.5f) ? 4f : 3f; } // Peace Sign - if((_inputManager.fingerCurlRightIndex < 0.2f) && (_inputManager.fingerCurlRightMiddle < 0.2f) && - (_inputManager.fingerCurlRightRing > 0.75f) && (_inputManager.fingerCurlRightPinky > 0.75f)) + if((base._inputManager.fingerCurlRightIndex < 0.2f) && (base._inputManager.fingerCurlRightMiddle < 0.2f) && + (base._inputManager.fingerCurlRightRing > 0.75f) && (base._inputManager.fingerCurlRightPinky > 0.75f)) { - _inputManager.gestureRightRaw = 5f; + base._inputManager.gestureRightRaw = 5f; } // Rock and Roll - if((_inputManager.fingerCurlRightIndex < 0.2f) && (_inputManager.fingerCurlRightMiddle > 0.75f) && - (_inputManager.fingerCurlRightRing > 0.75f) && (_inputManager.fingerCurlRightPinky < 0.5f)) + if((base._inputManager.fingerCurlRightIndex < 0.2f) && (base._inputManager.fingerCurlRightMiddle > 0.75f) && + (base._inputManager.fingerCurlRightRing > 0.75f) && (base._inputManager.fingerCurlRightPinky < 0.5f)) { - _inputManager.gestureRightRaw = 6f; + base._inputManager.gestureRightRaw = 6f; } // Fist & Thumbs Up - if((_inputManager.fingerCurlRightIndex > 0.5f) && (_inputManager.fingerCurlRightMiddle > 0.5f) && - (_inputManager.fingerCurlRightRing > 0.5f) && (_inputManager.fingerCurlRightPinky > 0.5f)) + if((base._inputManager.fingerCurlRightIndex > 0.5f) && (base._inputManager.fingerCurlRightMiddle > 0.5f) && + (base._inputManager.fingerCurlRightRing > 0.5f) && (base._inputManager.fingerCurlRightPinky > 0.5f)) { - _inputManager.gestureRightRaw = (_inputManager.fingerCurlRightThumb >= 0.5f) ? ((l_data.m_rightHand.m_grabStrength - 0.5f) * 2f) : 2f; + base._inputManager.gestureRightRaw = (base._inputManager.fingerCurlRightThumb >= 0.5f) ? ((l_data.m_rightHand.m_grabStrength - 0.5f) * 2f) : 2f; } // Open Hand - if((_inputManager.fingerCurlRightIndex < 0.2f) && (_inputManager.fingerCurlRightMiddle < 0.2f) && - (_inputManager.fingerCurlRightRing < 0.2f) && (_inputManager.fingerCurlRightPinky < 0.2f)) + if((base._inputManager.fingerCurlRightIndex < 0.2f) && (base._inputManager.fingerCurlRightMiddle < 0.2f) && + (base._inputManager.fingerCurlRightRing < 0.2f) && (base._inputManager.fingerCurlRightPinky < 0.2f)) { - _inputManager.gestureRightRaw = -1f; + base._inputManager.gestureRightRaw = -1f; } - _inputManager.gestureRight = _inputManager.gestureRightRaw; + base._inputManager.gestureRight = base._inputManager.gestureRightRaw; } } else { if(m_handVisibleRight) { - m_handVisibleRight = false; ResetFingers(false); if(Settings.Gestures) ResetGestures(false); } + + m_handVisibleRight = false; } - if(!ModSupporter.SkipFingersOverride()) - { - if(m_inVR) - { - _inputManager.individualFingerTracking = !CVRInputManager._moduleXR.GestureToggleValue; - _inputManager.individualFingerTracking |= (l_data.m_leftHand.m_present || l_data.m_rightHand.m_present); - } - else - _inputManager.individualFingerTracking = (l_data.m_leftHand.m_present || l_data.m_rightHand.m_present); - - IKSystem.Instance.FingerSystem.controlActive = _inputManager.individualFingerTracking; - } - - m_handRayLeft.enabled = (l_data.m_leftHand.m_present && (!m_inVR || !Utils.IsLeftHandTracked() || !Settings.FingersOnly)); - m_handRayRight.enabled = (l_data.m_rightHand.m_present && (!m_inVR || !Utils.IsRightHandTracked() || !Settings.FingersOnly)); + if(!ModSupporter.SkipFingersOverride() && (!m_inVR || !Utils.AreKnucklesInUse())) + SetGameFingersTracking(m_handVisibleRight || m_handVisibleLeft); base.UpdateInput(); } @@ -263,11 +257,11 @@ namespace ml_lme public override void Update_Interaction() { - if(Settings.Input) + if(Settings.Interaction) { LeapParser.LeapData l_data = LeapManager.Instance.GetLatestData(); - if(l_data.m_leftHand.m_present && (!m_inVR || !Utils.IsLeftHandTracked() || !Settings.FingersOnly)) + if(m_handVisibleLeft && (!m_inVR || !Utils.IsLeftHandTracked()) && !Settings.FingersOnly) { float l_strength = l_data.m_leftHand.m_grabStrength; @@ -276,26 +270,26 @@ namespace ml_lme l_interactValue = Mathf.Clamp01(Mathf.InverseLerp(Mathf.Min(Settings.GripThreadhold, Settings.InteractThreadhold), Mathf.Max(Settings.GripThreadhold, Settings.InteractThreadhold), l_strength)); else l_interactValue = Mathf.Clamp01(Mathf.InverseLerp(0f, Settings.InteractThreadhold, l_strength)); - _inputManager.interactLeftValue = Mathf.Max(l_interactValue, _inputManager.interactLeftValue); + base._inputManager.interactLeftValue = Mathf.Max(l_interactValue, base._inputManager.interactLeftValue); if(m_interactLeft != (l_strength > Settings.InteractThreadhold)) { m_interactLeft = (l_strength > Settings.InteractThreadhold); - _inputManager.interactLeftDown |= m_interactLeft; - _inputManager.interactLeftUp |= !m_interactLeft; + base._inputManager.interactLeftDown |= m_interactLeft; + base._inputManager.interactLeftUp |= !m_interactLeft; } float l_gripValue = Mathf.Clamp01(Mathf.InverseLerp(0f, Settings.GripThreadhold, l_strength)); - _inputManager.gripLeftValue = Mathf.Max(l_gripValue, _inputManager.gripLeftValue); + base._inputManager.gripLeftValue = Mathf.Max(l_gripValue, base._inputManager.gripLeftValue); if(m_gripLeft != (l_strength > Settings.GripThreadhold)) { m_gripLeft = (l_strength > Settings.GripThreadhold); - _inputManager.gripLeftDown |= m_gripLeft; - _inputManager.gripLeftUp |= !m_gripLeft; + base._inputManager.gripLeftDown |= m_gripLeft; + base._inputManager.gripLeftUp |= !m_gripLeft; } } - if(l_data.m_rightHand.m_present && (!m_inVR || !Utils.IsRightHandTracked() || !Settings.FingersOnly)) + if(m_handVisibleRight && (!m_inVR || !Utils.IsRightHandTracked()) && !Settings.FingersOnly) { float l_strength = l_data.m_rightHand.m_grabStrength; @@ -304,24 +298,27 @@ namespace ml_lme l_interactValue = Mathf.Clamp01(Mathf.InverseLerp(Mathf.Min(Settings.GripThreadhold, Settings.InteractThreadhold), Mathf.Max(Settings.GripThreadhold, Settings.InteractThreadhold), l_strength)); else l_interactValue = Mathf.Clamp01(Mathf.InverseLerp(0f, Settings.InteractThreadhold, l_strength)); - _inputManager.interactRightValue = Mathf.Max(l_interactValue, _inputManager.interactRightValue); + base._inputManager.interactRightValue = Mathf.Max(l_interactValue, base._inputManager.interactRightValue); if(m_interactRight != (l_strength > Settings.InteractThreadhold)) { m_interactRight = (l_strength > Settings.InteractThreadhold); - _inputManager.interactRightDown |= m_interactRight; - _inputManager.interactRightUp |= !m_interactRight; + base._inputManager.interactRightDown |= m_interactRight; + base._inputManager.interactRightUp |= !m_interactRight; } float l_gripValue = Mathf.Clamp01(Mathf.InverseLerp(0f, Settings.GripThreadhold, l_strength)); - _inputManager.gripRightValue = Mathf.Max(l_gripValue, _inputManager.gripRightValue); + base._inputManager.gripRightValue = Mathf.Max(l_gripValue, base._inputManager.gripRightValue); if(m_gripRight != (l_strength > Settings.GripThreadhold)) { m_gripRight = (l_strength > Settings.GripThreadhold); - _inputManager.gripRightDown |= m_gripRight; - _inputManager.gripRightUp |= !m_gripRight; + base._inputManager.gripRightDown |= m_gripRight; + base._inputManager.gripRightUp |= !m_gripRight; } } + + ToggleHandRay(m_handVisibleLeft && (!m_inVR || !Utils.IsLeftHandTracked()) && !Settings.FingersOnly, true); + ToggleHandRay(m_handVisibleRight && (!m_inVR || !Utils.IsRightHandTracked()) && !Settings.FingersOnly, false); } } @@ -329,21 +326,36 @@ namespace ml_lme void OnEnableChange(bool p_state) { base.InputEnabled = p_state; + m_handVisibleLeft &= p_state; m_handVisibleRight &= p_state; - OnInputChange(p_state && Settings.Input); - UpdateFingerTracking(); + if(!p_state) + { + ResetFingers(true); + ResetFingers(false); + + if(Settings.Gestures) + { + ResetGestures(true); + ResetGestures(false); + } + + // Reset to default, FreedomFingers can go brrr, player should press funny controller button two times + SetGameFingersTracking(m_inVR && Utils.AreKnucklesInUse() && !CVRInputManager._moduleXR.GestureToggleValue); + } + + OnInteractionChange(Settings.Interaction); } - void OnInputChange(bool p_state) + void OnInteractionChange(bool p_state) { - ((MonoBehaviour)m_handRayLeft).enabled = (p_state && Settings.Enabled); - ((MonoBehaviour)m_handRayRight).enabled = (p_state && Settings.Enabled); - m_lineLeft.enabled = (p_state && Settings.Enabled); - m_lineRight.enabled = (p_state && Settings.Enabled); + bool l_state = (p_state && Settings.Enabled && !Settings.FingersOnly); - if(!p_state) + ToggleHandRay(l_state, true); + ToggleHandRay(l_state, false); + + if(!l_state) { m_handRayLeft.DropObject(true); m_handRayLeft.ClearGrabbedObject(); @@ -360,10 +372,15 @@ namespace ml_lme void OnGesturesChange(bool p_state) { - _inputManager.gestureLeft = 0f; - _inputManager.gestureLeftRaw = 0f; - _inputManager.gestureRight = 0f; - _inputManager.gestureRightRaw = 0f; + base._inputManager.gestureLeft = 0f; + base._inputManager.gestureLeftRaw = 0f; + base._inputManager.gestureRight = 0f; + base._inputManager.gestureRightRaw = 0f; + } + + void OnFingersOnlyChange(bool p_state) + { + OnInteractionChange(Settings.Interaction); } // Game events @@ -379,47 +396,35 @@ namespace ml_lme } // Arbitrary - void UpdateFingerTracking() - { - _inputManager.individualFingerTracking = (Settings.Enabled || (m_inVR && Utils.AreKnucklesInUse() && !CVRInputManager._moduleXR.GestureToggleValue)); - IKSystem.Instance.FingerSystem.controlActive = _inputManager.individualFingerTracking; - - if(!Settings.Enabled) - { - ResetFingers(true); - ResetFingers(false); - } - } - void SetFingersInput(LeapParser.HandData p_hand, bool p_left) { // Game has spreads in range of [0;1], but mod now operates in range of [-1;1] // So spreads will be normalized towards game's range if(p_left) { - _inputManager.fingerCurlLeftThumb = p_hand.m_bends[0]; - _inputManager.fingerCurlLeftIndex = p_hand.m_bends[1]; - _inputManager.fingerCurlLeftMiddle = p_hand.m_bends[2]; - _inputManager.fingerCurlLeftRing = p_hand.m_bends[3]; - _inputManager.fingerCurlLeftPinky = p_hand.m_bends[4]; - _inputManager.fingerSpreadLeftThumb = 1f - (p_hand.m_spreads[0] * 0.5f + 0.5f); - _inputManager.fingerSpreadLeftIndex = 1f - (p_hand.m_spreads[1] * 0.5f + 0.5f); - _inputManager.fingerSpreadLeftMiddle = 1f - (p_hand.m_spreads[2] * 0.5f + 0.5f); - _inputManager.fingerSpreadLeftRing = 1f - (p_hand.m_spreads[3] * 0.5f + 0.5f); - _inputManager.fingerSpreadLeftPinky = 1f - (p_hand.m_spreads[4] * 0.5f + 0.5f); + base._inputManager.fingerCurlLeftThumb = p_hand.m_bends[0]; + base._inputManager.fingerCurlLeftIndex = p_hand.m_bends[1]; + base._inputManager.fingerCurlLeftMiddle = p_hand.m_bends[2]; + base._inputManager.fingerCurlLeftRing = p_hand.m_bends[3]; + base._inputManager.fingerCurlLeftPinky = p_hand.m_bends[4]; + base._inputManager.fingerSpreadLeftThumb = 1f - (p_hand.m_spreads[0] * 0.5f + 0.5f); + base._inputManager.fingerSpreadLeftIndex = 1f - (p_hand.m_spreads[1] * 0.5f + 0.5f); + base._inputManager.fingerSpreadLeftMiddle = 1f - (p_hand.m_spreads[2] * 0.5f + 0.5f); + base._inputManager.fingerSpreadLeftRing = 1f - (p_hand.m_spreads[3] * 0.5f + 0.5f); + base._inputManager.fingerSpreadLeftPinky = 1f - (p_hand.m_spreads[4] * 0.5f + 0.5f); } else { - _inputManager.fingerCurlRightThumb = p_hand.m_bends[0]; - _inputManager.fingerCurlRightIndex = p_hand.m_bends[1]; - _inputManager.fingerCurlRightMiddle = p_hand.m_bends[2]; - _inputManager.fingerCurlRightRing = p_hand.m_bends[3]; - _inputManager.fingerCurlRightPinky = p_hand.m_bends[4]; - _inputManager.fingerSpreadRightThumb = 1f - (p_hand.m_spreads[0] * 0.5f + 0.5f); - _inputManager.fingerSpreadRightIndex = 1f - (p_hand.m_spreads[1] * 0.5f + 0.5f); - _inputManager.fingerSpreadRightMiddle = 1f - (p_hand.m_spreads[2] * 0.5f + 0.5f); - _inputManager.fingerSpreadRightRing = 1f - (p_hand.m_spreads[3] * 0.5f + 0.5f); - _inputManager.fingerSpreadRightPinky = 1f - (p_hand.m_spreads[4] * 0.5f + 0.5f); + base._inputManager.fingerCurlRightThumb = p_hand.m_bends[0]; + base._inputManager.fingerCurlRightIndex = p_hand.m_bends[1]; + base._inputManager.fingerCurlRightMiddle = p_hand.m_bends[2]; + base._inputManager.fingerCurlRightRing = p_hand.m_bends[3]; + base._inputManager.fingerCurlRightPinky = p_hand.m_bends[4]; + base._inputManager.fingerSpreadRightThumb = 1f - (p_hand.m_spreads[0] * 0.5f + 0.5f); + base._inputManager.fingerSpreadRightIndex = 1f - (p_hand.m_spreads[1] * 0.5f + 0.5f); + base._inputManager.fingerSpreadRightMiddle = 1f - (p_hand.m_spreads[2] * 0.5f + 0.5f); + base._inputManager.fingerSpreadRightRing = 1f - (p_hand.m_spreads[3] * 0.5f + 0.5f); + base._inputManager.fingerSpreadRightPinky = 1f - (p_hand.m_spreads[4] * 0.5f + 0.5f); } } @@ -427,29 +432,29 @@ namespace ml_lme { if(p_left) { - _inputManager.fingerCurlLeftThumb = 0f; - _inputManager.fingerCurlLeftIndex = 0f; - _inputManager.fingerCurlLeftMiddle = 0f; - _inputManager.fingerCurlLeftRing = 0f; - _inputManager.fingerCurlLeftPinky = 0f; - _inputManager.fingerSpreadLeftThumb = 0.5f; - _inputManager.fingerSpreadLeftIndex = 0.5f; - _inputManager.fingerSpreadLeftMiddle = 0.5f; - _inputManager.fingerSpreadLeftRing = 0.5f; - _inputManager.fingerSpreadLeftPinky = 0.5f; + base._inputManager.fingerCurlLeftThumb = 0f; + base._inputManager.fingerCurlLeftIndex = 0f; + base._inputManager.fingerCurlLeftMiddle = 0f; + base._inputManager.fingerCurlLeftRing = 0f; + base._inputManager.fingerCurlLeftPinky = 0f; + base._inputManager.fingerSpreadLeftThumb = 0.5f; + base._inputManager.fingerSpreadLeftIndex = 0.5f; + base._inputManager.fingerSpreadLeftMiddle = 0.5f; + base._inputManager.fingerSpreadLeftRing = 0.5f; + base._inputManager.fingerSpreadLeftPinky = 0.5f; } else { - _inputManager.fingerCurlRightThumb = 0f; - _inputManager.fingerCurlRightIndex = 0f; - _inputManager.fingerCurlRightMiddle = 0f; - _inputManager.fingerCurlRightRing = 0f; - _inputManager.fingerCurlRightPinky = 0f; - _inputManager.fingerSpreadRightThumb = 0.5f; - _inputManager.fingerSpreadRightIndex = 0.5f; - _inputManager.fingerSpreadRightMiddle = 0.5f; - _inputManager.fingerSpreadRightRing = 0.5f; - _inputManager.fingerSpreadRightPinky = 0.5f; + base._inputManager.fingerCurlRightThumb = 0f; + base._inputManager.fingerCurlRightIndex = 0f; + base._inputManager.fingerCurlRightMiddle = 0f; + base._inputManager.fingerCurlRightRing = 0f; + base._inputManager.fingerCurlRightPinky = 0f; + base._inputManager.fingerSpreadRightThumb = 0.5f; + base._inputManager.fingerSpreadRightIndex = 0.5f; + base._inputManager.fingerSpreadRightMiddle = 0.5f; + base._inputManager.fingerSpreadRightRing = 0.5f; + base._inputManager.fingerSpreadRightPinky = 0.5f; } } @@ -457,13 +462,31 @@ namespace ml_lme { if(p_left) { - _inputManager.gestureLeft = 0f; - _inputManager.gestureLeftRaw = 0f; + base._inputManager.gestureLeft = 0f; + base._inputManager.gestureLeftRaw = 0f; } else { - _inputManager.gestureRight = 0f; - _inputManager.gestureRightRaw = 0f; + base._inputManager.gestureRight = 0f; + base._inputManager.gestureRightRaw = 0f; + } + } + + void ToggleHandRay(bool p_state, bool p_left) + { + if(p_left) + { + m_handRayLeft.enabled = p_state; + ((MonoBehaviour)m_handRayLeft).enabled = p_state; + m_lineLeft.enabled = p_state; + m_lineLeft.forceRenderingOff = !p_state; + } + else + { + m_handRayRight.enabled = p_state; + ((MonoBehaviour)m_handRayRight).enabled = p_state; + m_lineRight.enabled = p_state; + m_lineRight.forceRenderingOff = !p_state; } } @@ -473,5 +496,11 @@ namespace ml_lme if(p_name == "ControlUseGripToGrab") m_gripToGrab = p_state; } + + void SetGameFingersTracking(bool p_state) + { + base._inputManager.individualFingerTracking = p_state; + IKSystem.Instance.FingerSystem.controlActive = base._inputManager.individualFingerTracking; + } } } diff --git a/ml_lme/LeapTracked.cs b/ml_lme/LeapTracked.cs index 326c782..5bc72d1 100644 --- a/ml_lme/LeapTracked.cs +++ b/ml_lme/LeapTracked.cs @@ -10,10 +10,8 @@ namespace ml_lme class LeapTracked : MonoBehaviour { static readonly float[] ms_tposeMuscles = typeof(ABI_RC.Systems.IK.SubSystems.BodySystem).GetField("TPoseMuscles", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null) as float[]; - static readonly Quaternion ms_offsetLeft = Quaternion.Euler(0f, 0f, 270f); - static readonly Quaternion ms_offsetRight = Quaternion.Euler(0f, 0f, 90f); - static readonly Quaternion ms_offsetLeftDesktop = Quaternion.Euler(0f, 90f, 0f); - static readonly Quaternion ms_offsetRightDesktop = Quaternion.Euler(0f, 270f, 0f); + static readonly Quaternion ms_offsetLeft = Quaternion.Euler(0f, 90f, 0f); + static readonly Quaternion ms_offsetRight = Quaternion.Euler(0f, 270f, 0f); VRIK m_vrIK = null; Vector4 m_armsWeights = Vector2.zero; @@ -145,7 +143,7 @@ namespace ml_lme { if(p_data.m_leftHand.m_present) { - UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.LeftThumb1Stretched, -0.5f-p_data.m_leftHand.m_bends[0]); + UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.LeftThumb1Stretched, -0.5f - p_data.m_leftHand.m_bends[0]); UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.LeftThumb2Stretched, 0.7f - p_data.m_leftHand.m_bends[0] * 2f); UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.LeftThumb3Stretched, 0.7f - p_data.m_leftHand.m_bends[0] * 2f); UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.LeftThumbSpread, -p_data.m_leftHand.m_spreads[0]); @@ -173,7 +171,7 @@ namespace ml_lme if(p_data.m_rightHand.m_present) { - UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.RightThumb1Stretched, -0.5f-p_data.m_rightHand.m_bends[0]); + UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.RightThumb1Stretched, -0.5f - p_data.m_rightHand.m_bends[0]); UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.RightThumb2Stretched, 0.7f - p_data.m_rightHand.m_bends[0] * 2f); UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.RightThumb3Stretched, 0.7f - p_data.m_rightHand.m_bends[0] * 2f); UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.RightThumbSpread, -p_data.m_rightHand.m_spreads[0]); @@ -256,11 +254,11 @@ namespace ml_lme Transform l_hand = PlayerSetup.Instance._animator.GetBoneTransform(HumanBodyBones.LeftHand); if(l_hand != null) - m_leftHandTarget.localRotation = (m_inVR ? ms_offsetLeft : ms_offsetLeftDesktop) * (PlayerSetup.Instance._avatar.transform.GetMatrix().inverse * l_hand.GetMatrix()).rotation; + m_leftHandTarget.localRotation = ms_offsetLeft * (PlayerSetup.Instance._avatar.transform.GetMatrix().inverse * l_hand.GetMatrix()).rotation; l_hand = PlayerSetup.Instance._animator.GetBoneTransform(HumanBodyBones.RightHand); if(l_hand != null) - m_rightHandTarget.localRotation = (m_inVR ? ms_offsetRight : ms_offsetRightDesktop) * (PlayerSetup.Instance._avatar.transform.GetMatrix().inverse * l_hand.GetMatrix()).rotation; + m_rightHandTarget.localRotation = ms_offsetRight * (PlayerSetup.Instance._avatar.transform.GetMatrix().inverse * l_hand.GetMatrix()).rotation; if(m_vrIK == null) { @@ -424,8 +422,6 @@ namespace ml_lme { if(p_pose.muscles.Length > p_index) p_pose.muscles[p_index] = p_value; - - //p_pose.muscles[p_index] = (p_clamped ? Mathf.Lerp(ms_muscleLimits[p_index].x, ms_muscleLimits[p_index].y, p_value) : Mathf.LerpUnclamped(ms_muscleLimits[p_index].x, ms_muscleLimits[p_index].y, p_value)); } } } diff --git a/ml_lme/Settings.cs b/ml_lme/Settings.cs index ecd4d6d..a37e087 100644 --- a/ml_lme/Settings.cs +++ b/ml_lme/Settings.cs @@ -32,7 +32,7 @@ namespace ml_lme HeadY, HeadZ, TrackElbows, - Input, + Interaction, Gestures, InteractThreadhold, GripThreadhold, @@ -48,7 +48,7 @@ namespace ml_lme public static bool HeadAttach { get; private set; } = false; public static Vector3 HeadOffset { get; private set; } = new Vector3(0f, -0.3f, 0.15f); public static bool TrackElbows { get; private set; } = true; - public static bool Input { get; private set; } = true; + public static bool Interaction { get; private set; } = true; public static bool Gestures { get; private set; } = false; public static float InteractThreadhold { get; private set; } = 0.8f; public static float GripThreadhold { get; private set; } = 0.4f; @@ -66,7 +66,7 @@ namespace ml_lme static public event Action HeadAttachChange; static public event Action HeadOffsetChange; static public event Action TrackElbowsChange; - static public event Action InputChange; + static public event Action InteractionChange; static public event Action GesturesChange; static public event Action InteractThreadholdChange; static public event Action GripThreadholdChange; @@ -93,7 +93,7 @@ namespace ml_lme ms_category.CreateEntry(ModSetting.HeadY.ToString(), (int)(HeadOffset.y * 100f)), ms_category.CreateEntry(ModSetting.HeadZ.ToString(), (int)(HeadOffset.z * 100f)), ms_category.CreateEntry(ModSetting.TrackElbows.ToString(), TrackElbows), - ms_category.CreateEntry(ModSetting.Input.ToString(), Input), + ms_category.CreateEntry(ModSetting.Interaction.ToString(), Interaction), ms_category.CreateEntry(ModSetting.Gestures.ToString(), Gestures), ms_category.CreateEntry(ModSetting.InteractThreadhold.ToString(), (int)(InteractThreadhold * 100f)), ms_category.CreateEntry(ModSetting.GripThreadhold.ToString(), (int)(GripThreadhold * 100f)), @@ -151,7 +151,7 @@ namespace ml_lme (int)ms_entries[(int)ModSetting.HeadZ].BoxedValue ) * 0.01f; TrackElbows = (bool)ms_entries[(int)ModSetting.TrackElbows].BoxedValue; - Input = (bool)ms_entries[(int)ModSetting.Input].BoxedValue; + Interaction = (bool)ms_entries[(int)ModSetting.Interaction].BoxedValue; Gestures = (bool)ms_entries[(int)ModSetting.Gestures].BoxedValue; InteractThreadhold = (int)ms_entries[(int)ModSetting.InteractThreadhold].BoxedValue * 0.01f; GripThreadhold = (int)ms_entries[(int)ModSetting.GripThreadhold].BoxedValue * 0.01f; @@ -199,10 +199,10 @@ namespace ml_lme } break; - case ModSetting.Input: + case ModSetting.Interaction: { - Input = bool.Parse(p_value); - InputChange?.Invoke(Input); + Interaction = bool.Parse(p_value); + InteractionChange?.Invoke(Interaction); } break; diff --git a/ml_lme/resources/menu.js b/ml_lme/resources/menu.js index 82f9d4d..417a929 100644 --- a/ml_lme/resources/menu.js +++ b/ml_lme/resources/menu.js @@ -395,7 +395,7 @@ function inp_dropdown_mod_lme(_obj, _callbackName) {
Interaction input:
-
+