From c6506727ab81433c6123a70390931d6990e8552f Mon Sep 17 00:00:00 2001 From: NotAKidoS <37721153+NotAKidOnSteam@users.noreply.github.com> Date: Mon, 17 Jul 2023 09:00:33 -0500 Subject: [PATCH 1/4] Add gesture recognition setting Also fixed attachmentDistance by setting it to 0f. --- ml_lme/LeapInput.cs | 122 +++++++++++++++++++++++++++++++++++++-- ml_lme/Settings.cs | 12 ++++ ml_lme/resources/menu.js | 7 +++ 3 files changed, 136 insertions(+), 5 deletions(-) diff --git a/ml_lme/LeapInput.cs b/ml_lme/LeapInput.cs index fddc1fd..c4aaeaa 100644 --- a/ml_lme/LeapInput.cs +++ b/ml_lme/LeapInput.cs @@ -40,6 +40,7 @@ namespace ml_lme m_handRayLeft.isInteractionRay = true; m_handRayLeft.triggerGazeEvents = false; m_handRayLeft.holderRoot = m_handRayLeft.gameObject; + m_handRayLeft.attachmentDistance = 0f; m_handRayRight = LeapTracking.GetInstance().GetRightHand().gameObject.AddComponent(); m_handRayRight.hand = false; @@ -47,6 +48,7 @@ namespace ml_lme m_handRayRight.isInteractionRay = true; m_handRayRight.triggerGazeEvents = false; m_handRayRight.holderRoot = m_handRayRight.gameObject; + m_handRayRight.attachmentDistance = 0f; m_lineLeft = m_handRayLeft.gameObject.AddComponent(); m_lineLeft.endWidth = 1f; @@ -74,9 +76,11 @@ namespace ml_lme Settings.EnabledChange += this.OnEnableChange; Settings.InputChange += this.OnInputChange; + Settings.GesturesChange += this.OnGesturesChange; OnEnableChange(Settings.Enabled); OnInputChange(Settings.Input); + OnGesturesChange(Settings.Gestures); MelonLoader.MelonCoroutines.Start(WaitForSettings()); MelonLoader.MelonCoroutines.Start(WaitForMaterial()); @@ -133,6 +137,8 @@ namespace ml_lme { ResetFingers(true); m_handVisibleLeft = false; + if (Settings.Gestures) + ResetGestures(true); } } @@ -147,6 +153,8 @@ namespace ml_lme { ResetFingers(false); m_handVisibleRight = false; + if (Settings.Gestures) + ResetGestures(false); } } @@ -166,13 +174,16 @@ namespace ml_lme 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)); } - + public override void UpdateInput() { - if(Settings.Enabled && Settings.Input) - { - GestureMatcher.LeapData l_data = LeapManager.GetInstance().GetLatestData(); + if (!Settings.Enabled) + return; + GestureMatcher.LeapData l_data = LeapManager.GetInstance().GetLatestData(); + + if(Settings.Input) + { if(l_data.m_leftHand.m_present && (!m_inVR || !Utils.IsLeftHandTracked() || !Settings.FingersOnly)) { float l_strength = l_data.m_leftHand.m_grabStrength; @@ -229,6 +240,85 @@ namespace ml_lme } } } + + if (Settings.Gestures) + { + // Left hand gestures + if (l_data.m_leftHand.m_present && (!m_inVR || !Utils.IsLeftHandTracked() || !Settings.FingersOnly)) + { + if (m_inputManager.fingerCurlLeftThumb < 0.5f && m_inputManager.fingerCurlLeftIndex < 0.5f && m_inputManager.fingerCurlLeftMiddle < 0.5f && m_inputManager.fingerCurlLeftRing < 0.5f && m_inputManager.fingerCurlLeftPinky < 0.5f) + { + m_inputManager.gestureLeftRaw = -1f; + } + if (m_inputManager.fingerCurlLeftThumb >= 0.75f || m_inputManager.fingerCurlLeftIndex >= 0.75f || m_inputManager.fingerCurlLeftMiddle >= 0.75f || m_inputManager.fingerCurlLeftRing >= 0.75f || m_inputManager.fingerCurlLeftPinky >= 0.75f) + { + m_inputManager.gestureLeftRaw = Settings.Input ? m_inputManager.gripLeftValue : 1f; + } + if (m_inputManager.fingerCurlLeftIndex >= 0.75f && m_inputManager.fingerCurlLeftMiddle >= 0.75f && m_inputManager.fingerCurlLeftRing >= 0.75f && m_inputManager.fingerCurlLeftPinky >= 0.75f) + { + m_inputManager.gestureLeftRaw = 2f; + } + if (m_inputManager.fingerCurlLeftMiddle >= 0.75f && m_inputManager.fingerCurlLeftRing >= 0.75f && m_inputManager.fingerCurlLeftPinky >= 0.75f) + { + m_inputManager.gestureLeftRaw = 3f; + } + if (m_inputManager.fingerCurlLeftThumb >= 0.75f && m_inputManager.fingerCurlLeftMiddle >= 0.75f && m_inputManager.fingerCurlLeftRing >= 0.75f && m_inputManager.fingerCurlLeftPinky >= 0.75f) + { + m_inputManager.gestureLeftRaw = 4f; + } + if (m_inputManager.fingerCurlLeftThumb >= 0.75f && m_inputManager.fingerCurlLeftRing >= 0.75f && m_inputManager.fingerCurlLeftPinky >= 0.75f) + { + m_inputManager.gestureLeftRaw = 5f; + } + if (m_inputManager.fingerCurlLeftIndex >= 0.75f && m_inputManager.fingerCurlLeftRing >= 0.75f && m_inputManager.fingerCurlLeftPinky >= 0.75f) + { + m_inputManager.gestureLeftRaw = 6f; + } + if (m_inputManager.fingerCurlLeftThumb >= 0.75f && m_inputManager.fingerCurlLeftMiddle >= 0.5f && m_inputManager.fingerCurlLeftRing >= 0.75f) + { + m_inputManager.gestureLeftRaw = 6f; + } + m_inputManager.gestureLeft = m_inputManager.gestureLeftRaw; + } + + // Right hand gestures + if (l_data.m_rightHand.m_present && (!m_inVR || !Utils.IsRightHandTracked() || !Settings.FingersOnly)) + { + if (m_inputManager.fingerCurlRightThumb < 0.5f && m_inputManager.fingerCurlRightIndex < 0.5f && m_inputManager.fingerCurlRightMiddle < 0.5f && m_inputManager.fingerCurlRightRing < 0.5f && m_inputManager.fingerCurlRightPinky < 0.5f) + { + m_inputManager.gestureRightRaw = -1f; + } + if (m_inputManager.fingerCurlRightThumb >= 0.75f || m_inputManager.fingerCurlRightIndex >= 0.75f || m_inputManager.fingerCurlRightMiddle >= 0.75f || m_inputManager.fingerCurlRightRing >= 0.75f || m_inputManager.fingerCurlRightPinky >= 0.75f) + { + m_inputManager.gestureRightRaw = Settings.Input ? m_inputManager.gripRightValue : 1f; + } + if (m_inputManager.fingerCurlRightIndex >= 0.75f && m_inputManager.fingerCurlRightMiddle >= 0.75f && m_inputManager.fingerCurlRightRing >= 0.75f && m_inputManager.fingerCurlRightPinky >= 0.75f) + { + m_inputManager.gestureRightRaw = 2f; + } + if (m_inputManager.fingerCurlRightMiddle >= 0.75f && m_inputManager.fingerCurlRightRing >= 0.75f && m_inputManager.fingerCurlRightPinky >= 0.75f) + { + m_inputManager.gestureRightRaw = 3f; + } + if (m_inputManager.fingerCurlRightThumb >= 0.75f && m_inputManager.fingerCurlRightMiddle >= 0.75f && m_inputManager.fingerCurlRightRing >= 0.75f && m_inputManager.fingerCurlRightPinky >= 0.75f) + { + m_inputManager.gestureRightRaw = 4f; + } + if (m_inputManager.fingerCurlRightThumb >= 0.75f && m_inputManager.fingerCurlRightRing >= 0.75f && m_inputManager.fingerCurlRightPinky >= 0.75f) + { + m_inputManager.gestureRightRaw = 5f; + } + if (m_inputManager.fingerCurlRightIndex >= 0.75f && m_inputManager.fingerCurlRightRing >= 0.75f && m_inputManager.fingerCurlRightPinky >= 0.75f) + { + m_inputManager.gestureRightRaw = 6f; + } + if (m_inputManager.fingerCurlRightThumb >= 0.75f && m_inputManager.fingerCurlRightMiddle >= 0.5f && m_inputManager.fingerCurlRightRing >= 0.75f) + { + m_inputManager.gestureRightRaw = 6f; + } + m_inputManager.gestureRight = m_inputManager.gestureRightRaw; + } + } } // Settings changes @@ -262,6 +352,14 @@ namespace ml_lme } } + void OnGesturesChange(bool p_state) + { + m_inputManager.gestureLeft = 0f; + m_inputManager.gestureLeftRaw = 0f; + m_inputManager.gestureRight = 0f; + m_inputManager.gestureRightRaw = 0f; + } + // Game events internal void OnAvatarSetup() { @@ -348,8 +446,22 @@ namespace ml_lme } } + void ResetGestures(bool p_left) + { + if (p_left) + { + m_inputManager.gestureLeft = 0f; + m_inputManager.gestureLeftRaw = 0f; + } + else + { + m_inputManager.gestureRight = 0f; + m_inputManager.gestureRightRaw = 0f; + } + } + // Game settings - void OnGameSettingBoolChange(string p_name, bool p_state) + void OnGameSettingBoolChange(string p_name, bool p_state) { if(p_name == "ControlUseGripToGrab") m_gripToGrab = p_state; diff --git a/ml_lme/Settings.cs b/ml_lme/Settings.cs index eea6c63..ecd4d6d 100644 --- a/ml_lme/Settings.cs +++ b/ml_lme/Settings.cs @@ -33,6 +33,7 @@ namespace ml_lme HeadZ, TrackElbows, Input, + Gestures, InteractThreadhold, GripThreadhold, VisualHands @@ -48,6 +49,7 @@ namespace ml_lme 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 Gestures { get; private set; } = false; public static float InteractThreadhold { get; private set; } = 0.8f; public static float GripThreadhold { get; private set; } = 0.4f; public static bool VisualHands { get; private set; } = false; @@ -65,6 +67,7 @@ namespace ml_lme static public event Action HeadOffsetChange; static public event Action TrackElbowsChange; static public event Action InputChange; + static public event Action GesturesChange; static public event Action InteractThreadholdChange; static public event Action GripThreadholdChange; static public event Action VisualHandsChange; @@ -91,6 +94,7 @@ namespace ml_lme 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.Gestures.ToString(), Gestures), ms_category.CreateEntry(ModSetting.InteractThreadhold.ToString(), (int)(InteractThreadhold * 100f)), ms_category.CreateEntry(ModSetting.GripThreadhold.ToString(), (int)(GripThreadhold * 100f)), ms_category.CreateEntry(ModSetting.VisualHands.ToString(), VisualHands) @@ -148,6 +152,7 @@ namespace ml_lme ) * 0.01f; TrackElbows = (bool)ms_entries[(int)ModSetting.TrackElbows].BoxedValue; Input = (bool)ms_entries[(int)ModSetting.Input].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; VisualHands = (bool)ms_entries[(int)ModSetting.VisualHands].BoxedValue; @@ -201,6 +206,13 @@ namespace ml_lme } break; + case ModSetting.Gestures: + { + Gestures = bool.Parse(p_value); + GesturesChange?.Invoke(Gestures); + } + break; + case ModSetting.VisualHands: { VisualHands = bool.Parse(p_value); diff --git a/ml_lme/resources/menu.js b/ml_lme/resources/menu.js index 6ad2321..b6f455e 100644 --- a/ml_lme/resources/menu.js +++ b/ml_lme/resources/menu.js @@ -399,6 +399,13 @@ function inp_dropdown_mod_lme(_obj, _callbackName) { +
+
Recognize Gestures:
+
+
+
+
+
Interact gesture threadhold:
From 9225506c26a3aec804551ee3e2f3a7a8b78794af Mon Sep 17 00:00:00 2001 From: NotAKidoS <37721153+NotAKidOnSteam@users.noreply.github.com> Date: Mon, 17 Jul 2023 12:07:21 -0500 Subject: [PATCH 2/4] Redo gesture recognition from scratch. Now it works much better with Leap Motion. --- ml_lme/LeapInput.cs | 124 +++++++++++++++++++++++++++++--------------- 1 file changed, 82 insertions(+), 42 deletions(-) diff --git a/ml_lme/LeapInput.cs b/ml_lme/LeapInput.cs index c4aaeaa..43a4582 100644 --- a/ml_lme/LeapInput.cs +++ b/ml_lme/LeapInput.cs @@ -246,76 +246,116 @@ namespace ml_lme // Left hand gestures if (l_data.m_leftHand.m_present && (!m_inVR || !Utils.IsLeftHandTracked() || !Settings.FingersOnly)) { - if (m_inputManager.fingerCurlLeftThumb < 0.5f && m_inputManager.fingerCurlLeftIndex < 0.5f && m_inputManager.fingerCurlLeftMiddle < 0.5f && m_inputManager.fingerCurlLeftRing < 0.5f && m_inputManager.fingerCurlLeftPinky < 0.5f) + // Finger Point & Finger Gun + if (m_inputManager.fingerCurlLeftIndex < 0.2f && m_inputManager.fingerCurlLeftMiddle > 0.75f && + m_inputManager.fingerCurlLeftRing > 0.75f && m_inputManager.fingerCurlLeftPinky > 0.75f) { - m_inputManager.gestureLeftRaw = -1f; + m_inputManager.gestureLeftRaw = m_inputManager.fingerCurlLeftThumb >= 0.5f ? 4f : 3f; } - if (m_inputManager.fingerCurlLeftThumb >= 0.75f || m_inputManager.fingerCurlLeftIndex >= 0.75f || m_inputManager.fingerCurlLeftMiddle >= 0.75f || m_inputManager.fingerCurlLeftRing >= 0.75f || m_inputManager.fingerCurlLeftPinky >= 0.75f) - { - m_inputManager.gestureLeftRaw = Settings.Input ? m_inputManager.gripLeftValue : 1f; - } - if (m_inputManager.fingerCurlLeftIndex >= 0.75f && m_inputManager.fingerCurlLeftMiddle >= 0.75f && m_inputManager.fingerCurlLeftRing >= 0.75f && m_inputManager.fingerCurlLeftPinky >= 0.75f) - { - m_inputManager.gestureLeftRaw = 2f; - } - if (m_inputManager.fingerCurlLeftMiddle >= 0.75f && m_inputManager.fingerCurlLeftRing >= 0.75f && m_inputManager.fingerCurlLeftPinky >= 0.75f) - { - m_inputManager.gestureLeftRaw = 3f; - } - if (m_inputManager.fingerCurlLeftThumb >= 0.75f && m_inputManager.fingerCurlLeftMiddle >= 0.75f && m_inputManager.fingerCurlLeftRing >= 0.75f && m_inputManager.fingerCurlLeftPinky >= 0.75f) - { - m_inputManager.gestureLeftRaw = 4f; - } - if (m_inputManager.fingerCurlLeftThumb >= 0.75f && m_inputManager.fingerCurlLeftRing >= 0.75f && m_inputManager.fingerCurlLeftPinky >= 0.75f) + + // Peace Sign + if (m_inputManager.fingerCurlLeftIndex < 0.2f && m_inputManager.fingerCurlLeftMiddle < 0.2f && + m_inputManager.fingerCurlLeftRing > 0.75f && m_inputManager.fingerCurlLeftPinky > 0.75f) { m_inputManager.gestureLeftRaw = 5f; } - if (m_inputManager.fingerCurlLeftIndex >= 0.75f && m_inputManager.fingerCurlLeftRing >= 0.75f && m_inputManager.fingerCurlLeftPinky >= 0.75f) + + // Rock and Roll + if (m_inputManager.fingerCurlLeftIndex < 0.2f && m_inputManager.fingerCurlLeftMiddle > 0.75f && + m_inputManager.fingerCurlLeftRing > 0.75f && m_inputManager.fingerCurlLeftPinky < 0.5f) { m_inputManager.gestureLeftRaw = 6f; } - if (m_inputManager.fingerCurlLeftThumb >= 0.75f && m_inputManager.fingerCurlLeftMiddle >= 0.5f && m_inputManager.fingerCurlLeftRing >= 0.75f) + + // Rock and Roll (Middle Finger) + if (m_inputManager.fingerCurlLeftIndex > 0.75f && m_inputManager.fingerCurlLeftMiddle < 0.2f && + m_inputManager.fingerCurlLeftRing > 0.75f && m_inputManager.fingerCurlLeftPinky > 0.75f) { m_inputManager.gestureLeftRaw = 6f; } + + // Fist & Thumbs Up + if (m_inputManager.fingerCurlLeftIndex > 0.5f && m_inputManager.fingerCurlLeftMiddle > 0.5f && + m_inputManager.fingerCurlLeftRing > 0.5f && m_inputManager.fingerCurlLeftPinky > 0.5f) + { + m_inputManager.gestureLeftRaw = m_inputManager.fingerCurlLeftThumb >= 0.5f + ? Mathf.Clamp01((l_data.m_leftHand.m_grabStrength - 0.4f) / 0.6f) + : 2f; + } + + // Relaxed Hand + if (m_inputManager.fingerCurlLeftIndex < 0.5f && m_inputManager.fingerCurlLeftMiddle < 0.5f && + m_inputManager.fingerCurlLeftRing < 0.5f && m_inputManager.fingerCurlLeftPinky < 0.5f) + { + m_inputManager.gestureLeftRaw = Mathf.Clamp01( + (l_data.m_leftHand.m_grabStrength - 0.4f) / 0.6f); + } + + // Open Hand + if (m_inputManager.fingerCurlLeftIndex < 0.2f && m_inputManager.fingerCurlLeftMiddle < 0.2f && + m_inputManager.fingerCurlLeftRing < 0.2f && m_inputManager.fingerCurlLeftPinky < 0.2f) + { + m_inputManager.gestureLeftRaw = -1f; + } + m_inputManager.gestureLeft = m_inputManager.gestureLeftRaw; } // Right hand gestures if (l_data.m_rightHand.m_present && (!m_inVR || !Utils.IsRightHandTracked() || !Settings.FingersOnly)) { - if (m_inputManager.fingerCurlRightThumb < 0.5f && m_inputManager.fingerCurlRightIndex < 0.5f && m_inputManager.fingerCurlRightMiddle < 0.5f && m_inputManager.fingerCurlRightRing < 0.5f && m_inputManager.fingerCurlRightPinky < 0.5f) + // Finger Point & Finger Gun + if (m_inputManager.fingerCurlRightIndex < 0.2f && m_inputManager.fingerCurlRightMiddle > 0.75f && + m_inputManager.fingerCurlRightRing > 0.75f && m_inputManager.fingerCurlRightPinky > 0.75f) { - m_inputManager.gestureRightRaw = -1f; + m_inputManager.gestureRightRaw = m_inputManager.fingerCurlRightThumb >= 0.5f ? 4f : 3f; } - if (m_inputManager.fingerCurlRightThumb >= 0.75f || m_inputManager.fingerCurlRightIndex >= 0.75f || m_inputManager.fingerCurlRightMiddle >= 0.75f || m_inputManager.fingerCurlRightRing >= 0.75f || m_inputManager.fingerCurlRightPinky >= 0.75f) - { - m_inputManager.gestureRightRaw = Settings.Input ? m_inputManager.gripRightValue : 1f; - } - if (m_inputManager.fingerCurlRightIndex >= 0.75f && m_inputManager.fingerCurlRightMiddle >= 0.75f && m_inputManager.fingerCurlRightRing >= 0.75f && m_inputManager.fingerCurlRightPinky >= 0.75f) - { - m_inputManager.gestureRightRaw = 2f; - } - if (m_inputManager.fingerCurlRightMiddle >= 0.75f && m_inputManager.fingerCurlRightRing >= 0.75f && m_inputManager.fingerCurlRightPinky >= 0.75f) - { - m_inputManager.gestureRightRaw = 3f; - } - if (m_inputManager.fingerCurlRightThumb >= 0.75f && m_inputManager.fingerCurlRightMiddle >= 0.75f && m_inputManager.fingerCurlRightRing >= 0.75f && m_inputManager.fingerCurlRightPinky >= 0.75f) - { - m_inputManager.gestureRightRaw = 4f; - } - if (m_inputManager.fingerCurlRightThumb >= 0.75f && m_inputManager.fingerCurlRightRing >= 0.75f && m_inputManager.fingerCurlRightPinky >= 0.75f) + + // Peace Sign + if (m_inputManager.fingerCurlRightIndex < 0.2f && m_inputManager.fingerCurlRightMiddle < 0.2f && + m_inputManager.fingerCurlRightRing > 0.75f && m_inputManager.fingerCurlRightPinky > 0.75f) { m_inputManager.gestureRightRaw = 5f; } - if (m_inputManager.fingerCurlRightIndex >= 0.75f && m_inputManager.fingerCurlRightRing >= 0.75f && m_inputManager.fingerCurlRightPinky >= 0.75f) + + // Rock and Roll + if (m_inputManager.fingerCurlRightIndex < 0.2f && m_inputManager.fingerCurlRightMiddle > 0.75f && + m_inputManager.fingerCurlRightRing > 0.75f && m_inputManager.fingerCurlRightPinky < 0.5f) { m_inputManager.gestureRightRaw = 6f; } - if (m_inputManager.fingerCurlRightThumb >= 0.75f && m_inputManager.fingerCurlRightMiddle >= 0.5f && m_inputManager.fingerCurlRightRing >= 0.75f) + + // Rock and Roll (Middle Finger) + if (m_inputManager.fingerCurlRightIndex > 0.75f && m_inputManager.fingerCurlRightMiddle < 0.2f && + m_inputManager.fingerCurlRightRing > 0.75f && m_inputManager.fingerCurlRightPinky > 0.75f) { m_inputManager.gestureRightRaw = 6f; } + + // Fist & Thumbs Up + if (m_inputManager.fingerCurlRightIndex > 0.5f && m_inputManager.fingerCurlRightMiddle > 0.5f && + m_inputManager.fingerCurlRightRing > 0.5f && m_inputManager.fingerCurlRightPinky > 0.5f) + { + m_inputManager.gestureRightRaw = m_inputManager.fingerCurlRightThumb >= 0.5f + ? Mathf.Clamp01((l_data.m_rightHand.m_grabStrength - 0.4f) / 0.6f) + : 2f; + } + + // Relaxed Hand + if (m_inputManager.fingerCurlRightIndex < 0.5f && m_inputManager.fingerCurlRightMiddle < 0.5f && + m_inputManager.fingerCurlRightRing < 0.5f && m_inputManager.fingerCurlRightPinky < 0.5f) + { + m_inputManager.gestureRightRaw = Mathf.Clamp01( + (l_data.m_rightHand.m_grabStrength - 0.4f) / 0.6f); + } + + // Open Hand + if (m_inputManager.fingerCurlRightIndex < 0.2f && m_inputManager.fingerCurlRightMiddle < 0.2f && + m_inputManager.fingerCurlRightRing < 0.2f && m_inputManager.fingerCurlRightPinky < 0.2f) + { + m_inputManager.gestureRightRaw = -1f; + } + m_inputManager.gestureRight = m_inputManager.gestureRightRaw; } } From 7eb36710e0f3493f2edb24cc6df14e6ee5ad09cc Mon Sep 17 00:00:00 2001 From: NotAKidoS <37721153+NotAKidOnSteam@users.noreply.github.com> Date: Mon, 17 Jul 2023 12:23:09 -0500 Subject: [PATCH 3/4] Remove Middle Finger & Relaxed Hand checks. Any hand that is not recognized shall be relaxed. --- ml_lme/LeapInput.cs | 34 ++++------------------------------ 1 file changed, 4 insertions(+), 30 deletions(-) diff --git a/ml_lme/LeapInput.cs b/ml_lme/LeapInput.cs index 43a4582..a31363a 100644 --- a/ml_lme/LeapInput.cs +++ b/ml_lme/LeapInput.cs @@ -246,6 +246,8 @@ namespace ml_lme // Left hand gestures if (l_data.m_leftHand.m_present && (!m_inVR || !Utils.IsLeftHandTracked() || !Settings.FingersOnly)) { + m_inputManager.gestureLeftRaw = 0f; + // Finger Point & Finger Gun if (m_inputManager.fingerCurlLeftIndex < 0.2f && m_inputManager.fingerCurlLeftMiddle > 0.75f && m_inputManager.fingerCurlLeftRing > 0.75f && m_inputManager.fingerCurlLeftPinky > 0.75f) @@ -267,13 +269,6 @@ namespace ml_lme m_inputManager.gestureLeftRaw = 6f; } - // Rock and Roll (Middle Finger) - if (m_inputManager.fingerCurlLeftIndex > 0.75f && m_inputManager.fingerCurlLeftMiddle < 0.2f && - m_inputManager.fingerCurlLeftRing > 0.75f && m_inputManager.fingerCurlLeftPinky > 0.75f) - { - m_inputManager.gestureLeftRaw = 6f; - } - // Fist & Thumbs Up if (m_inputManager.fingerCurlLeftIndex > 0.5f && m_inputManager.fingerCurlLeftMiddle > 0.5f && m_inputManager.fingerCurlLeftRing > 0.5f && m_inputManager.fingerCurlLeftPinky > 0.5f) @@ -283,14 +278,6 @@ namespace ml_lme : 2f; } - // Relaxed Hand - if (m_inputManager.fingerCurlLeftIndex < 0.5f && m_inputManager.fingerCurlLeftMiddle < 0.5f && - m_inputManager.fingerCurlLeftRing < 0.5f && m_inputManager.fingerCurlLeftPinky < 0.5f) - { - m_inputManager.gestureLeftRaw = Mathf.Clamp01( - (l_data.m_leftHand.m_grabStrength - 0.4f) / 0.6f); - } - // Open Hand if (m_inputManager.fingerCurlLeftIndex < 0.2f && m_inputManager.fingerCurlLeftMiddle < 0.2f && m_inputManager.fingerCurlLeftRing < 0.2f && m_inputManager.fingerCurlLeftPinky < 0.2f) @@ -304,6 +291,8 @@ namespace ml_lme // Right hand gestures if (l_data.m_rightHand.m_present && (!m_inVR || !Utils.IsRightHandTracked() || !Settings.FingersOnly)) { + m_inputManager.gestureRightRaw = 0f; + // Finger Point & Finger Gun if (m_inputManager.fingerCurlRightIndex < 0.2f && m_inputManager.fingerCurlRightMiddle > 0.75f && m_inputManager.fingerCurlRightRing > 0.75f && m_inputManager.fingerCurlRightPinky > 0.75f) @@ -325,13 +314,6 @@ namespace ml_lme m_inputManager.gestureRightRaw = 6f; } - // Rock and Roll (Middle Finger) - if (m_inputManager.fingerCurlRightIndex > 0.75f && m_inputManager.fingerCurlRightMiddle < 0.2f && - m_inputManager.fingerCurlRightRing > 0.75f && m_inputManager.fingerCurlRightPinky > 0.75f) - { - m_inputManager.gestureRightRaw = 6f; - } - // Fist & Thumbs Up if (m_inputManager.fingerCurlRightIndex > 0.5f && m_inputManager.fingerCurlRightMiddle > 0.5f && m_inputManager.fingerCurlRightRing > 0.5f && m_inputManager.fingerCurlRightPinky > 0.5f) @@ -341,14 +323,6 @@ namespace ml_lme : 2f; } - // Relaxed Hand - if (m_inputManager.fingerCurlRightIndex < 0.5f && m_inputManager.fingerCurlRightMiddle < 0.5f && - m_inputManager.fingerCurlRightRing < 0.5f && m_inputManager.fingerCurlRightPinky < 0.5f) - { - m_inputManager.gestureRightRaw = Mathf.Clamp01( - (l_data.m_rightHand.m_grabStrength - 0.4f) / 0.6f); - } - // Open Hand if (m_inputManager.fingerCurlRightIndex < 0.2f && m_inputManager.fingerCurlRightMiddle < 0.2f && m_inputManager.fingerCurlRightRing < 0.2f && m_inputManager.fingerCurlRightPinky < 0.2f) From 77a9ffe84eda816926edfdeceffebcad3b61cc1c Mon Sep 17 00:00:00 2001 From: NotAKidoS <37721153+NotAKidOnSteam@users.noreply.github.com> Date: Mon, 17 Jul 2023 13:00:16 -0500 Subject: [PATCH 4/4] Fix fist strength value Turns out m_grabStrength is already clamped. --- ml_lme/LeapInput.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ml_lme/LeapInput.cs b/ml_lme/LeapInput.cs index a31363a..16c8f4e 100644 --- a/ml_lme/LeapInput.cs +++ b/ml_lme/LeapInput.cs @@ -274,10 +274,10 @@ namespace ml_lme m_inputManager.fingerCurlLeftRing > 0.5f && m_inputManager.fingerCurlLeftPinky > 0.5f) { m_inputManager.gestureLeftRaw = m_inputManager.fingerCurlLeftThumb >= 0.5f - ? Mathf.Clamp01((l_data.m_leftHand.m_grabStrength - 0.4f) / 0.6f) + ? (l_data.m_rightHand.m_grabStrength - 0.5f) * 2f : 2f; } - + // Open Hand if (m_inputManager.fingerCurlLeftIndex < 0.2f && m_inputManager.fingerCurlLeftMiddle < 0.2f && m_inputManager.fingerCurlLeftRing < 0.2f && m_inputManager.fingerCurlLeftPinky < 0.2f) @@ -319,7 +319,7 @@ namespace ml_lme m_inputManager.fingerCurlRightRing > 0.5f && m_inputManager.fingerCurlRightPinky > 0.5f) { m_inputManager.gestureRightRaw = m_inputManager.fingerCurlRightThumb >= 0.5f - ? Mathf.Clamp01((l_data.m_rightHand.m_grabStrength - 0.4f) / 0.6f) + ? (l_data.m_rightHand.m_grabStrength - 0.5f) * 2f : 2f; }