From b547512b696ec7b85fd3b19949901a2dc91558ab Mon Sep 17 00:00:00 2001 From: SDraw Date: Wed, 6 Mar 2024 02:31:06 +0300 Subject: [PATCH] Update to game build 2024r174ex3 Bones oriented fingers tracking --- ml_lme/LeapHand.cs | 129 +++++ ml_lme/LeapInput.cs | 214 +++++--- ml_lme/LeapManager.cs | 452 ++++++++-------- ml_lme/LeapTracked.cs | 229 +++++--- ml_lme/LeapTracking.cs | 582 ++++++++++---------- ml_lme/Settings.cs | 692 ++++++++++++------------ ml_lme/VisualHand.cs | 68 --- ml_lme/ml_lme.csproj | 4 +- ml_lme/resources/leapmotion_hands.asset | Bin 120287 -> 125750 bytes ml_lme/resources/mod_menu.js | 324 +++++------ ml_pmc/PoseCopycat.cs | 134 +++-- ml_pmc/PuppetParser.cs | 244 +++++---- 12 files changed, 1677 insertions(+), 1395 deletions(-) create mode 100644 ml_lme/LeapHand.cs delete mode 100644 ml_lme/VisualHand.cs diff --git a/ml_lme/LeapHand.cs b/ml_lme/LeapHand.cs new file mode 100644 index 0000000..23f15b1 --- /dev/null +++ b/ml_lme/LeapHand.cs @@ -0,0 +1,129 @@ +using UnityEngine; + +namespace ml_lme +{ + class LeapHand + { + public enum FingerBone + { + ThumbMetacarpal = 0, + ThumbProximal, + ThumbIntermediate, + ThumbDistal, + IndexMetacarpal, + IndexProximal, + IndexIntermediate, + IndexDistal, + MiddleMetacarpal, + MiddleProximal, + MiddleIntermediate, + MiddleDistal, + RingMetacarpal, + RingProximal, + RingIntermediate, + RingDistal, + PinkyMetacarpal, + PinkyProximal, + PinkyIntermediate, + PinkyDistal + }; + + readonly Transform m_root = null; + readonly Transform m_wrist = null; + readonly GameObject m_mesh = null; + readonly Transform[] m_fingersBones = null; + readonly Quaternion[] m_initialRotations = null; + + public LeapHand(Transform p_root, bool p_left) + { + m_fingersBones = new Transform[20]; + m_initialRotations = new Quaternion[20]; + + m_root = p_root; + if(m_root != null) + { + m_mesh = m_root.Find(p_left ? "GenericHandL" : "GenericHandR")?.gameObject; + m_wrist = m_root.Find(p_left ? "LeftHand/Wrist" : "RightHand/Wrist"); + if(m_wrist != null) + { + m_fingersBones[0] = null; // Actual thumb-meta, look at Leap Motion docs, dummy, it's zero point + m_fingersBones[1] = m_wrist.Find("thumb_meta"); + m_fingersBones[2] = m_wrist.Find("thumb_meta/thumb_a"); + m_fingersBones[3] = m_wrist.Find("thumb_meta/thumb_a/thumb_b"); + + m_fingersBones[4] = m_wrist.Find("index_meta"); + m_fingersBones[5] = m_wrist.Find("index_meta/index_a"); + m_fingersBones[6] = m_wrist.Find("index_meta/index_a/index_b"); + m_fingersBones[7] = m_wrist.Find("index_meta/index_a/index_b/index_c"); + + m_fingersBones[8] = m_wrist.Find("middle_meta"); + m_fingersBones[9] = m_wrist.Find("middle_meta/middle_a"); + m_fingersBones[10] = m_wrist.Find("middle_meta/middle_a/middle_b"); + m_fingersBones[11] = m_wrist.Find("middle_meta/middle_a/middle_b/middle_c"); + + m_fingersBones[12] = m_wrist.Find("ring_meta"); + m_fingersBones[13] = m_wrist.Find("ring_meta/ring_a"); + m_fingersBones[14] = m_wrist.Find("ring_meta/ring_a/ring_b"); + m_fingersBones[15] = m_wrist.Find("ring_meta/ring_a/ring_b/ring_c"); + + m_fingersBones[16] = m_wrist.Find("pinky_meta"); + m_fingersBones[17] = m_wrist.Find("pinky_meta/pinky_a"); + m_fingersBones[18] = m_wrist.Find("pinky_meta/pinky_a/pinky_b"); + m_fingersBones[19] = m_wrist.Find("pinky_meta/pinky_a/pinky_b/pinky_c"); + } + } + + for(int i = 0; i < 20; i++) + { + if(m_fingersBones[i] != null) + m_initialRotations[i] = m_fingersBones[i].localRotation; + } + } + + public void Update(LeapParser.HandData p_data) + { + if(m_wrist != null) + { + m_wrist.position = p_data.m_position; + m_wrist.rotation = p_data.m_rotation; + + for(int i = 0; i < 20; i++) + { + if(m_fingersBones[i] != null) + { + //m_fingers[i].position = p_data.m_fingerPosition[i]; + m_fingersBones[i].rotation = p_data.m_fingerRotation[i]; + } + } + + m_wrist.localPosition = Vector3.zero; + m_wrist.localRotation = Quaternion.identity; + } + } + + public void Reset() + { + if(m_wrist != null) + { + m_wrist.localPosition = Vector3.zero; + m_wrist.localRotation = Quaternion.identity; + } + + for(int i = 0; i < 20; i++) + { + if(m_fingersBones[i] != null) + m_fingersBones[i].localRotation = m_initialRotations[i]; + } + } + + public Transform GetRoot() => m_root; + public Transform GetWrist() => m_wrist; + public Transform GetFingersBone(FingerBone p_bone) => m_fingersBones[(int)p_bone]; + + public void SetMeshActive(bool p_state) + { + if(m_mesh != null) + m_mesh.SetActive(p_state); + } + } +} diff --git a/ml_lme/LeapInput.cs b/ml_lme/LeapInput.cs index fafbb50..8a31b3b 100644 --- a/ml_lme/LeapInput.cs +++ b/ml_lme/LeapInput.cs @@ -34,7 +34,7 @@ namespace ml_lme m_inVR = Utils.IsInVR(); - m_handRayLeft = LeapTracking.Instance.GetLeftHand().gameObject.AddComponent(); + m_handRayLeft = LeapTracking.Instance.GetLeftHand().GetRoot().gameObject.AddComponent(); m_handRayLeft.hand = true; m_handRayLeft.generalMask = -269; m_handRayLeft.isInteractionRay = true; @@ -56,7 +56,7 @@ namespace ml_lme m_lineLeft.receiveShadows = false; m_handRayLeft.lineRenderer = m_lineLeft; - m_handRayRight = LeapTracking.Instance.GetRightHand().gameObject.AddComponent(); + m_handRayRight = LeapTracking.Instance.GetRightHand().GetRoot().gameObject.AddComponent(); m_handRayRight.hand = false; m_handRayRight.generalMask = -269; m_handRayRight.isInteractionRay = true; @@ -176,36 +176,36 @@ namespace ml_lme base._inputManager.gestureLeftRaw = 0f; // Finger Point & Finger Gun - if((base._inputManager.fingerCurlLeftIndex < 0.2f) && (base._inputManager.fingerCurlLeftMiddle > 0.75f) && - (base._inputManager.fingerCurlLeftRing > 0.75f) && (base._inputManager.fingerCurlLeftPinky > 0.75f)) + if((base._inputManager.fingerFullCurlNormalizedLeftIndex < 0.2f) && (base._inputManager.fingerFullCurlNormalizedLeftMiddle > 0.75f) && + (base._inputManager.fingerFullCurlNormalizedLeftRing > 0.75f) && (base._inputManager.fingerFullCurlNormalizedLeftPinky > 0.75f)) { - base._inputManager.gestureLeftRaw = (base._inputManager.fingerCurlLeftThumb >= 0.5f) ? 4f : 3f; + base._inputManager.gestureLeftRaw = (base._inputManager.fingerFullCurlNormalizedLeftThumb >= 0.5f) ? 4f : 3f; } // Peace Sign - if((base._inputManager.fingerCurlLeftIndex < 0.2f) && (base._inputManager.fingerCurlLeftMiddle < 0.2f) && - (base._inputManager.fingerCurlLeftRing > 0.75f) && (base._inputManager.fingerCurlLeftPinky > 0.75f)) + if((base._inputManager.fingerFullCurlNormalizedLeftIndex < 0.2f) && (base._inputManager.fingerFullCurlNormalizedLeftMiddle < 0.2f) && + (base._inputManager.fingerFullCurlNormalizedLeftRing > 0.75f) && (base._inputManager.fingerFullCurlNormalizedLeftPinky > 0.75f)) { base._inputManager.gestureLeftRaw = 5f; } // Rock and Roll - if((base._inputManager.fingerCurlLeftIndex < 0.2f) && (base._inputManager.fingerCurlLeftMiddle > 0.75f) && - (base._inputManager.fingerCurlLeftRing > 0.75f) && (base._inputManager.fingerCurlLeftPinky < 0.5f)) + if((base._inputManager.fingerFullCurlNormalizedLeftIndex < 0.2f) && (base._inputManager.fingerFullCurlNormalizedLeftMiddle > 0.75f) && + (base._inputManager.fingerFullCurlNormalizedLeftRing > 0.75f) && (base._inputManager.fingerFullCurlNormalizedLeftPinky < 0.5f)) { base._inputManager.gestureLeftRaw = 6f; } // Fist & Thumbs Up - if((base._inputManager.fingerCurlLeftIndex > 0.5f) && (base._inputManager.fingerCurlLeftMiddle > 0.5f) && - (base._inputManager.fingerCurlLeftRing > 0.5f) && (base._inputManager.fingerCurlLeftPinky > 0.5f)) + if((base._inputManager.fingerFullCurlNormalizedLeftIndex > 0.5f) && (base._inputManager.fingerFullCurlNormalizedLeftMiddle > 0.5f) && + (base._inputManager.fingerFullCurlNormalizedLeftRing > 0.5f) && (base._inputManager.fingerFullCurlNormalizedLeftPinky > 0.5f)) { - base._inputManager.gestureLeftRaw = (base._inputManager.fingerCurlLeftThumb >= 0.5f) ? ((l_data.m_leftHand.m_grabStrength - 0.5f) * 2f) : 2f; + base._inputManager.gestureLeftRaw = (base._inputManager.fingerFullCurlNormalizedLeftThumb >= 0.5f) ? ((l_data.m_leftHand.m_grabStrength - 0.5f) * 2f) : 2f; } // Open Hand - if((base._inputManager.fingerCurlLeftIndex < 0.2f) && (base._inputManager.fingerCurlLeftMiddle < 0.2f) && - (base._inputManager.fingerCurlLeftRing < 0.2f) && (base._inputManager.fingerCurlLeftPinky < 0.2f)) + if((base._inputManager.fingerFullCurlNormalizedLeftIndex < 0.2f) && (base._inputManager.fingerFullCurlNormalizedLeftMiddle < 0.2f) && + (base._inputManager.fingerFullCurlNormalizedLeftRing < 0.2f) && (base._inputManager.fingerFullCurlNormalizedLeftPinky < 0.2f)) { base._inputManager.gestureLeftRaw = -1f; } @@ -236,36 +236,36 @@ namespace ml_lme base._inputManager.gestureRightRaw = 0f; // Finger Point & Finger Gun - if((base._inputManager.fingerCurlRightIndex < 0.2f) && (base._inputManager.fingerCurlRightMiddle > 0.75f) && - (base._inputManager.fingerCurlRightRing > 0.75f) && (base._inputManager.fingerCurlRightPinky > 0.75f)) + if((base._inputManager.fingerFullCurlNormalizedRightIndex < 0.2f) && (base._inputManager.fingerFullCurlNormalizedRightMiddle > 0.75f) && + (base._inputManager.fingerFullCurlNormalizedRightRing > 0.75f) && (base._inputManager.fingerFullCurlNormalizedRightPinky > 0.75f)) { - base._inputManager.gestureRightRaw = (base._inputManager.fingerCurlRightThumb >= 0.5f) ? 4f : 3f; + base._inputManager.gestureRightRaw = (base._inputManager.fingerFullCurlNormalizedRightThumb >= 0.5f) ? 4f : 3f; } // Peace Sign - if((base._inputManager.fingerCurlRightIndex < 0.2f) && (base._inputManager.fingerCurlRightMiddle < 0.2f) && - (base._inputManager.fingerCurlRightRing > 0.75f) && (base._inputManager.fingerCurlRightPinky > 0.75f)) + if((base._inputManager.fingerFullCurlNormalizedRightIndex < 0.2f) && (base._inputManager.fingerFullCurlNormalizedRightMiddle < 0.2f) && + (base._inputManager.fingerFullCurlNormalizedRightRing > 0.75f) && (base._inputManager.fingerFullCurlNormalizedRightPinky > 0.75f)) { base._inputManager.gestureRightRaw = 5f; } // Rock and Roll - if((base._inputManager.fingerCurlRightIndex < 0.2f) && (base._inputManager.fingerCurlRightMiddle > 0.75f) && - (base._inputManager.fingerCurlRightRing > 0.75f) && (base._inputManager.fingerCurlRightPinky < 0.5f)) + if((base._inputManager.fingerFullCurlNormalizedRightIndex < 0.2f) && (base._inputManager.fingerFullCurlNormalizedRightMiddle > 0.75f) && + (base._inputManager.fingerFullCurlNormalizedRightRing > 0.75f) && (base._inputManager.fingerFullCurlNormalizedRightPinky < 0.5f)) { base._inputManager.gestureRightRaw = 6f; } // Fist & Thumbs Up - if((base._inputManager.fingerCurlRightIndex > 0.5f) && (base._inputManager.fingerCurlRightMiddle > 0.5f) && - (base._inputManager.fingerCurlRightRing > 0.5f) && (base._inputManager.fingerCurlRightPinky > 0.5f)) + if((base._inputManager.fingerFullCurlNormalizedRightIndex > 0.5f) && (base._inputManager.fingerFullCurlNormalizedRightMiddle > 0.5f) && + (base._inputManager.fingerFullCurlNormalizedRightRing > 0.5f) && (base._inputManager.fingerFullCurlNormalizedRightPinky > 0.5f)) { - base._inputManager.gestureRightRaw = (base._inputManager.fingerCurlRightThumb >= 0.5f) ? ((l_data.m_rightHand.m_grabStrength - 0.5f) * 2f) : 2f; + base._inputManager.gestureRightRaw = (base._inputManager.fingerFullCurlNormalizedRightThumb >= 0.5f) ? ((l_data.m_rightHand.m_grabStrength - 0.5f) * 2f) : 2f; } // Open Hand - if((base._inputManager.fingerCurlRightIndex < 0.2f) && (base._inputManager.fingerCurlRightMiddle < 0.2f) && - (base._inputManager.fingerCurlRightRing < 0.2f) && (base._inputManager.fingerCurlRightPinky < 0.2f)) + if((base._inputManager.fingerFullCurlNormalizedRightIndex < 0.2f) && (base._inputManager.fingerFullCurlNormalizedRightMiddle < 0.2f) && + (base._inputManager.fingerFullCurlNormalizedRightRing < 0.2f) && (base._inputManager.fingerFullCurlNormalizedRightPinky < 0.2f)) { base._inputManager.gestureRightRaw = -1f; } @@ -466,33 +466,71 @@ namespace ml_lme // Arbitrary 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) { - 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); + base._inputManager.finger1StretchedLeftThumb = LeapTracked.ms_lastLeftFingerBones[0]; + base._inputManager.finger2StretchedLeftThumb = LeapTracked.ms_lastLeftFingerBones[1]; + base._inputManager.finger3StretchedLeftThumb = LeapTracked.ms_lastLeftFingerBones[2]; + base._inputManager.fingerSpreadLeftThumb = LeapTracked.ms_lastLeftFingerBones[3]; + + base._inputManager.finger1StretchedLeftIndex = LeapTracked.ms_lastLeftFingerBones[4]; + base._inputManager.finger2StretchedLeftIndex = LeapTracked.ms_lastLeftFingerBones[5]; + base._inputManager.finger3StretchedLeftIndex = LeapTracked.ms_lastLeftFingerBones[6]; + base._inputManager.fingerSpreadLeftIndex = LeapTracked.ms_lastLeftFingerBones[7]; + + base._inputManager.finger1StretchedLeftMiddle = LeapTracked.ms_lastLeftFingerBones[8]; + base._inputManager.finger2StretchedLeftMiddle = LeapTracked.ms_lastLeftFingerBones[9]; + base._inputManager.finger3StretchedLeftMiddle = LeapTracked.ms_lastLeftFingerBones[10]; + base._inputManager.fingerSpreadLeftMiddle = LeapTracked.ms_lastLeftFingerBones[11]; + + base._inputManager.finger1StretchedLeftRing = LeapTracked.ms_lastLeftFingerBones[12]; + base._inputManager.finger2StretchedLeftRing = LeapTracked.ms_lastLeftFingerBones[13]; + base._inputManager.finger3StretchedLeftRing = LeapTracked.ms_lastLeftFingerBones[14]; + base._inputManager.fingerSpreadLeftRing = LeapTracked.ms_lastLeftFingerBones[15]; + + base._inputManager.finger1StretchedLeftPinky = LeapTracked.ms_lastLeftFingerBones[16]; + base._inputManager.finger2StretchedLeftPinky = LeapTracked.ms_lastLeftFingerBones[17]; + base._inputManager.finger3StretchedLeftPinky = LeapTracked.ms_lastLeftFingerBones[18]; + base._inputManager.fingerSpreadLeftPinky = LeapTracked.ms_lastLeftFingerBones[19]; + + base._inputManager.fingerFullCurlNormalizedLeftThumb = p_hand.m_bends[0]; + base._inputManager.fingerFullCurlNormalizedLeftIndex = p_hand.m_bends[1]; + base._inputManager.fingerFullCurlNormalizedLeftMiddle = p_hand.m_bends[2]; + base._inputManager.fingerFullCurlNormalizedLeftRing = p_hand.m_bends[3]; + base._inputManager.fingerFullCurlNormalizedLeftPinky = p_hand.m_bends[4]; } else { - 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); + base._inputManager.finger1StretchedRightThumb = LeapTracked.ms_lastRightFingerBones[0]; + base._inputManager.finger2StretchedRightThumb = LeapTracked.ms_lastRightFingerBones[1]; + base._inputManager.finger3StretchedRightThumb = LeapTracked.ms_lastRightFingerBones[2]; + base._inputManager.fingerSpreadRightThumb = LeapTracked.ms_lastRightFingerBones[3]; + + base._inputManager.finger1StretchedRightIndex = LeapTracked.ms_lastRightFingerBones[4]; + base._inputManager.finger2StretchedRightIndex = LeapTracked.ms_lastRightFingerBones[5]; + base._inputManager.finger3StretchedRightIndex = LeapTracked.ms_lastRightFingerBones[6]; + base._inputManager.fingerSpreadRightIndex = LeapTracked.ms_lastRightFingerBones[7]; + + base._inputManager.finger1StretchedRightMiddle = LeapTracked.ms_lastRightFingerBones[8]; + base._inputManager.finger2StretchedRightMiddle = LeapTracked.ms_lastRightFingerBones[9]; + base._inputManager.finger3StretchedRightMiddle = LeapTracked.ms_lastRightFingerBones[10]; + base._inputManager.fingerSpreadRightMiddle = LeapTracked.ms_lastRightFingerBones[11]; + + base._inputManager.finger1StretchedRightRing = LeapTracked.ms_lastRightFingerBones[12]; + base._inputManager.finger2StretchedRightRing = LeapTracked.ms_lastRightFingerBones[13]; + base._inputManager.finger3StretchedRightRing = LeapTracked.ms_lastRightFingerBones[14]; + base._inputManager.fingerSpreadRightRing = LeapTracked.ms_lastRightFingerBones[15]; + + base._inputManager.finger1StretchedRightPinky = LeapTracked.ms_lastRightFingerBones[16]; + base._inputManager.finger2StretchedRightPinky = LeapTracked.ms_lastRightFingerBones[17]; + base._inputManager.finger3StretchedRightPinky = LeapTracked.ms_lastRightFingerBones[18]; + base._inputManager.fingerSpreadRightPinky = LeapTracked.ms_lastRightFingerBones[19]; + + base._inputManager.fingerFullCurlNormalizedRightThumb = p_hand.m_bends[0]; + base._inputManager.fingerFullCurlNormalizedRightIndex = p_hand.m_bends[1]; + base._inputManager.fingerFullCurlNormalizedRightMiddle = p_hand.m_bends[2]; + base._inputManager.fingerFullCurlNormalizedRightRing = p_hand.m_bends[3]; + base._inputManager.fingerFullCurlNormalizedRightPinky = p_hand.m_bends[4]; } } @@ -500,29 +538,69 @@ namespace ml_lme { if(p_left) { - 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; + base._inputManager.finger1StretchedLeftThumb = -0.5f; + base._inputManager.finger2StretchedLeftThumb = 0.7f; + base._inputManager.finger3StretchedLeftThumb = 0.7f; + base._inputManager.fingerSpreadLeftThumb = 0f; + + base._inputManager.finger1StretchedLeftIndex = 0.5f; + base._inputManager.finger2StretchedLeftIndex = 0.7f; + base._inputManager.finger3StretchedLeftIndex = 0.7f; + base._inputManager.fingerSpreadLeftIndex = 0f; + + base._inputManager.finger1StretchedLeftMiddle = 0.5f; + base._inputManager.finger2StretchedLeftMiddle = 0.7f; + base._inputManager.finger3StretchedLeftMiddle = 0.7f; + base._inputManager.fingerSpreadLeftMiddle = 0f; + + base._inputManager.finger1StretchedLeftRing = 0.5f; + base._inputManager.finger2StretchedLeftRing = 0.7f; + base._inputManager.finger3StretchedLeftRing = 0.7f; + base._inputManager.fingerSpreadLeftRing = 0f; + + base._inputManager.finger1StretchedLeftPinky = 0.5f; + base._inputManager.finger2StretchedLeftPinky = 0.7f; + base._inputManager.finger3StretchedLeftPinky = 0.7f; + base._inputManager.fingerSpreadLeftPinky = 0f; + + base._inputManager.fingerFullCurlNormalizedLeftThumb = 0f; + base._inputManager.fingerFullCurlNormalizedLeftIndex = 0f; + base._inputManager.fingerFullCurlNormalizedLeftMiddle = 0f; + base._inputManager.fingerFullCurlNormalizedLeftRing = 0f; + base._inputManager.fingerFullCurlNormalizedLeftPinky = 0f; } else { - 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; + base._inputManager.finger1StretchedRightThumb = -0.5f; + base._inputManager.finger2StretchedRightThumb = 0.7f; + base._inputManager.finger3StretchedRightThumb = 0.7f; + base._inputManager.fingerSpreadRightThumb = 0f; + + base._inputManager.finger1StretchedRightIndex = 0.5f; + base._inputManager.finger2StretchedRightIndex = 0.7f; + base._inputManager.finger3StretchedRightIndex = 0.7f; + base._inputManager.fingerSpreadRightIndex = 0f; + + base._inputManager.finger1StretchedRightMiddle = 0.5f; + base._inputManager.finger2StretchedRightMiddle = 0.7f; + base._inputManager.finger3StretchedRightMiddle = 0.7f; + base._inputManager.fingerSpreadRightMiddle = 0f; + + base._inputManager.finger1StretchedRightRing = 0.5f; + base._inputManager.finger2StretchedRightRing = 0.7f; + base._inputManager.finger3StretchedRightRing = 0.7f; + base._inputManager.fingerSpreadRightRing = 0f; + + base._inputManager.finger1StretchedRightPinky = 0.5f; + base._inputManager.finger2StretchedRightPinky = 0.7f; + base._inputManager.finger3StretchedRightPinky = 0.7f; + base._inputManager.fingerSpreadRightPinky = 0f; + + base._inputManager.fingerFullCurlNormalizedRightThumb = 0f; + base._inputManager.fingerFullCurlNormalizedRightIndex = 0f; + base._inputManager.fingerFullCurlNormalizedRightMiddle = 0f; + base._inputManager.fingerFullCurlNormalizedRightRing = 0f; + base._inputManager.fingerFullCurlNormalizedRightPinky = 0f; } } diff --git a/ml_lme/LeapManager.cs b/ml_lme/LeapManager.cs index f9fd020..e6a3eab 100644 --- a/ml_lme/LeapManager.cs +++ b/ml_lme/LeapManager.cs @@ -1,226 +1,226 @@ -using ABI.CCK.Components; -using ABI_RC.Core.Player; -using ABI_RC.Systems.InputManagement; -using System.Collections; -using UnityEngine; - -namespace ml_lme -{ - [DisallowMultipleComponent] - class LeapManager : MonoBehaviour - { - public static LeapManager Instance { get; private set; } = null; - - Leap.Controller m_leapController = null; - LeapParser.LeapData m_leapData = null; - - LeapTracking m_leapTracking = null; - LeapTracked m_leapTracked = null; - LeapInput m_leapInput = null; - - void Awake() - { - if(Instance == null) - Instance = this; - - m_leapController = new Leap.Controller(); - m_leapData = new LeapParser.LeapData(); - - DontDestroyOnLoad(this); - - m_leapController.Device += this.OnLeapDeviceInitialized; - m_leapController.DeviceFailure += this.OnLeapDeviceFailure; - m_leapController.DeviceLost += this.OnLeapDeviceLost; - m_leapController.Connect += this.OnLeapServiceConnect; - m_leapController.Disconnect += this.OnLeapServiceDisconnect; - - Settings.EnabledChange += this.OnEnableChange; - Settings.TrackingModeChange += this.OnTrackingModeChange; - - m_leapTracking = new GameObject("[LeapTrackingRoot]").AddComponent(); - m_leapTracking.transform.parent = this.transform; - - OnEnableChange(Settings.Enabled); - OnTrackingModeChange(Settings.TrackingMode); - - MelonLoader.MelonCoroutines.Start(WaitForObjects()); - } - - void OnDestroy() - { - if(Instance == this) - Instance = null; - - m_leapController.StopConnection(); - m_leapController.Device -= this.OnLeapDeviceInitialized; - m_leapController.DeviceFailure -= this.OnLeapDeviceFailure; - m_leapController.DeviceLost -= this.OnLeapDeviceLost; - m_leapController.Connect -= this.OnLeapServiceConnect; - m_leapController.Disconnect -= this.OnLeapServiceDisconnect; - m_leapController.Dispose(); - m_leapController = null; - - if(m_leapTracking != null) - Object.Destroy(m_leapTracking); - m_leapTracking = null; - - if(m_leapTracked != null) - Object.Destroy(m_leapTracked); - m_leapTracked = null; - - if(m_leapInput != null) - { - if(CVRInputManager.Instance != null) - CVRInputManager.Instance.DestroyInputModule(m_leapInput); - else - m_leapInput.ModuleDestroyed(); - } - m_leapInput = null; - - Settings.EnabledChange -= this.OnEnableChange; - Settings.TrackingModeChange -= this.OnTrackingModeChange; - } - - IEnumerator WaitForObjects() - { - while(CVRInputManager.Instance == null) - yield return null; - - while(PlayerSetup.Instance == null) - yield return null; - - while(LeapTracking.Instance == null) - yield return null; - - m_leapInput = new LeapInput(); - CVRInputManager.Instance.AddInputModule(m_leapInput); - - m_leapTracked = PlayerSetup.Instance.gameObject.AddComponent(); - } - - void Update() - { - if(Settings.Enabled) - { - m_leapData.Reset(); - - if(m_leapController.IsConnected) - { - Leap.Frame l_frame = m_leapController.Frame(); - LeapParser.ParseFrame(l_frame, m_leapData); - } - } - } - - public LeapParser.LeapData GetLatestData() => m_leapData; - - // Device events - void OnLeapDeviceInitialized(object p_sender, Leap.DeviceEventArgs p_args) - { - if(Settings.Enabled) - { - m_leapController.SubscribeToDeviceEvents(p_args.Device); - UpdateDeviceTrackingMode(); - } - - Utils.ShowHUDNotification("Leap Motion Extension", "Device initialized"); - } - - void OnLeapDeviceFailure(object p_sender, Leap.DeviceFailureEventArgs p_args) - { - Utils.ShowHUDNotification("Leap Motion Extension", "Device failure", "Code " + p_args.ErrorCode + ": " + p_args.ErrorMessage); - } - - void OnLeapDeviceLost(object p_sender, Leap.DeviceEventArgs p_args) - { - m_leapController.UnsubscribeFromDeviceEvents(p_args.Device); - - Utils.ShowHUDNotification("Leap Motion Extension", "Device lost"); - } - - void OnLeapServiceConnect(object p_sender, Leap.ConnectionEventArgs p_args) - { - Utils.ShowHUDNotification("Leap Motion Extension", "Service connected"); - } - - void OnLeapServiceDisconnect(object p_sender, Leap.ConnectionLostEventArgs p_args) - { - Utils.ShowHUDNotification("Leap Motion Extension", "Service disconnected"); - } - - // Settings - void OnEnableChange(bool p_state) - { - if(p_state) - { - m_leapController.StartConnection(); - UpdateDeviceTrackingMode(); - } - else - m_leapController.StopConnection(); - } - - void OnTrackingModeChange(Settings.LeapTrackingMode p_mode) - { - if(Settings.Enabled) - UpdateDeviceTrackingMode(); - } - - // Game events - internal void OnAvatarClear() - { - if(m_leapTracking != null) - m_leapTracking.OnAvatarClear(); - if(m_leapTracked != null) - m_leapTracked.OnAvatarClear(); - } - - internal void OnAvatarSetup() - { - if(m_leapTracking != null) - m_leapTracking.OnAvatarSetup(); - - if(m_leapTracked != null) - m_leapTracked.OnAvatarSetup(); - } - - internal void OnAvatarReinitialize() - { - if(m_leapTracked != null) - m_leapTracked.OnAvatarReinitialize(); - } - - internal void OnRayScale(float p_scale) - { - m_leapInput?.OnRayScale(p_scale); - } - - internal void OnPlayspaceScale(float p_relation) - { - if(m_leapTracking != null) - m_leapTracking.OnPlayspaceScale(p_relation); - } - - internal void OnPickupGrab(CVRPickupObject p_pickup) - { - m_leapInput?.OnPickupGrab(p_pickup); - } - - // Arbitrary - void UpdateDeviceTrackingMode() - { - m_leapController.ClearPolicy(Leap.Controller.PolicyFlag.POLICY_OPTIMIZE_SCREENTOP, null); - m_leapController.ClearPolicy(Leap.Controller.PolicyFlag.POLICY_OPTIMIZE_HMD, null); - - switch(Settings.TrackingMode) - { - case Settings.LeapTrackingMode.Screentop: - m_leapController.SetPolicy(Leap.Controller.PolicyFlag.POLICY_OPTIMIZE_SCREENTOP, null); - break; - case Settings.LeapTrackingMode.HMD: - m_leapController.SetPolicy(Leap.Controller.PolicyFlag.POLICY_OPTIMIZE_HMD, null); - break; - } - } - } -} +using ABI.CCK.Components; +using ABI_RC.Core.Player; +using ABI_RC.Systems.InputManagement; +using System.Collections; +using UnityEngine; + +namespace ml_lme +{ + [DisallowMultipleComponent] + class LeapManager : MonoBehaviour + { + public static LeapManager Instance { get; private set; } = null; + + Leap.Controller m_leapController = null; + LeapParser.LeapData m_leapData = null; + + LeapTracking m_leapTracking = null; + LeapTracked m_leapTracked = null; + LeapInput m_leapInput = null; + + void Awake() + { + if(Instance == null) + Instance = this; + + m_leapController = new Leap.Controller(); + m_leapData = new LeapParser.LeapData(); + + DontDestroyOnLoad(this); + + m_leapController.Device += this.OnLeapDeviceInitialized; + m_leapController.DeviceFailure += this.OnLeapDeviceFailure; + m_leapController.DeviceLost += this.OnLeapDeviceLost; + m_leapController.Connect += this.OnLeapServiceConnect; + m_leapController.Disconnect += this.OnLeapServiceDisconnect; + + Settings.EnabledChange += this.OnEnableChange; + Settings.TrackingModeChange += this.OnTrackingModeChange; + + m_leapTracking = new GameObject("[LeapTrackingRoot]").AddComponent(); + m_leapTracking.transform.parent = this.transform; + + OnEnableChange(Settings.Enabled); + OnTrackingModeChange(Settings.TrackingMode); + + MelonLoader.MelonCoroutines.Start(WaitForObjects()); + } + + void OnDestroy() + { + if(Instance == this) + Instance = null; + + m_leapController.StopConnection(); + m_leapController.Device -= this.OnLeapDeviceInitialized; + m_leapController.DeviceFailure -= this.OnLeapDeviceFailure; + m_leapController.DeviceLost -= this.OnLeapDeviceLost; + m_leapController.Connect -= this.OnLeapServiceConnect; + m_leapController.Disconnect -= this.OnLeapServiceDisconnect; + m_leapController.Dispose(); + m_leapController = null; + + if(m_leapTracking != null) + Object.Destroy(m_leapTracking); + m_leapTracking = null; + + if(m_leapTracked != null) + Object.Destroy(m_leapTracked); + m_leapTracked = null; + + if(m_leapInput != null) + { + if(CVRInputManager.Instance != null) + CVRInputManager.Instance.DestroyInputModule(m_leapInput); + else + m_leapInput.ModuleDestroyed(); + } + m_leapInput = null; + + Settings.EnabledChange -= this.OnEnableChange; + Settings.TrackingModeChange -= this.OnTrackingModeChange; + } + + IEnumerator WaitForObjects() + { + while(CVRInputManager.Instance == null) + yield return null; + + while(PlayerSetup.Instance == null) + yield return null; + + while(LeapTracking.Instance == null) + yield return null; + + m_leapInput = new LeapInput(); + CVRInputManager.Instance.AddInputModule(m_leapInput); + + m_leapTracked = PlayerSetup.Instance.gameObject.AddComponent(); + } + + void Update() + { + if(Settings.Enabled) + { + m_leapData.Reset(); + + if(m_leapController.IsConnected) + { + Leap.Frame l_frame = m_leapController.Frame(); + LeapParser.ParseFrame(l_frame, m_leapData); + } + } + } + + public LeapParser.LeapData GetLatestData() => m_leapData; + + // Device events + void OnLeapDeviceInitialized(object p_sender, Leap.DeviceEventArgs p_args) + { + if(Settings.Enabled) + { + m_leapController.SubscribeToDeviceEvents(p_args.Device); + UpdateDeviceTrackingMode(); + } + + Utils.ShowHUDNotification("Leap Motion Extension", "Device initialized"); + } + + void OnLeapDeviceFailure(object p_sender, Leap.DeviceFailureEventArgs p_args) + { + Utils.ShowHUDNotification("Leap Motion Extension", "Device failure", "Code " + p_args.ErrorCode + ": " + p_args.ErrorMessage); + } + + void OnLeapDeviceLost(object p_sender, Leap.DeviceEventArgs p_args) + { + m_leapController.UnsubscribeFromDeviceEvents(p_args.Device); + + Utils.ShowHUDNotification("Leap Motion Extension", "Device lost"); + } + + void OnLeapServiceConnect(object p_sender, Leap.ConnectionEventArgs p_args) + { + Utils.ShowHUDNotification("Leap Motion Extension", "Service connected"); + } + + void OnLeapServiceDisconnect(object p_sender, Leap.ConnectionLostEventArgs p_args) + { + Utils.ShowHUDNotification("Leap Motion Extension", "Service disconnected"); + } + + // Settings + void OnEnableChange(bool p_state) + { + if(p_state) + { + m_leapController.StartConnection(); + UpdateDeviceTrackingMode(); + } + else + m_leapController.StopConnection(); + } + + void OnTrackingModeChange(Settings.LeapTrackingMode p_mode) + { + if(Settings.Enabled) + UpdateDeviceTrackingMode(); + } + + // Game events + internal void OnAvatarClear() + { + if(m_leapTracking != null) + m_leapTracking.OnAvatarClear(); + if(m_leapTracked != null) + m_leapTracked.OnAvatarClear(); + } + + internal void OnAvatarSetup() + { + if(m_leapTracking != null) + m_leapTracking.OnAvatarSetup(); + + if(m_leapTracked != null) + m_leapTracked.OnAvatarSetup(); + } + + internal void OnAvatarReinitialize() + { + if(m_leapTracked != null) + m_leapTracked.OnAvatarReinitialize(); + } + + internal void OnRayScale(float p_scale) + { + m_leapInput?.OnRayScale(p_scale); + } + + internal void OnPlayspaceScale(float p_relation) + { + if(m_leapTracking != null) + m_leapTracking.OnPlayspaceScale(p_relation); + } + + internal void OnPickupGrab(CVRPickupObject p_pickup) + { + m_leapInput?.OnPickupGrab(p_pickup); + } + + // Arbitrary + void UpdateDeviceTrackingMode() + { + m_leapController.ClearPolicy(Leap.Controller.PolicyFlag.POLICY_OPTIMIZE_SCREENTOP, null); + m_leapController.ClearPolicy(Leap.Controller.PolicyFlag.POLICY_OPTIMIZE_HMD, null); + + switch(Settings.TrackingMode) + { + case Settings.LeapTrackingMode.Screentop: + m_leapController.SetPolicy(Leap.Controller.PolicyFlag.POLICY_OPTIMIZE_SCREENTOP, null); + break; + case Settings.LeapTrackingMode.HMD: + m_leapController.SetPolicy(Leap.Controller.PolicyFlag.POLICY_OPTIMIZE_HMD, null); + break; + } + } + } +} diff --git a/ml_lme/LeapTracked.cs b/ml_lme/LeapTracked.cs index b7936f4..9d73b23 100644 --- a/ml_lme/LeapTracked.cs +++ b/ml_lme/LeapTracked.cs @@ -1,11 +1,14 @@ using ABI_RC.Core.Player; using ABI_RC.Systems.IK; using RootMotion.FinalIK; +using System.Collections; +using System.Collections.Generic; using UnityEngine; namespace ml_lme { [DisallowMultipleComponent] + [DefaultExecutionOrder(999999)] class LeapTracked : MonoBehaviour { struct IKInfo @@ -18,17 +21,64 @@ namespace ml_lme public Transform m_rightElbowTarget; } + struct FingerBoneInfo + { + public LeapHand.FingerBone m_bone; + public Transform m_targetBone; + public Transform m_sourceBone; + public Quaternion m_offset; + } + static readonly Quaternion ms_offsetLeft = Quaternion.Euler(0f, 90f, 0f); static readonly Quaternion ms_offsetRight = Quaternion.Euler(0f, 270f, 0f); + static readonly (HumanBodyBones, LeapHand.FingerBone, bool)[] ms_fingerBonesLinks = + { + (HumanBodyBones.LeftThumbProximal, LeapHand.FingerBone.ThumbProximal, true), + (HumanBodyBones.LeftThumbIntermediate, LeapHand.FingerBone.ThumbIntermediate, true), + (HumanBodyBones.LeftThumbDistal, LeapHand.FingerBone.ThumbDistal, true), + (HumanBodyBones.LeftIndexProximal, LeapHand.FingerBone.IndexProximal, true), + (HumanBodyBones.LeftIndexIntermediate, LeapHand.FingerBone.IndexIntermediate, true), + (HumanBodyBones.LeftIndexDistal, LeapHand.FingerBone.IndexDistal, true), + (HumanBodyBones.LeftMiddleProximal, LeapHand.FingerBone.MiddleProximal, true), + (HumanBodyBones.LeftMiddleIntermediate, LeapHand.FingerBone.MiddleIntermediate, true), + (HumanBodyBones.LeftMiddleDistal, LeapHand.FingerBone.MiddleDistal, true), + (HumanBodyBones.LeftRingProximal, LeapHand.FingerBone.RingProximal, true), + (HumanBodyBones.LeftRingIntermediate, LeapHand.FingerBone.RingIntermediate, true), + (HumanBodyBones.LeftRingDistal, LeapHand.FingerBone.RingDistal, true), + (HumanBodyBones.LeftLittleProximal, LeapHand.FingerBone.PinkyProximal, true), + (HumanBodyBones.LeftLittleIntermediate, LeapHand.FingerBone.PinkyIntermediate, true), + (HumanBodyBones.LeftLittleDistal, LeapHand.FingerBone.PinkyDistal, true), + + (HumanBodyBones.RightThumbProximal, LeapHand.FingerBone.ThumbProximal, false), + (HumanBodyBones.RightThumbIntermediate, LeapHand.FingerBone.ThumbIntermediate, false), + (HumanBodyBones.RightThumbDistal, LeapHand.FingerBone.ThumbDistal, false), + (HumanBodyBones.RightIndexProximal, LeapHand.FingerBone.IndexProximal, false), + (HumanBodyBones.RightIndexIntermediate, LeapHand.FingerBone.IndexIntermediate, false), + (HumanBodyBones.RightIndexDistal, LeapHand.FingerBone.IndexDistal, false), + (HumanBodyBones.RightMiddleProximal, LeapHand.FingerBone.MiddleProximal, false), + (HumanBodyBones.RightMiddleIntermediate, LeapHand.FingerBone.MiddleIntermediate, false), + (HumanBodyBones.RightMiddleDistal, LeapHand.FingerBone.MiddleDistal, false), + (HumanBodyBones.RightRingProximal, LeapHand.FingerBone.RingProximal, false), + (HumanBodyBones.RightRingIntermediate, LeapHand.FingerBone.RingIntermediate, false), + (HumanBodyBones.RightRingDistal, LeapHand.FingerBone.RingDistal, false), + (HumanBodyBones.RightLittleProximal, LeapHand.FingerBone.PinkyProximal, false), + (HumanBodyBones.RightLittleIntermediate, LeapHand.FingerBone.PinkyIntermediate, false), + (HumanBodyBones.RightLittleDistal, LeapHand.FingerBone.PinkyDistal, false), + }; + + public static readonly float[] ms_lastLeftFingerBones = new float[20]; + public static readonly float[] ms_lastRightFingerBones = new float[20]; + bool m_inVR = false; VRIK m_vrIK = null; - Transform m_hips = null; bool m_enabled = true; bool m_fingersOnly = false; bool m_trackElbows = true; + Transform m_leftHand = null; + Transform m_rightHand = null; IKInfo m_vrIKInfo; ArmIK m_leftArmIK = null; ArmIK m_rightArmIK = null; @@ -39,18 +89,30 @@ namespace ml_lme bool m_leftTargetActive = false; // VRIK only bool m_rightTargetActive = false; // VRIK only + readonly List m_leftFingerBones = null; + readonly List m_rightFingerBones = null; + + Quaternion m_leftWristOffset; + Quaternion m_rightWristOffset; + + internal LeapTracked() + { + m_leftFingerBones = new List(); + m_rightFingerBones = new List(); + } + // Unity events void Start() { m_inVR = Utils.IsInVR(); m_leftHandTarget = new GameObject("RotationTarget").transform; - m_leftHandTarget.parent = LeapTracking.Instance.GetLeftHand(); + m_leftHandTarget.parent = LeapTracking.Instance.GetLeftHand().GetRoot(); m_leftHandTarget.localPosition = Vector3.zero; m_leftHandTarget.localRotation = Quaternion.identity; m_rightHandTarget = new GameObject("RotationTarget").transform; - m_rightHandTarget.parent = LeapTracking.Instance.GetRightHand(); + m_rightHandTarget.parent = LeapTracking.Instance.GetRightHand().GetRoot(); m_rightHandTarget.localPosition = Vector3.zero; m_rightHandTarget.localRotation = Quaternion.identity; @@ -114,19 +176,47 @@ namespace ml_lme void LateUpdate() { - if(m_enabled && (m_vrIK == null) && (m_poseHandler != null)) + if(m_enabled && (m_poseHandler != null)) { LeapParser.LeapData l_data = LeapManager.Instance.GetLatestData(); - - Vector3 l_hipsLocalPos = m_hips.localPosition; - Quaternion l_hipsLocalRot = m_hips.localRotation; + if(l_data.m_leftHand.m_present) + { + Transform l_leapWrist = LeapTracking.Instance.GetLeftHand().GetWrist(); + Quaternion l_turnBack = (m_leftHand.rotation * m_leftWristOffset) * Quaternion.Inverse(l_leapWrist.rotation); + foreach(var l_info in m_leftFingerBones) + l_info.m_targetBone.rotation = l_turnBack * (l_info.m_sourceBone.rotation * l_info.m_offset); + } + if(l_data.m_rightHand.m_present) + { + Transform l_leapWrist = LeapTracking.Instance.GetRightHand().GetWrist(); + Quaternion l_turnBack = (m_rightHand.rotation * m_rightWristOffset) * Quaternion.Inverse(l_leapWrist.rotation); + foreach(var l_info in m_rightFingerBones) + l_info.m_targetBone.rotation = l_turnBack * (l_info.m_sourceBone.rotation * l_info.m_offset); + } m_poseHandler.GetHumanPose(ref m_pose); - UpdateFingers(l_data); - m_poseHandler.SetHumanPose(ref m_pose); - - m_hips.localPosition = l_hipsLocalPos; - m_hips.localRotation = l_hipsLocalRot; + if(l_data.m_leftHand.m_present) + { + for(int i = 0; i < 5; i++) + { + int l_offset = i * 4; + ms_lastLeftFingerBones[l_offset] = m_pose.muscles[(int)MuscleIndex.LeftThumb1Stretched + l_offset]; + ms_lastLeftFingerBones[l_offset + 1] = m_pose.muscles[(int)MuscleIndex.LeftThumb2Stretched + l_offset]; + ms_lastLeftFingerBones[l_offset + 2] = m_pose.muscles[(int)MuscleIndex.LeftThumb3Stretched + l_offset]; + ms_lastLeftFingerBones[l_offset + 3] = m_pose.muscles[(int)MuscleIndex.LeftThumbSpread + l_offset]; + } + } + if(l_data.m_rightHand.m_present) + { + for(int i = 0; i < 5; i++) + { + int l_offset = i * 4; + ms_lastRightFingerBones[l_offset] = m_pose.muscles[(int)MuscleIndex.RightThumb1Stretched + l_offset]; + ms_lastRightFingerBones[l_offset + 1] = m_pose.muscles[(int)MuscleIndex.RightThumb2Stretched + l_offset]; + ms_lastRightFingerBones[l_offset + 2] = m_pose.muscles[(int)MuscleIndex.RightThumb3Stretched + l_offset]; + ms_lastRightFingerBones[l_offset + 3] = m_pose.muscles[(int)MuscleIndex.RightThumbSpread + l_offset]; + } + } } } @@ -134,7 +224,6 @@ namespace ml_lme internal void OnAvatarClear() { m_vrIK = null; - m_hips = null; m_leftArmIK = null; m_rightArmIK = null; m_leftTargetActive = false; @@ -147,6 +236,14 @@ namespace ml_lme m_leftHandTarget.localRotation = Quaternion.identity; m_rightHandTarget.localPosition = Vector3.zero; m_rightHandTarget.localRotation = Quaternion.identity; + + m_leftFingerBones.Clear(); + m_rightFingerBones.Clear(); + + m_leftHand = null; + m_rightHand = null; + m_leftWristOffset = Quaternion.identity; + m_rightWristOffset = Quaternion.identity; } internal void OnAvatarSetup() @@ -156,27 +253,31 @@ namespace ml_lme if(PlayerSetup.Instance._animator.isHuman) { - m_hips = PlayerSetup.Instance._animator.GetBoneTransform(HumanBodyBones.Hips); m_poseHandler = new HumanPoseHandler(PlayerSetup.Instance._animator.avatar, PlayerSetup.Instance._animator.transform); m_poseHandler.GetHumanPose(ref m_pose); - if(!m_inVR) + if(m_inVR) + { + PlayerSetup.Instance._avatar.transform.localPosition = Vector3.zero; + PlayerSetup.Instance._avatar.transform.localRotation = Quaternion.identity; + } + else PoseHelper.ForceTPose(PlayerSetup.Instance._animator); - Transform l_hand = PlayerSetup.Instance._animator.GetBoneTransform(HumanBodyBones.LeftHand); - if(l_hand != null) - m_leftHandTarget.localRotation = ms_offsetLeft * (PlayerSetup.Instance._avatar.transform.GetMatrix().inverse * l_hand.GetMatrix()).rotation; + m_leftHand = PlayerSetup.Instance._animator.GetBoneTransform(HumanBodyBones.LeftHand); + m_leftHandTarget.localRotation = ms_offsetLeft * (Quaternion.Inverse(PlayerSetup.Instance._avatar.transform.rotation) * m_leftHand.rotation); - l_hand = PlayerSetup.Instance._animator.GetBoneTransform(HumanBodyBones.RightHand); - if(l_hand != null) - m_rightHandTarget.localRotation = ms_offsetRight * (PlayerSetup.Instance._avatar.transform.GetMatrix().inverse * l_hand.GetMatrix()).rotation; + m_rightHand = PlayerSetup.Instance._animator.GetBoneTransform(HumanBodyBones.RightHand); + m_rightHandTarget.localRotation = ms_offsetRight * (Quaternion.Inverse(PlayerSetup.Instance._avatar.transform.rotation) * m_rightHand.rotation); + + ParseFingersBones(); if(m_vrIK != null) { m_vrIK.onPreSolverUpdate.AddListener(this.OnIKPreUpdate); m_vrIK.onPostSolverUpdate.AddListener(this.OnIKPostUpdate); } - else if(!m_inVR) + else SetupArmIK(); } } @@ -195,7 +296,7 @@ namespace ml_lme m_vrIK.onPreSolverUpdate.AddListener(this.OnIKPreUpdate); m_vrIK.onPostSolverUpdate.AddListener(this.OnIKPostUpdate); } - else if(!m_inVR) + else { PoseHelper.ForceTPose(PlayerSetup.Instance._animator); SetupArmIK(); @@ -350,69 +451,33 @@ namespace ml_lme } } - void UpdateFingers(LeapParser.LeapData p_data) + void ParseFingersBones() { - if(p_data.m_leftHand.m_present) + LeapTracking.Instance.GetLeftHand().Reset(); + LeapTracking.Instance.GetLeftHand().GetWrist().rotation = PlayerSetup.Instance.transform.rotation * ms_offsetRight; // Weird, but that's how it works + m_leftWristOffset = Quaternion.Inverse(m_leftHand.rotation) * LeapTracking.Instance.GetLeftHand().GetWrist().rotation; + + LeapTracking.Instance.GetRightHand().Reset(); + LeapTracking.Instance.GetRightHand().GetWrist().rotation = PlayerSetup.Instance.transform.rotation * ms_offsetLeft; // Weird, but that's how it works + m_rightWristOffset = Quaternion.Inverse(m_rightHand.rotation) * LeapTracking.Instance.GetRightHand().GetWrist().rotation; + + foreach(var l_link in ms_fingerBonesLinks) { - 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]); + Transform l_transform = PlayerSetup.Instance._animator.GetBoneTransform(l_link.Item1); + if(l_transform != null) + { + FingerBoneInfo l_info = new FingerBoneInfo(); + l_info.m_bone = l_link.Item2; + l_info.m_targetBone = l_transform; + l_info.m_sourceBone = (l_link.Item3 ? LeapTracking.Instance.GetLeftHand().GetFingersBone(l_link.Item2) : LeapTracking.Instance.GetRightHand().GetFingersBone(l_link.Item2)); + l_info.m_offset = Quaternion.Inverse(l_info.m_sourceBone.rotation) * l_info.m_targetBone.rotation; - UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.LeftIndex1Stretched, 0.5f - p_data.m_leftHand.m_bends[1]); - UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.LeftIndex2Stretched, 0.7f - p_data.m_leftHand.m_bends[1] * 2f); - UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.LeftIndex3Stretched, 0.7f - p_data.m_leftHand.m_bends[1] * 2f); - UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.LeftIndexSpread, p_data.m_leftHand.m_spreads[1]); - - UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.LeftMiddle1Stretched, 0.5f - p_data.m_leftHand.m_bends[2]); - UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.LeftMiddle2Stretched, 0.7f - p_data.m_leftHand.m_bends[2] * 2f); - UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.LeftMiddle3Stretched, 0.7f - p_data.m_leftHand.m_bends[2] * 2f); - UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.LeftMiddleSpread, p_data.m_leftHand.m_spreads[2]); - - UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.LeftRing1Stretched, 0.5f - p_data.m_leftHand.m_bends[3]); - UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.LeftRing2Stretched, 0.7f - p_data.m_leftHand.m_bends[3] * 2f); - UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.LeftRing3Stretched, 0.7f - p_data.m_leftHand.m_bends[3] * 2f); - UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.LeftRingSpread, -p_data.m_leftHand.m_spreads[3]); - - UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.LeftLittle1Stretched, 0.5f - p_data.m_leftHand.m_bends[4]); - UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.LeftLittle2Stretched, 0.7f - p_data.m_leftHand.m_bends[4] * 2f); - UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.LeftLittle3Stretched, 0.7f - p_data.m_leftHand.m_bends[4] * 2f); - UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.LeftLittleSpread, -p_data.m_leftHand.m_spreads[4]); + if(l_link.Item3) + m_leftFingerBones.Add(l_info); + else + m_rightFingerBones.Add(l_info); + } } - - 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.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]); - - UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.RightIndex1Stretched, 0.5f - p_data.m_rightHand.m_bends[1]); - UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.RightIndex2Stretched, 0.7f - p_data.m_rightHand.m_bends[1] * 2f); - UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.RightIndex3Stretched, 0.7f - p_data.m_rightHand.m_bends[1] * 2f); - UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.RightIndexSpread, p_data.m_rightHand.m_spreads[1]); - - UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.RightMiddle1Stretched, 0.5f - p_data.m_rightHand.m_bends[2]); - UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.RightMiddle2Stretched, 0.7f - p_data.m_rightHand.m_bends[2] * 2f); - UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.RightMiddle3Stretched, 0.7f - p_data.m_rightHand.m_bends[2] * 2f); - UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.RightMiddleSpread, p_data.m_rightHand.m_spreads[2]); - - UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.RightRing1Stretched, 0.5f - p_data.m_rightHand.m_bends[3]); - UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.RightRing2Stretched, 0.7f - p_data.m_rightHand.m_bends[3] * 2f); - UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.RightRing3Stretched, 0.7f - p_data.m_rightHand.m_bends[3] * 2f); - UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.RightRingSpread, -p_data.m_rightHand.m_spreads[3]); - - UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.RightLittle1Stretched, 0.5f - p_data.m_rightHand.m_bends[4]); - UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.RightLittle2Stretched, 0.7f - p_data.m_rightHand.m_bends[4] * 2f); - UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.RightLittle3Stretched, 0.7f - p_data.m_rightHand.m_bends[4] * 2f); - UpdatePoseMuscle(ref m_pose, (int)MuscleIndex.RightLittleSpread, -p_data.m_rightHand.m_spreads[4]); - } - } - - static void UpdatePoseMuscle(ref HumanPose p_pose, int p_index, float p_value) - { - if(p_pose.muscles.Length > p_index) - p_pose.muscles[p_index] = p_value; } } } diff --git a/ml_lme/LeapTracking.cs b/ml_lme/LeapTracking.cs index 1cd411c..535805d 100644 --- a/ml_lme/LeapTracking.cs +++ b/ml_lme/LeapTracking.cs @@ -1,302 +1,280 @@ -using ABI_RC.Core.Player; -using ABI_RC.Systems.VRModeSwitch; -using System.Collections; -using UnityEngine; - -namespace ml_lme -{ - [DisallowMultipleComponent] - class LeapTracking : MonoBehaviour - { - public static LeapTracking Instance { get; private set; } = null; - static Quaternion ms_dummyRotation = Quaternion.identity; - static readonly Quaternion ms_hmdRotation = new Quaternion(0f, 0.7071068f, 0.7071068f, 0f); - static readonly Quaternion ms_screentopRotation = new Quaternion(0f, 0f, -1f, 0f); - - bool m_inVR = false; - - GameObject m_leapHandLeft = null; - GameObject m_leapHandRight = null; - GameObject m_leapElbowLeft = null; - GameObject m_leapElbowRight = null; - GameObject m_leapControllerModel = null; - GameObject m_visualHands = null; - VisualHand m_visualHandLeft = null; - VisualHand m_visualHandRight = null; - - float m_scaleRelation = 1f; - - void Start() - { - if(Instance == null) - Instance = this; - - m_inVR = Utils.IsInVR(); - - m_leapHandLeft = new GameObject("LeapHandLeft"); - m_leapHandLeft.transform.parent = this.transform; - m_leapHandLeft.transform.localPosition = Vector3.zero; - m_leapHandLeft.transform.localRotation = Quaternion.identity; - - m_leapHandRight = new GameObject("LeapHandRight"); - m_leapHandRight.transform.parent = this.transform; - m_leapHandRight.transform.localPosition = Vector3.zero; - m_leapHandRight.transform.localRotation = Quaternion.identity; - - m_leapElbowLeft = new GameObject("LeapElbowLeft"); - m_leapElbowLeft.transform.parent = this.transform; - m_leapElbowLeft.transform.localPosition = Vector3.zero; - m_leapElbowLeft.transform.localRotation = Quaternion.identity; - - m_leapElbowRight = new GameObject("LeapElbowRight"); - m_leapElbowRight.transform.parent = this.transform; - m_leapElbowRight.transform.localPosition = Vector3.zero; - m_leapElbowRight.transform.localRotation = Quaternion.identity; - - m_leapControllerModel = AssetsHandler.GetAsset("assets/models/leapmotion/leap_motion_1_0.obj"); - if(m_leapControllerModel != null) - { - m_leapControllerModel.name = "LeapModel"; - m_leapControllerModel.transform.parent = this.transform; - m_leapControllerModel.transform.localPosition = Vector3.zero; - m_leapControllerModel.transform.localRotation = Quaternion.identity; - } - - m_visualHands = AssetsHandler.GetAsset("assets/models/hands/leaphands.prefab"); - if(m_visualHands != null) - { - m_visualHands.name = "VisualHands"; - m_visualHands.transform.parent = this.transform; - m_visualHands.transform.localPosition = Vector3.zero; - m_visualHands.transform.localRotation = Quaternion.identity; - - m_visualHandLeft = new VisualHand(m_visualHands.transform.Find("HandL"), true); - m_visualHandRight = new VisualHand(m_visualHands.transform.Find("HandR"), false); - } - - Settings.DesktopOffsetChange += this.OnDesktopOffsetChange; - Settings.ModelVisibilityChange += this.OnModelVisibilityChange; - Settings.VisualHandsChange += this.OnVisualHandsChange; - Settings.TrackingModeChange += this.OnTrackingModeChange; - Settings.RootAngleChange += this.OnRootAngleChange; - Settings.HeadAttachChange += this.OnHeadAttachChange; - Settings.HeadOffsetChange += this.OnHeadOffsetChange; - - MelonLoader.MelonCoroutines.Start(WaitForLocalPlayer()); - - OnModelVisibilityChange(Settings.ModelVisibility); - OnVisualHandsChange(Settings.VisualHands); - OnTrackingModeChange(Settings.TrackingMode); - OnRootAngleChange(Settings.RootAngle); - - VRModeSwitchEvents.OnInitializeXR.AddListener(this.OnModeSwitch); - VRModeSwitchEvents.OnDeinitializeXR.AddListener(this.OnModeSwitch); - } - - IEnumerator WaitForLocalPlayer() - { - while(PlayerSetup.Instance == null) - yield return null; - - OnHeadAttachChange(Settings.HeadAttach); - } - - void OnDestroy() - { - if(Instance == this) - Instance = null; - - if(m_leapHandLeft != null) - Object.Destroy(m_leapHandLeft); - m_leapHandLeft = null; - - if(m_leapHandRight != null) - Object.Destroy(m_leapHandRight); - m_leapHandRight = null; - - if(m_leapElbowLeft != null) - Object.Destroy(m_leapElbowLeft); - m_leapElbowLeft = null; - - if(m_leapElbowRight != null) - Object.Destroy(m_leapElbowRight); - m_leapElbowRight = null; - - if(m_leapControllerModel != null) - Object.Destroy(m_leapControllerModel); - m_leapControllerModel = null; - - if(m_visualHands != null) - Object.Destroy(m_visualHands); - m_visualHands = null; - - m_visualHandLeft = null; - m_visualHandRight = null; - - Settings.DesktopOffsetChange -= this.OnDesktopOffsetChange; - Settings.ModelVisibilityChange -= this.OnModelVisibilityChange; - Settings.VisualHandsChange -= this.OnVisualHandsChange; - Settings.TrackingModeChange -= this.OnTrackingModeChange; - Settings.RootAngleChange -= this.OnRootAngleChange; - Settings.HeadAttachChange -= this.OnHeadAttachChange; - Settings.HeadOffsetChange -= this.OnHeadOffsetChange; - - VRModeSwitchEvents.OnInitializeXR.RemoveListener(this.OnModeSwitch); - VRModeSwitchEvents.OnDeinitializeXR.RemoveListener(this.OnModeSwitch); - } - - void Update() - { - if(Settings.Enabled) - { - LeapParser.LeapData l_data = LeapManager.Instance.GetLatestData(); - - if(l_data.m_leftHand.m_present) - { - OrientationAdjustment(ref l_data.m_leftHand.m_position, ref l_data.m_leftHand.m_rotation, Settings.TrackingMode); - for(int i = 0; i < 20; i++) - OrientationAdjustment(ref l_data.m_leftHand.m_fingerPosition[i], ref l_data.m_leftHand.m_fingerRotation[i], Settings.TrackingMode); - - m_leapHandLeft.transform.localPosition = l_data.m_leftHand.m_position; - m_leapHandLeft.transform.localRotation = l_data.m_leftHand.m_rotation; - - OrientationAdjustment(ref l_data.m_leftHand.m_elbowPosition, ref ms_dummyRotation, Settings.TrackingMode); - m_leapElbowLeft.transform.localPosition = l_data.m_leftHand.m_elbowPosition; - - if(Settings.VisualHands) - m_visualHandLeft?.Update(l_data.m_leftHand); - } - - if(l_data.m_rightHand.m_present) - { - OrientationAdjustment(ref l_data.m_rightHand.m_position, ref l_data.m_rightHand.m_rotation, Settings.TrackingMode); - for(int i = 0; i < 20; i++) - OrientationAdjustment(ref l_data.m_rightHand.m_fingerPosition[i], ref l_data.m_rightHand.m_fingerRotation[i], Settings.TrackingMode); - - m_leapHandRight.transform.localPosition = l_data.m_rightHand.m_position; - m_leapHandRight.transform.localRotation = l_data.m_rightHand.m_rotation; - - OrientationAdjustment(ref l_data.m_rightHand.m_elbowPosition, ref ms_dummyRotation, Settings.TrackingMode); - m_leapElbowRight.transform.localPosition = l_data.m_rightHand.m_elbowPosition; - - if(Settings.VisualHands) - m_visualHandRight?.Update(l_data.m_rightHand); - } - } - } - - public Transform GetLeftHand() => m_leapHandLeft.transform; - public Transform GetRightHand() => m_leapHandRight.transform; - public Transform GetLeftElbow() => m_leapElbowLeft.transform; - public Transform GetRightElbow() => m_leapElbowRight.transform; - - // Settings - void OnDesktopOffsetChange(Vector3 p_offset) - { - if(!Settings.HeadAttach) - this.transform.localPosition = p_offset * (!m_inVR ? m_scaleRelation : 1f); - } - - void OnModelVisibilityChange(bool p_state) - { - m_leapControllerModel.SetActive(p_state); - } - - void OnVisualHandsChange(bool p_state) - { - m_visualHands.SetActive(p_state); - } - - void OnTrackingModeChange(Settings.LeapTrackingMode p_mode) - { - switch(p_mode) - { - case Settings.LeapTrackingMode.Screentop: - m_leapControllerModel.transform.localRotation = Quaternion.Euler(0f, 0f, 180f); - break; - case Settings.LeapTrackingMode.Desktop: - m_leapControllerModel.transform.localRotation = Quaternion.identity; - break; - case Settings.LeapTrackingMode.HMD: - m_leapControllerModel.transform.localRotation = Quaternion.Euler(270f, 180f, 0f); - break; - } - } - - void OnRootAngleChange(Vector3 p_angle) - { - this.transform.localRotation = Quaternion.Euler(p_angle); - } - - void OnHeadAttachChange(bool p_state) - { - if(!m_inVR) - { - this.transform.parent = (p_state ? PlayerSetup.Instance.desktopCamera.transform : PlayerSetup.Instance.desktopCameraRig.transform); - this.transform.localPosition = (p_state ? Settings.HeadOffset : Settings.DesktopOffset) * m_scaleRelation; - } - else - { - this.transform.parent = (p_state ? PlayerSetup.Instance.vrCamera.transform : PlayerSetup.Instance.vrCameraRig.transform); - this.transform.localPosition = (p_state ? Settings.HeadOffset : Settings.DesktopOffset); - } - - this.transform.localScale = Vector3.one * (!m_inVR ? m_scaleRelation : 1f); - this.transform.localRotation = Quaternion.Euler(Settings.RootAngle); - } - - void OnHeadOffsetChange(Vector3 p_offset) - { - if(Settings.HeadAttach) - this.transform.localPosition = p_offset * (!m_inVR ? m_scaleRelation : 1f); - } - - // Game events - internal void OnAvatarClear() - { - m_scaleRelation = 1f; - OnHeadAttachChange(Settings.HeadAttach); - } - - internal void OnAvatarSetup() - { - m_inVR = Utils.IsInVR(); - OnHeadAttachChange(Settings.HeadAttach); - } - - internal void OnPlayspaceScale(float p_relation) - { - m_scaleRelation = p_relation; - OnHeadAttachChange(Settings.HeadAttach); - } - - void OnModeSwitch() - { - m_inVR = Utils.IsInVR(); - OnHeadAttachChange(Settings.HeadAttach); - } - - // Utils - static void OrientationAdjustment(ref Vector3 p_pos, ref Quaternion p_rot, Settings.LeapTrackingMode p_mode) - { - switch(p_mode) - { - case Settings.LeapTrackingMode.Screentop: - { - p_pos.x *= -1f; - p_pos.y *= -1f; - p_rot = (ms_screentopRotation * p_rot); - } - break; - - case Settings.LeapTrackingMode.HMD: - { - p_pos.x *= -1f; - Utils.Swap(ref p_pos.y, ref p_pos.z); - p_rot = (ms_hmdRotation * p_rot); - } - break; - } - } - } -} +using ABI_RC.Core.Player; +using ABI_RC.Systems.VRModeSwitch; +using System.Collections; +using UnityEngine; + +namespace ml_lme +{ + [DisallowMultipleComponent] + class LeapTracking : MonoBehaviour + { + public static LeapTracking Instance { get; private set; } = null; + static Quaternion ms_dummyRotation = Quaternion.identity; + static readonly Quaternion ms_hmdRotation = new Quaternion(0f, 0.7071068f, 0.7071068f, 0f); + static readonly Quaternion ms_screentopRotation = new Quaternion(0f, 0f, -1f, 0f); + + bool m_inVR = false; + + GameObject m_leapHands = null; + LeapHand m_leapHandLeft = null; + LeapHand m_leapHandRight = null; + GameObject m_leapElbowLeft = null; + GameObject m_leapElbowRight = null; + GameObject m_leapControllerModel = null; + + float m_scaleRelation = 1f; + + void Start() + { + if(Instance == null) + Instance = this; + + m_inVR = Utils.IsInVR(); + + m_leapElbowLeft = new GameObject("LeapElbowLeft"); + m_leapElbowLeft.transform.parent = this.transform; + m_leapElbowLeft.transform.localPosition = Vector3.zero; + m_leapElbowLeft.transform.localRotation = Quaternion.identity; + + m_leapElbowRight = new GameObject("LeapElbowRight"); + m_leapElbowRight.transform.parent = this.transform; + m_leapElbowRight.transform.localPosition = Vector3.zero; + m_leapElbowRight.transform.localRotation = Quaternion.identity; + + m_leapControllerModel = AssetsHandler.GetAsset("assets/models/leapmotion/leap_motion_1_0.obj"); + if(m_leapControllerModel != null) + { + m_leapControllerModel.name = "LeapModel"; + m_leapControllerModel.transform.parent = this.transform; + m_leapControllerModel.transform.localPosition = Vector3.zero; + m_leapControllerModel.transform.localRotation = Quaternion.identity; + } + + m_leapHands = AssetsHandler.GetAsset("assets/models/leaphands/leaphands.prefab"); + if(m_leapHands != null) + { + m_leapHands.name = "LeapHands"; + m_leapHands.transform.parent = this.transform; + m_leapHands.transform.localPosition = Vector3.zero; + m_leapHands.transform.localRotation = Quaternion.identity; + + m_leapHandLeft = new LeapHand(m_leapHands.transform.Find("HandL"), true); + m_leapHandRight = new LeapHand(m_leapHands.transform.Find("HandR"), false); + } + + Settings.DesktopOffsetChange += this.OnDesktopOffsetChange; + Settings.ModelVisibilityChange += this.OnModelVisibilityChange; + Settings.VisualHandsChange += this.OnVisualHandsChange; + Settings.TrackingModeChange += this.OnTrackingModeChange; + Settings.RootAngleChange += this.OnRootAngleChange; + Settings.HeadAttachChange += this.OnHeadAttachChange; + Settings.HeadOffsetChange += this.OnHeadOffsetChange; + + MelonLoader.MelonCoroutines.Start(WaitForLocalPlayer()); + + OnModelVisibilityChange(Settings.ModelVisibility); + OnVisualHandsChange(Settings.VisualHands); + OnTrackingModeChange(Settings.TrackingMode); + OnRootAngleChange(Settings.RootAngle); + + VRModeSwitchEvents.OnInitializeXR.AddListener(this.OnModeSwitch); + VRModeSwitchEvents.OnDeinitializeXR.AddListener(this.OnModeSwitch); + } + + IEnumerator WaitForLocalPlayer() + { + while(PlayerSetup.Instance == null) + yield return null; + + OnHeadAttachChange(Settings.HeadAttach); + } + + void OnDestroy() + { + if(Instance == this) + Instance = null; + + if(m_leapHands != null) + Object.Destroy(m_leapHands); + m_leapHands = null; + m_leapHandLeft = null; + m_leapHandRight = null; + + if(m_leapElbowLeft != null) + Object.Destroy(m_leapElbowLeft); + m_leapElbowLeft = null; + + if(m_leapElbowRight != null) + Object.Destroy(m_leapElbowRight); + m_leapElbowRight = null; + + if(m_leapControllerModel != null) + Object.Destroy(m_leapControllerModel); + m_leapControllerModel = null; + + Settings.DesktopOffsetChange -= this.OnDesktopOffsetChange; + Settings.ModelVisibilityChange -= this.OnModelVisibilityChange; + Settings.VisualHandsChange -= this.OnVisualHandsChange; + Settings.TrackingModeChange -= this.OnTrackingModeChange; + Settings.RootAngleChange -= this.OnRootAngleChange; + Settings.HeadAttachChange -= this.OnHeadAttachChange; + Settings.HeadOffsetChange -= this.OnHeadOffsetChange; + + VRModeSwitchEvents.OnInitializeXR.RemoveListener(this.OnModeSwitch); + VRModeSwitchEvents.OnDeinitializeXR.RemoveListener(this.OnModeSwitch); + } + + void Update() + { + if(Settings.Enabled) + { + LeapParser.LeapData l_data = LeapManager.Instance.GetLatestData(); + + if(l_data.m_leftHand.m_present) + { + OrientationAdjustment(ref l_data.m_leftHand.m_position, ref l_data.m_leftHand.m_rotation, Settings.TrackingMode); + for(int i = 0; i < 20; i++) + OrientationAdjustment(ref l_data.m_leftHand.m_fingerPosition[i], ref l_data.m_leftHand.m_fingerRotation[i], Settings.TrackingMode); + + m_leapHandLeft.GetRoot().localPosition = l_data.m_leftHand.m_position; + m_leapHandLeft.GetRoot().localRotation = l_data.m_leftHand.m_rotation; + + OrientationAdjustment(ref l_data.m_leftHand.m_elbowPosition, ref ms_dummyRotation, Settings.TrackingMode); + m_leapElbowLeft.transform.localPosition = l_data.m_leftHand.m_elbowPosition; + + m_leapHandLeft?.Update(l_data.m_leftHand); + } + + if(l_data.m_rightHand.m_present) + { + OrientationAdjustment(ref l_data.m_rightHand.m_position, ref l_data.m_rightHand.m_rotation, Settings.TrackingMode); + for(int i = 0; i < 20; i++) + OrientationAdjustment(ref l_data.m_rightHand.m_fingerPosition[i], ref l_data.m_rightHand.m_fingerRotation[i], Settings.TrackingMode); + + m_leapHandRight.GetRoot().localPosition = l_data.m_rightHand.m_position; + m_leapHandRight.GetRoot().localRotation = l_data.m_rightHand.m_rotation; + + OrientationAdjustment(ref l_data.m_rightHand.m_elbowPosition, ref ms_dummyRotation, Settings.TrackingMode); + m_leapElbowRight.transform.localPosition = l_data.m_rightHand.m_elbowPosition; + + m_leapHandRight?.Update(l_data.m_rightHand); + } + } + } + + public LeapHand GetLeftHand() => m_leapHandLeft; + public LeapHand GetRightHand() => m_leapHandRight; + public Transform GetLeftElbow() => m_leapElbowLeft.transform; + public Transform GetRightElbow() => m_leapElbowRight.transform; + + // Settings + void OnDesktopOffsetChange(Vector3 p_offset) + { + if(!Settings.HeadAttach) + this.transform.localPosition = p_offset * (!m_inVR ? m_scaleRelation : 1f); + } + + void OnModelVisibilityChange(bool p_state) + { + m_leapControllerModel.SetActive(p_state); + } + + void OnVisualHandsChange(bool p_state) + { + m_leapHandLeft?.SetMeshActive(p_state); + m_leapHandRight?.SetMeshActive(p_state); + } + + void OnTrackingModeChange(Settings.LeapTrackingMode p_mode) + { + switch(p_mode) + { + case Settings.LeapTrackingMode.Screentop: + m_leapControllerModel.transform.localRotation = Quaternion.Euler(0f, 0f, 180f); + break; + case Settings.LeapTrackingMode.Desktop: + m_leapControllerModel.transform.localRotation = Quaternion.identity; + break; + case Settings.LeapTrackingMode.HMD: + m_leapControllerModel.transform.localRotation = Quaternion.Euler(270f, 180f, 0f); + break; + } + } + + void OnRootAngleChange(Vector3 p_angle) + { + this.transform.localRotation = Quaternion.Euler(p_angle); + } + + void OnHeadAttachChange(bool p_state) + { + if(!m_inVR) + { + this.transform.parent = (p_state ? PlayerSetup.Instance.desktopCamera.transform : PlayerSetup.Instance.desktopCameraRig.transform); + this.transform.localPosition = (p_state ? Settings.HeadOffset : Settings.DesktopOffset) * m_scaleRelation; + } + else + { + this.transform.parent = (p_state ? PlayerSetup.Instance.vrCamera.transform : PlayerSetup.Instance.vrCameraRig.transform); + this.transform.localPosition = (p_state ? Settings.HeadOffset : Settings.DesktopOffset); + } + + this.transform.localScale = Vector3.one * (!m_inVR ? m_scaleRelation : 1f); + this.transform.localRotation = Quaternion.Euler(Settings.RootAngle); + } + + void OnHeadOffsetChange(Vector3 p_offset) + { + if(Settings.HeadAttach) + this.transform.localPosition = p_offset * (!m_inVR ? m_scaleRelation : 1f); + } + + // Game events + internal void OnAvatarClear() + { + m_scaleRelation = 1f; + OnHeadAttachChange(Settings.HeadAttach); + } + + internal void OnAvatarSetup() + { + m_inVR = Utils.IsInVR(); + OnHeadAttachChange(Settings.HeadAttach); + } + + internal void OnPlayspaceScale(float p_relation) + { + m_scaleRelation = p_relation; + OnHeadAttachChange(Settings.HeadAttach); + } + + void OnModeSwitch() + { + m_inVR = Utils.IsInVR(); + OnHeadAttachChange(Settings.HeadAttach); + } + + // Utils + static void OrientationAdjustment(ref Vector3 p_pos, ref Quaternion p_rot, Settings.LeapTrackingMode p_mode) + { + switch(p_mode) + { + case Settings.LeapTrackingMode.Screentop: + { + p_pos.x *= -1f; + p_pos.y *= -1f; + p_rot = (ms_screentopRotation * p_rot); + } + break; + + case Settings.LeapTrackingMode.HMD: + { + p_pos.x *= -1f; + Utils.Swap(ref p_pos.y, ref p_pos.z); + p_rot = (ms_hmdRotation * p_rot); + } + break; + } + } + } +} diff --git a/ml_lme/Settings.cs b/ml_lme/Settings.cs index 5c6b94c..e93faf5 100644 --- a/ml_lme/Settings.cs +++ b/ml_lme/Settings.cs @@ -1,346 +1,346 @@ -using ABI_RC.Core.InteractionSystem; -using System; -using System.Collections.Generic; -using UnityEngine; - -namespace ml_lme -{ - static class Settings - { - public enum LeapTrackingMode - { - Screentop = 0, - Desktop, - HMD - } - - enum ModSetting - { - Enabled, - DesktopX, - DesktopY, - DesktopZ, - FingersOnly, - Model, - Mode, - AngleX, - AngleY, - AngleZ, - Head, - HeadX, - HeadY, - HeadZ, - TrackElbows, - Interaction, - Gestures, - InteractThreadhold, - GripThreadhold, - VisualHands - }; - - public static bool Enabled { get; private set; } = false; - public static Vector3 DesktopOffset { get; private set; } = new Vector3(0f, -0.45f, 0.3f); - public static bool FingersOnly { get; private set; } = false; - public static bool ModelVisibility { get; private set; } = false; - public static LeapTrackingMode TrackingMode { get; private set; } = LeapTrackingMode.Desktop; - public static Vector3 RootAngle { get; private set; } = Vector3.zero; - 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 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; - public static bool VisualHands { get; private set; } = false; - - static MelonLoader.MelonPreferences_Category ms_category = null; - static List ms_entries = null; - - static public event Action EnabledChange; - static public event Action DesktopOffsetChange; - static public event Action FingersOnlyChange; - static public event Action ModelVisibilityChange; - static public event Action TrackingModeChange; - static public event Action RootAngleChange; - static public event Action HeadAttachChange; - static public event Action HeadOffsetChange; - static public event Action TrackElbowsChange; - static public event Action InteractionChange; - static public event Action GesturesChange; - static public event Action InteractThreadholdChange; - static public event Action GripThreadholdChange; - static public event Action VisualHandsChange; - - internal static void Init() - { - ms_category = MelonLoader.MelonPreferences.CreateCategory("LME", null, true); - - ms_entries = new List() - { - ms_category.CreateEntry(ModSetting.Enabled.ToString(), Enabled), - ms_category.CreateEntry(ModSetting.DesktopX.ToString(), (int)(DesktopOffset.x * 100f)), - ms_category.CreateEntry(ModSetting.DesktopY.ToString(), (int)(DesktopOffset.y * 100f)), - ms_category.CreateEntry(ModSetting.DesktopZ.ToString(), (int)(DesktopOffset.z * 100f)), - ms_category.CreateEntry(ModSetting.FingersOnly.ToString(), FingersOnly), - ms_category.CreateEntry(ModSetting.Model.ToString(), ModelVisibility), - ms_category.CreateEntry(ModSetting.Mode.ToString(), (int)TrackingMode), - ms_category.CreateEntry(ModSetting.AngleX.ToString(), (int)(RootAngle.x * 100f)), - ms_category.CreateEntry(ModSetting.AngleY.ToString(), (int)(RootAngle.y * 100f)), - ms_category.CreateEntry(ModSetting.AngleZ.ToString(), (int)(RootAngle.z * 100f)), - ms_category.CreateEntry(ModSetting.Head.ToString(), HeadAttach), - ms_category.CreateEntry(ModSetting.HeadX.ToString(), (int)(HeadOffset.x * 100f)), - 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.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)), - ms_category.CreateEntry(ModSetting.VisualHands.ToString(), VisualHands) - }; - - Load(); - - MelonLoader.MelonCoroutines.Start(WaitMainMenuUi()); - } - - static System.Collections.IEnumerator WaitMainMenuUi() - { - while(ViewManager.Instance == null) - yield return null; - while(ViewManager.Instance.gameMenuView == null) - yield return null; - while(ViewManager.Instance.gameMenuView.Listener == null) - yield return null; - - ViewManager.Instance.gameMenuView.Listener.ReadyForBindings += () => - { - ViewManager.Instance.gameMenuView.View.BindCall("OnToggleUpdate_" + ms_category.Identifier, new Action(OnToggleUpdate)); - ViewManager.Instance.gameMenuView.View.BindCall("OnSliderUpdate_" + ms_category.Identifier, new Action(OnSliderUpdate)); - ViewManager.Instance.gameMenuView.View.BindCall("OnDropdownUpdate_" + ms_category.Identifier, new Action(OnDropdownUpdate)); - }; - ViewManager.Instance.gameMenuView.Listener.FinishLoad += (_) => - { - ViewManager.Instance.gameMenuView.View.ExecuteScript(ResourcesHandler.GetEmbeddedResource("mods_extension.js")); - ViewManager.Instance.gameMenuView.View.ExecuteScript(ResourcesHandler.GetEmbeddedResource("mod_menu.js")); - foreach(var l_entry in ms_entries) - ViewManager.Instance.gameMenuView.View.TriggerEvent("updateModSetting", ms_category.Identifier, l_entry.DisplayName, l_entry.GetValueAsString()); - }; - } - - static void Load() - { - Enabled = (bool)ms_entries[(int)ModSetting.Enabled].BoxedValue; - DesktopOffset = new Vector3( - (int)ms_entries[(int)ModSetting.DesktopX].BoxedValue, - (int)ms_entries[(int)ModSetting.DesktopY].BoxedValue, - (int)ms_entries[(int)ModSetting.DesktopZ].BoxedValue - ) * 0.01f; - FingersOnly = (bool)ms_entries[(int)ModSetting.FingersOnly].BoxedValue; - ModelVisibility = (bool)ms_entries[(int)ModSetting.Model].BoxedValue; - TrackingMode = (LeapTrackingMode)(int)ms_entries[(int)ModSetting.Mode].BoxedValue; - RootAngle = new Vector3( - (int)ms_entries[(int)ModSetting.AngleX].BoxedValue, - (int)ms_entries[(int)ModSetting.AngleY].BoxedValue, - (int)ms_entries[(int)ModSetting.AngleZ].BoxedValue - ); - HeadAttach = (bool)ms_entries[(int)ModSetting.Head].BoxedValue; - HeadOffset = new Vector3( - (int)ms_entries[(int)ModSetting.HeadX].BoxedValue, - (int)ms_entries[(int)ModSetting.HeadY].BoxedValue, - (int)ms_entries[(int)ModSetting.HeadZ].BoxedValue - ) * 0.01f; - TrackElbows = (bool)ms_entries[(int)ModSetting.TrackElbows].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; - VisualHands = (bool)ms_entries[(int)ModSetting.VisualHands].BoxedValue; - } - - static void OnToggleUpdate(string p_name, string p_value) - { - if(Enum.TryParse(p_name, out ModSetting l_setting)) - { - switch(l_setting) - { - case ModSetting.Enabled: - { - Enabled = bool.Parse(p_value); - EnabledChange?.Invoke(Enabled); - } - break; - - case ModSetting.FingersOnly: - { - FingersOnly = bool.Parse(p_value); - FingersOnlyChange?.Invoke(FingersOnly); - } - break; - - case ModSetting.Model: - { - ModelVisibility = bool.Parse(p_value); - ModelVisibilityChange?.Invoke(ModelVisibility); - } - break; - - case ModSetting.Head: - { - HeadAttach = bool.Parse(p_value); - HeadAttachChange?.Invoke(HeadAttach); - } - break; - - case ModSetting.TrackElbows: - { - TrackElbows = bool.Parse(p_value); - TrackElbowsChange?.Invoke(TrackElbows); - } - break; - - case ModSetting.Interaction: - { - Interaction = bool.Parse(p_value); - InteractionChange?.Invoke(Interaction); - } - break; - - case ModSetting.Gestures: - { - Gestures = bool.Parse(p_value); - GesturesChange?.Invoke(Gestures); - } - break; - - case ModSetting.VisualHands: - { - VisualHands = bool.Parse(p_value); - VisualHandsChange?.Invoke(VisualHands); - } - break; - } - - ms_entries[(int)l_setting].BoxedValue = bool.Parse(p_value); - } - } - - static void OnSliderUpdate(string p_name, string p_value) - { - if(Enum.TryParse(p_name, out ModSetting l_setting)) - { - switch(l_setting) - { - case ModSetting.DesktopX: - { - Vector3 l_current = DesktopOffset; - l_current.x = int.Parse(p_value) * 0.01f; - DesktopOffset = l_current; - DesktopOffsetChange?.Invoke(l_current); - } - break; - case ModSetting.DesktopY: - { - Vector3 l_current = DesktopOffset; - l_current.y = int.Parse(p_value) * 0.01f; - DesktopOffset = l_current; - DesktopOffsetChange?.Invoke(l_current); - } - break; - case ModSetting.DesktopZ: - { - Vector3 l_current = DesktopOffset; - l_current.z = int.Parse(p_value) * 0.01f; - DesktopOffset = l_current; - DesktopOffsetChange?.Invoke(l_current); - } - break; - - case ModSetting.AngleX: - { - Vector3 l_current = RootAngle; - l_current.x = int.Parse(p_value); - RootAngle = l_current; - RootAngleChange?.Invoke(l_current); - } - break; - - case ModSetting.AngleY: - { - Vector3 l_current = RootAngle; - l_current.y = int.Parse(p_value); - RootAngle = l_current; - RootAngleChange?.Invoke(l_current); - } - break; - - case ModSetting.AngleZ: - { - Vector3 l_current = RootAngle; - l_current.z = int.Parse(p_value); - RootAngle = l_current; - RootAngleChange?.Invoke(l_current); - } - break; - - case ModSetting.HeadX: - { - Vector3 l_current = HeadOffset; - l_current.x = int.Parse(p_value) * 0.01f; - HeadOffset = l_current; - HeadOffsetChange?.Invoke(l_current); - } - break; - case ModSetting.HeadY: - { - Vector3 l_current = HeadOffset; - l_current.y = int.Parse(p_value) * 0.01f; - HeadOffset = l_current; - HeadOffsetChange?.Invoke(l_current); - } - break; - case ModSetting.HeadZ: - { - Vector3 l_current = HeadOffset; - l_current.z = int.Parse(p_value) * 0.01f; - HeadOffset = l_current; - HeadOffsetChange?.Invoke(l_current); - } - break; - case ModSetting.InteractThreadhold: - { - InteractThreadhold = int.Parse(p_value) * 0.01f; - InteractThreadholdChange?.Invoke(InteractThreadhold); - } - break; - case ModSetting.GripThreadhold: - { - GripThreadhold = int.Parse(p_value) * 0.01f; - GripThreadholdChange?.Invoke(GripThreadhold); - } - break; - } - - ms_entries[(int)l_setting].BoxedValue = int.Parse(p_value); - } - } - - static void OnDropdownUpdate(string p_name, string p_value) - { - if(Enum.TryParse(p_name, out ModSetting l_setting)) - { - switch(l_setting) - { - case ModSetting.Mode: - { - TrackingMode = (LeapTrackingMode)int.Parse(p_value); - TrackingModeChange?.Invoke(TrackingMode); - } - break; - } - - ms_entries[(int)l_setting].BoxedValue = int.Parse(p_value); - } - } - } -} +using ABI_RC.Core.InteractionSystem; +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace ml_lme +{ + static class Settings + { + public enum LeapTrackingMode + { + Screentop = 0, + Desktop, + HMD + } + + enum ModSetting + { + Enabled, + DesktopX, + DesktopY, + DesktopZ, + FingersOnly, + Model, + Mode, + AngleX, + AngleY, + AngleZ, + Head, + HeadX, + HeadY, + HeadZ, + TrackElbows, + Interaction, + Gestures, + InteractThreadhold, + GripThreadhold, + VisualHands + }; + + public static bool Enabled { get; private set; } = false; + public static Vector3 DesktopOffset { get; private set; } = new Vector3(0f, -0.45f, 0.3f); + public static bool FingersOnly { get; private set; } = false; + public static bool ModelVisibility { get; private set; } = false; + public static LeapTrackingMode TrackingMode { get; private set; } = LeapTrackingMode.Desktop; + public static Vector3 RootAngle { get; private set; } = Vector3.zero; + 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 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; + public static bool VisualHands { get; private set; } = false; + + static MelonLoader.MelonPreferences_Category ms_category = null; + static List ms_entries = null; + + static public event Action EnabledChange; + static public event Action DesktopOffsetChange; + static public event Action FingersOnlyChange; + static public event Action ModelVisibilityChange; + static public event Action TrackingModeChange; + static public event Action RootAngleChange; + static public event Action HeadAttachChange; + static public event Action HeadOffsetChange; + static public event Action TrackElbowsChange; + static public event Action InteractionChange; + static public event Action GesturesChange; + static public event Action InteractThreadholdChange; + static public event Action GripThreadholdChange; + static public event Action VisualHandsChange; + + internal static void Init() + { + ms_category = MelonLoader.MelonPreferences.CreateCategory("LME", null, true); + + ms_entries = new List() + { + ms_category.CreateEntry(ModSetting.Enabled.ToString(), Enabled), + ms_category.CreateEntry(ModSetting.DesktopX.ToString(), (int)(DesktopOffset.x * 100f)), + ms_category.CreateEntry(ModSetting.DesktopY.ToString(), (int)(DesktopOffset.y * 100f)), + ms_category.CreateEntry(ModSetting.DesktopZ.ToString(), (int)(DesktopOffset.z * 100f)), + ms_category.CreateEntry(ModSetting.FingersOnly.ToString(), FingersOnly), + ms_category.CreateEntry(ModSetting.Model.ToString(), ModelVisibility), + ms_category.CreateEntry(ModSetting.Mode.ToString(), (int)TrackingMode), + ms_category.CreateEntry(ModSetting.AngleX.ToString(), (int)(RootAngle.x * 100f)), + ms_category.CreateEntry(ModSetting.AngleY.ToString(), (int)(RootAngle.y * 100f)), + ms_category.CreateEntry(ModSetting.AngleZ.ToString(), (int)(RootAngle.z * 100f)), + ms_category.CreateEntry(ModSetting.Head.ToString(), HeadAttach), + ms_category.CreateEntry(ModSetting.HeadX.ToString(), (int)(HeadOffset.x * 100f)), + 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.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)), + ms_category.CreateEntry(ModSetting.VisualHands.ToString(), VisualHands) + }; + + Load(); + + MelonLoader.MelonCoroutines.Start(WaitMainMenuUi()); + } + + static System.Collections.IEnumerator WaitMainMenuUi() + { + while(ViewManager.Instance == null) + yield return null; + while(ViewManager.Instance.gameMenuView == null) + yield return null; + while(ViewManager.Instance.gameMenuView.Listener == null) + yield return null; + + ViewManager.Instance.gameMenuView.Listener.ReadyForBindings += () => + { + ViewManager.Instance.gameMenuView.View.BindCall("OnToggleUpdate_" + ms_category.Identifier, new Action(OnToggleUpdate)); + ViewManager.Instance.gameMenuView.View.BindCall("OnSliderUpdate_" + ms_category.Identifier, new Action(OnSliderUpdate)); + ViewManager.Instance.gameMenuView.View.BindCall("OnDropdownUpdate_" + ms_category.Identifier, new Action(OnDropdownUpdate)); + }; + ViewManager.Instance.gameMenuView.Listener.FinishLoad += (_) => + { + ViewManager.Instance.gameMenuView.View.ExecuteScript(ResourcesHandler.GetEmbeddedResource("mods_extension.js")); + ViewManager.Instance.gameMenuView.View.ExecuteScript(ResourcesHandler.GetEmbeddedResource("mod_menu.js")); + foreach(var l_entry in ms_entries) + ViewManager.Instance.gameMenuView.View.TriggerEvent("updateModSetting", ms_category.Identifier, l_entry.DisplayName, l_entry.GetValueAsString()); + }; + } + + static void Load() + { + Enabled = (bool)ms_entries[(int)ModSetting.Enabled].BoxedValue; + DesktopOffset = new Vector3( + (int)ms_entries[(int)ModSetting.DesktopX].BoxedValue, + (int)ms_entries[(int)ModSetting.DesktopY].BoxedValue, + (int)ms_entries[(int)ModSetting.DesktopZ].BoxedValue + ) * 0.01f; + FingersOnly = (bool)ms_entries[(int)ModSetting.FingersOnly].BoxedValue; + ModelVisibility = (bool)ms_entries[(int)ModSetting.Model].BoxedValue; + TrackingMode = (LeapTrackingMode)(int)ms_entries[(int)ModSetting.Mode].BoxedValue; + RootAngle = new Vector3( + (int)ms_entries[(int)ModSetting.AngleX].BoxedValue, + (int)ms_entries[(int)ModSetting.AngleY].BoxedValue, + (int)ms_entries[(int)ModSetting.AngleZ].BoxedValue + ); + HeadAttach = (bool)ms_entries[(int)ModSetting.Head].BoxedValue; + HeadOffset = new Vector3( + (int)ms_entries[(int)ModSetting.HeadX].BoxedValue, + (int)ms_entries[(int)ModSetting.HeadY].BoxedValue, + (int)ms_entries[(int)ModSetting.HeadZ].BoxedValue + ) * 0.01f; + TrackElbows = (bool)ms_entries[(int)ModSetting.TrackElbows].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; + VisualHands = (bool)ms_entries[(int)ModSetting.VisualHands].BoxedValue; + } + + static void OnToggleUpdate(string p_name, string p_value) + { + if(Enum.TryParse(p_name, out ModSetting l_setting)) + { + switch(l_setting) + { + case ModSetting.Enabled: + { + Enabled = bool.Parse(p_value); + EnabledChange?.Invoke(Enabled); + } + break; + + case ModSetting.FingersOnly: + { + FingersOnly = bool.Parse(p_value); + FingersOnlyChange?.Invoke(FingersOnly); + } + break; + + case ModSetting.Model: + { + ModelVisibility = bool.Parse(p_value); + ModelVisibilityChange?.Invoke(ModelVisibility); + } + break; + + case ModSetting.Head: + { + HeadAttach = bool.Parse(p_value); + HeadAttachChange?.Invoke(HeadAttach); + } + break; + + case ModSetting.TrackElbows: + { + TrackElbows = bool.Parse(p_value); + TrackElbowsChange?.Invoke(TrackElbows); + } + break; + + case ModSetting.Interaction: + { + Interaction = bool.Parse(p_value); + InteractionChange?.Invoke(Interaction); + } + break; + + case ModSetting.Gestures: + { + Gestures = bool.Parse(p_value); + GesturesChange?.Invoke(Gestures); + } + break; + + case ModSetting.VisualHands: + { + VisualHands = bool.Parse(p_value); + VisualHandsChange?.Invoke(VisualHands); + } + break; + } + + ms_entries[(int)l_setting].BoxedValue = bool.Parse(p_value); + } + } + + static void OnSliderUpdate(string p_name, string p_value) + { + if(Enum.TryParse(p_name, out ModSetting l_setting)) + { + switch(l_setting) + { + case ModSetting.DesktopX: + { + Vector3 l_current = DesktopOffset; + l_current.x = int.Parse(p_value) * 0.01f; + DesktopOffset = l_current; + DesktopOffsetChange?.Invoke(l_current); + } + break; + case ModSetting.DesktopY: + { + Vector3 l_current = DesktopOffset; + l_current.y = int.Parse(p_value) * 0.01f; + DesktopOffset = l_current; + DesktopOffsetChange?.Invoke(l_current); + } + break; + case ModSetting.DesktopZ: + { + Vector3 l_current = DesktopOffset; + l_current.z = int.Parse(p_value) * 0.01f; + DesktopOffset = l_current; + DesktopOffsetChange?.Invoke(l_current); + } + break; + + case ModSetting.AngleX: + { + Vector3 l_current = RootAngle; + l_current.x = int.Parse(p_value); + RootAngle = l_current; + RootAngleChange?.Invoke(l_current); + } + break; + + case ModSetting.AngleY: + { + Vector3 l_current = RootAngle; + l_current.y = int.Parse(p_value); + RootAngle = l_current; + RootAngleChange?.Invoke(l_current); + } + break; + + case ModSetting.AngleZ: + { + Vector3 l_current = RootAngle; + l_current.z = int.Parse(p_value); + RootAngle = l_current; + RootAngleChange?.Invoke(l_current); + } + break; + + case ModSetting.HeadX: + { + Vector3 l_current = HeadOffset; + l_current.x = int.Parse(p_value) * 0.01f; + HeadOffset = l_current; + HeadOffsetChange?.Invoke(l_current); + } + break; + case ModSetting.HeadY: + { + Vector3 l_current = HeadOffset; + l_current.y = int.Parse(p_value) * 0.01f; + HeadOffset = l_current; + HeadOffsetChange?.Invoke(l_current); + } + break; + case ModSetting.HeadZ: + { + Vector3 l_current = HeadOffset; + l_current.z = int.Parse(p_value) * 0.01f; + HeadOffset = l_current; + HeadOffsetChange?.Invoke(l_current); + } + break; + case ModSetting.InteractThreadhold: + { + InteractThreadhold = int.Parse(p_value) * 0.01f; + InteractThreadholdChange?.Invoke(InteractThreadhold); + } + break; + case ModSetting.GripThreadhold: + { + GripThreadhold = int.Parse(p_value) * 0.01f; + GripThreadholdChange?.Invoke(GripThreadhold); + } + break; + } + + ms_entries[(int)l_setting].BoxedValue = int.Parse(p_value); + } + } + + static void OnDropdownUpdate(string p_name, string p_value) + { + if(Enum.TryParse(p_name, out ModSetting l_setting)) + { + switch(l_setting) + { + case ModSetting.Mode: + { + TrackingMode = (LeapTrackingMode)int.Parse(p_value); + TrackingModeChange?.Invoke(TrackingMode); + } + break; + } + + ms_entries[(int)l_setting].BoxedValue = int.Parse(p_value); + } + } + } +} diff --git a/ml_lme/VisualHand.cs b/ml_lme/VisualHand.cs deleted file mode 100644 index e9453f2..0000000 --- a/ml_lme/VisualHand.cs +++ /dev/null @@ -1,68 +0,0 @@ -using UnityEngine; - -namespace ml_lme -{ - class VisualHand - { - readonly Transform m_wrist = null; - readonly Transform[] m_fingers = null; - - public VisualHand(Transform p_root, bool p_left) - { - if(p_root != null) - { - m_wrist = p_root.Find(p_left ? "LeftHand/Wrist" : "RightHand/Wrist"); - if(m_wrist != null) - { - m_fingers = new Transform[20]; - - m_fingers[0] = null; // Actual thumb-meta, look at Leap Motion docs, dummy - m_fingers[1] = m_wrist.Find("thumb_meta"); - m_fingers[2] = m_wrist.Find("thumb_meta/thumb_a"); - m_fingers[3] = m_wrist.Find("thumb_meta/thumb_a/thumb_b"); - - m_fingers[4] = m_wrist.Find("index_meta"); - m_fingers[5] = m_wrist.Find("index_meta/index_a"); - m_fingers[6] = m_wrist.Find("index_meta/index_a/index_b"); - m_fingers[7] = m_wrist.Find("index_meta/index_a/index_b/index_c"); - - m_fingers[8] = m_wrist.Find("middle_meta"); - m_fingers[9] = m_wrist.Find("middle_meta/middle_a"); - m_fingers[10] = m_wrist.Find("middle_meta/middle_a/middle_b"); - m_fingers[11] = m_wrist.Find("middle_meta/middle_a/middle_b/middle_c"); - - m_fingers[12] = m_wrist.Find("ring_meta"); - m_fingers[13] = m_wrist.Find("ring_meta/ring_a"); - m_fingers[14] = m_wrist.Find("ring_meta/ring_a/ring_b"); - m_fingers[15] = m_wrist.Find("ring_meta/ring_a/ring_b/ring_c"); - - m_fingers[16] = m_wrist.Find("pinky_meta"); - m_fingers[17] = m_wrist.Find("pinky_meta/pinky_a"); - m_fingers[18] = m_wrist.Find("pinky_meta/pinky_a/pinky_b"); - m_fingers[19] = m_wrist.Find("pinky_meta/pinky_a/pinky_b/pinky_c"); - } - } - } - - public void Update(LeapParser.HandData p_data) - { - if(m_wrist != null) - { - m_wrist.position = p_data.m_position; - m_wrist.rotation = p_data.m_rotation; - - for(int i = 0; i < 20; i++) - { - if(m_fingers[i] != null) - { - //m_fingers[i].position = p_data.m_fingerPosition[i]; - m_fingers[i].rotation = p_data.m_fingerRotation[i]; - } - } - - m_wrist.localPosition = p_data.m_position; - m_wrist.localRotation = p_data.m_rotation; - } - } - } -} diff --git a/ml_lme/ml_lme.csproj b/ml_lme/ml_lme.csproj index 88208a6..2d70ed7 100644 --- a/ml_lme/ml_lme.csproj +++ b/ml_lme/ml_lme.csproj @@ -11,8 +11,8 @@ - none - false + embedded + true diff --git a/ml_lme/resources/leapmotion_hands.asset b/ml_lme/resources/leapmotion_hands.asset index e7f9e7adbe9283017ce8f03ddc108df2d1731865..4fc9276349242e3d40052869b4f33a2a23a95658 100644 GIT binary patch delta 125038 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 lb&sLI~HF_DZj1289?Rm_TC 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%0Do>JH4cY<-QLFZ6!XDOboFw6o;!?h;l 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 -

Leap Motion tracking
-
- - -
-
Enable tracking:
-
-
-
-
- -
-
Tracking mode:
-
-
-
-
- -
-
Desktop offset X:
-
-
-
-
- -
-
Desktop offset Y:
-
-
-
-
- -
-
Desktop offset Z:
-
-
-
-
- -
-
Attach to head:
-
- -
-
- -
-
Head offset X:
-
-
-
-
- -
-
Head offset Y:
-
-
-
-
- -
-
Head offset Z:
-
-
-
-
- -
-
Offset angle X:
-
-
-
-
- -
-
Offset angle Y:
-
-
-
-
- -
-
Offset angle Z:
-
-
-
-
- -
-
Track elbows:
-
-
-
-
- -
-
Fingers tracking only:
-
-
-
-
- -
-
Model visibility:
-
-
-
-
- -
-
Visualize hands:
-
-
-
-
- -
-
Interaction input:
-
-
-
-
- -
-
Recognize gestures:
-
-
-
-
- -
-
Interact gesture threadhold:
-
-
-
-
- -
-
Grip gesture threadhold:
-
-
-
-
- `; - document.getElementById('settings-implementation').appendChild(l_block); - - // Toggles - for (let l_toggle of l_block.querySelectorAll('.inp_toggle')) - modsExtension.addSetting('LME', l_toggle.id, modsExtension.createToggle(l_toggle, 'OnToggleUpdate_LME')); - - // Sliders - for (let l_slider of l_block.querySelectorAll('.inp_slider')) - modsExtension.addSetting('LME', l_slider.id, modsExtension.createSlider(l_slider, 'OnSliderUpdate_LME')); - - // Dropdowns - for (let l_dropdown of l_block.querySelectorAll('.inp_dropdown')) - modsExtension.addSetting('LME', l_dropdown.id, modsExtension.createDropdown(l_dropdown, 'OnDropdownUpdate_LME')); -} +{ + let l_block = document.createElement('div'); + l_block.innerHTML = ` +
+
Leap Motion tracking
+
+
+ +
+
Enable tracking:
+
+
+
+
+ +
+
Tracking mode:
+
+
+
+
+ +
+
Desktop offset X:
+
+
+
+
+ +
+
Desktop offset Y:
+
+
+
+
+ +
+
Desktop offset Z:
+
+
+
+
+ +
+
Attach to head:
+
+ +
+
+ +
+
Head offset X:
+
+
+
+
+ +
+
Head offset Y:
+
+
+
+
+ +
+
Head offset Z:
+
+
+
+
+ +
+
Offset angle X:
+
+
+
+
+ +
+
Offset angle Y:
+
+
+
+
+ +
+
Offset angle Z:
+
+
+
+
+ +
+
Track elbows:
+
+
+
+
+ +
+
Fingers tracking only:
+
+
+
+
+ +
+
Model visibility:
+
+
+
+
+ +
+
Visualize hands:
+
+
+
+
+ +
+
Interaction input:
+
+
+
+
+ +
+
Recognize gestures:
+
+
+
+
+ +
+
Interact gesture threadhold:
+
+
+
+
+ +
+
Grip gesture threadhold:
+
+
+
+
+ `; + document.getElementById('settings-implementation').appendChild(l_block); + + // Toggles + for (let l_toggle of l_block.querySelectorAll('.inp_toggle')) + modsExtension.addSetting('LME', l_toggle.id, modsExtension.createToggle(l_toggle, 'OnToggleUpdate_LME')); + + // Sliders + for (let l_slider of l_block.querySelectorAll('.inp_slider')) + modsExtension.addSetting('LME', l_slider.id, modsExtension.createSlider(l_slider, 'OnSliderUpdate_LME')); + + // Dropdowns + for (let l_dropdown of l_block.querySelectorAll('.inp_dropdown')) + modsExtension.addSetting('LME', l_dropdown.id, modsExtension.createDropdown(l_dropdown, 'OnDropdownUpdate_LME')); +} diff --git a/ml_pmc/PoseCopycat.cs b/ml_pmc/PoseCopycat.cs index 46ea306..3ccfeaa 100644 --- a/ml_pmc/PoseCopycat.cs +++ b/ml_pmc/PoseCopycat.cs @@ -84,26 +84,56 @@ namespace ml_pmc ref readonly float[] l_curls = ref m_puppetParser.GetFingerCurls(); ref readonly float[] l_spreads = ref m_puppetParser.GetFingerSpreads(); - CVRInputManager.Instance.fingerCurlLeftThumb = l_curls[l_mirror ? 5 : 0]; - CVRInputManager.Instance.fingerCurlLeftIndex = l_curls[l_mirror ? 6 : 1]; - CVRInputManager.Instance.fingerCurlLeftMiddle = l_curls[l_mirror ? 7 : 2]; - CVRInputManager.Instance.fingerCurlLeftRing = l_curls[l_mirror ? 8 : 3]; - CVRInputManager.Instance.fingerCurlLeftPinky = l_curls[l_mirror ? 9 : 4]; - CVRInputManager.Instance.fingerCurlRightThumb = l_curls[l_mirror ? 0 : 5]; - CVRInputManager.Instance.fingerCurlRightIndex = l_curls[l_mirror ? 1 : 6]; - CVRInputManager.Instance.fingerCurlRightMiddle = l_curls[l_mirror ? 2 : 7]; - CVRInputManager.Instance.fingerCurlRightRing = l_curls[l_mirror ? 3 : 8]; - CVRInputManager.Instance.fingerCurlRightPinky = l_curls[l_mirror ? 4 : 9]; - + // Left hand + CVRInputManager.Instance.finger1StretchedLeftThumb = l_curls[l_mirror ? 15 : 0]; + CVRInputManager.Instance.finger2StretchedLeftThumb = l_curls[l_mirror ? 16 : 1]; + CVRInputManager.Instance.finger3StretchedLeftThumb = l_curls[l_mirror ? 17 : 2]; CVRInputManager.Instance.fingerSpreadLeftThumb = l_spreads[l_mirror ? 5 : 0]; + + CVRInputManager.Instance.finger1StretchedLeftIndex = l_curls[l_mirror ? 18 : 3]; + CVRInputManager.Instance.finger2StretchedLeftIndex = l_curls[l_mirror ? 19 : 4]; + CVRInputManager.Instance.finger3StretchedLeftIndex = l_curls[l_mirror ? 20 : 5]; CVRInputManager.Instance.fingerSpreadLeftIndex = l_spreads[l_mirror ? 6 : 1]; + + CVRInputManager.Instance.finger1StretchedLeftMiddle = l_curls[l_mirror ? 21 : 6]; + CVRInputManager.Instance.finger2StretchedLeftMiddle = l_curls[l_mirror ? 22 : 7]; + CVRInputManager.Instance.finger3StretchedLeftMiddle = l_curls[l_mirror ? 23 : 8]; CVRInputManager.Instance.fingerSpreadLeftMiddle = l_spreads[l_mirror ? 7 : 2]; + + CVRInputManager.Instance.finger1StretchedLeftRing = l_curls[l_mirror ? 24 : 9]; + CVRInputManager.Instance.finger2StretchedLeftRing = l_curls[l_mirror ? 25 : 10]; + CVRInputManager.Instance.finger3StretchedLeftRing = l_curls[l_mirror ? 26 : 11]; CVRInputManager.Instance.fingerSpreadLeftRing = l_spreads[l_mirror ? 8 : 3]; + + CVRInputManager.Instance.finger1StretchedLeftPinky = l_curls[l_mirror ? 27 : 12]; + CVRInputManager.Instance.finger2StretchedLeftPinky = l_curls[l_mirror ? 28 : 13]; + CVRInputManager.Instance.finger3StretchedLeftPinky = l_curls[l_mirror ? 29 : 14]; CVRInputManager.Instance.fingerSpreadLeftPinky = l_spreads[l_mirror ? 9 : 4]; + + // Right hand + CVRInputManager.Instance.finger1StretchedRightThumb = l_curls[l_mirror ? 0 : 15]; + CVRInputManager.Instance.finger2StretchedRightThumb = l_curls[l_mirror ? 1 : 16]; + CVRInputManager.Instance.finger3StretchedRightThumb = l_curls[l_mirror ? 2 : 17]; CVRInputManager.Instance.fingerSpreadRightThumb = l_spreads[l_mirror ? 0 : 5]; + + CVRInputManager.Instance.finger1StretchedRightIndex = l_curls[l_mirror ? 3 : 18]; + CVRInputManager.Instance.finger2StretchedRightIndex = l_curls[l_mirror ? 4 : 19]; + CVRInputManager.Instance.finger3StretchedRightIndex = l_curls[l_mirror ? 5 : 20]; CVRInputManager.Instance.fingerSpreadRightIndex = l_spreads[l_mirror ? 1 : 6]; + + CVRInputManager.Instance.finger1StretchedRightMiddle = l_curls[l_mirror ? 6 : 21]; + CVRInputManager.Instance.finger2StretchedRightMiddle = l_curls[l_mirror ? 7 : 22]; + CVRInputManager.Instance.finger3StretchedRightMiddle = l_curls[l_mirror ? 8 : 23]; CVRInputManager.Instance.fingerSpreadRightMiddle = l_spreads[l_mirror ? 2 : 7]; + + CVRInputManager.Instance.finger1StretchedRightRing = l_curls[l_mirror ? 9 : 24]; + CVRInputManager.Instance.finger2StretchedRightRing = l_curls[l_mirror ? 10 : 25]; + CVRInputManager.Instance.finger3StretchedRightRing = l_curls[l_mirror ? 11 : 26]; CVRInputManager.Instance.fingerSpreadRightRing = l_spreads[l_mirror ? 3 : 8]; + + CVRInputManager.Instance.finger1StretchedRightPinky = l_curls[l_mirror ? 12 : 27]; + CVRInputManager.Instance.finger2StretchedRightPinky = l_curls[l_mirror ? 13 : 28]; + CVRInputManager.Instance.finger3StretchedRightPinky = l_curls[l_mirror ? 14 : 29]; CVRInputManager.Instance.fingerSpreadRightPinky = l_spreads[l_mirror ? 4 : 9]; } else @@ -341,27 +371,69 @@ namespace ml_pmc if(!CVRInputManager.Instance.individualFingerTracking) { - CVRInputManager.Instance.fingerCurlLeftThumb = 0f; - CVRInputManager.Instance.fingerCurlLeftIndex = 0f; - CVRInputManager.Instance.fingerCurlLeftMiddle = 0f; - CVRInputManager.Instance.fingerCurlLeftRing = 0f; - CVRInputManager.Instance.fingerCurlLeftPinky = 0f; - CVRInputManager.Instance.fingerCurlRightThumb = 0f; - CVRInputManager.Instance.fingerCurlRightIndex = 0f; - CVRInputManager.Instance.fingerCurlRightMiddle = 0f; - CVRInputManager.Instance.fingerCurlRightRing = 0f; - CVRInputManager.Instance.fingerCurlRightPinky = 0f; + // Left hand + CVRInputManager.Instance.finger1StretchedLeftThumb = -0.5f; + CVRInputManager.Instance.finger2StretchedLeftThumb = 0.7f; + CVRInputManager.Instance.finger3StretchedLeftThumb = 0.7f; + CVRInputManager.Instance.fingerSpreadLeftThumb = 0f; - CVRInputManager.Instance.fingerSpreadLeftThumb = 0.5f; - CVRInputManager.Instance.fingerSpreadLeftIndex = 0.5f; - CVRInputManager.Instance.fingerSpreadLeftMiddle = 0.5f; - CVRInputManager.Instance.fingerSpreadLeftRing = 0.5f; - CVRInputManager.Instance.fingerSpreadLeftPinky = 0.5f; - CVRInputManager.Instance.fingerSpreadRightThumb = 0.5f; - CVRInputManager.Instance.fingerSpreadRightIndex = 0.5f; - CVRInputManager.Instance.fingerSpreadRightMiddle = 0.5f; - CVRInputManager.Instance.fingerSpreadRightRing = 0.5f; - CVRInputManager.Instance.fingerSpreadRightPinky = 0.5f; + CVRInputManager.Instance.finger1StretchedLeftIndex = 0.5f; + CVRInputManager.Instance.finger2StretchedLeftIndex = 0.7f; + CVRInputManager.Instance.finger3StretchedLeftIndex = 0.7f; + CVRInputManager.Instance.fingerSpreadLeftIndex = 0f; + + CVRInputManager.Instance.finger1StretchedLeftMiddle = 0.5f; + CVRInputManager.Instance.finger2StretchedLeftMiddle = 0.7f; + CVRInputManager.Instance.finger3StretchedLeftMiddle = 0.7f; + CVRInputManager.Instance.fingerSpreadLeftMiddle = 0f; + + CVRInputManager.Instance.finger1StretchedLeftRing = 0.5f; + CVRInputManager.Instance.finger2StretchedLeftRing = 0.7f; + CVRInputManager.Instance.finger3StretchedLeftRing = 0.7f; + CVRInputManager.Instance.fingerSpreadLeftRing = 0f; + + CVRInputManager.Instance.finger1StretchedLeftPinky = 0.5f; + CVRInputManager.Instance.finger2StretchedLeftPinky = 0.7f; + CVRInputManager.Instance.finger3StretchedLeftPinky = 0.7f; + CVRInputManager.Instance.fingerSpreadLeftPinky = 0f; + + CVRInputManager.Instance.fingerFullCurlNormalizedLeftThumb = 0f; + CVRInputManager.Instance.fingerFullCurlNormalizedLeftIndex = 0f; + CVRInputManager.Instance.fingerFullCurlNormalizedLeftMiddle = 0f; + CVRInputManager.Instance.fingerFullCurlNormalizedLeftRing = 0f; + CVRInputManager.Instance.fingerFullCurlNormalizedLeftPinky = 0f; + + // Right hand + CVRInputManager.Instance.finger1StretchedRightThumb = -0.5f; + CVRInputManager.Instance.finger2StretchedRightThumb = 0.7f; + CVRInputManager.Instance.finger3StretchedRightThumb = 0.7f; + CVRInputManager.Instance.fingerSpreadRightThumb = 0f; + + CVRInputManager.Instance.finger1StretchedRightIndex = 0.5f; + CVRInputManager.Instance.finger2StretchedRightIndex = 0.7f; + CVRInputManager.Instance.finger3StretchedRightIndex = 0.7f; + CVRInputManager.Instance.fingerSpreadRightIndex = 0f; + + CVRInputManager.Instance.finger1StretchedRightMiddle = 0.5f; + CVRInputManager.Instance.finger2StretchedRightMiddle = 0.7f; + CVRInputManager.Instance.finger3StretchedRightMiddle = 0.7f; + CVRInputManager.Instance.fingerSpreadRightMiddle = 0f; + + CVRInputManager.Instance.finger1StretchedRightRing = 0.5f; + CVRInputManager.Instance.finger2StretchedRightRing = 0.7f; + CVRInputManager.Instance.finger3StretchedRightRing = 0.7f; + CVRInputManager.Instance.fingerSpreadRightRing = 0f; + + CVRInputManager.Instance.finger1StretchedRightPinky = 0.5f; + CVRInputManager.Instance.finger2StretchedRightPinky = 0.7f; + CVRInputManager.Instance.finger3StretchedRightPinky = 0.7f; + CVRInputManager.Instance.fingerSpreadRightPinky = 0f; + + CVRInputManager.Instance.fingerFullCurlNormalizedRightThumb = 0f; + CVRInputManager.Instance.fingerFullCurlNormalizedRightIndex = 0f; + CVRInputManager.Instance.fingerFullCurlNormalizedRightMiddle = 0f; + CVRInputManager.Instance.fingerFullCurlNormalizedRightRing = 0f; + CVRInputManager.Instance.fingerFullCurlNormalizedRightPinky = 0f; } } } diff --git a/ml_pmc/PuppetParser.cs b/ml_pmc/PuppetParser.cs index fece340..046a798 100644 --- a/ml_pmc/PuppetParser.cs +++ b/ml_pmc/PuppetParser.cs @@ -1,108 +1,136 @@ -using ABI_RC.Core.Player; -using UnityEngine; - -namespace ml_pmc -{ - [DisallowMultipleComponent] - class PuppetParser : MonoBehaviour - { - internal PuppetMaster m_puppetMaster = null; - Animator m_animator = null; - AnimatorCullingMode m_cullMode; - - HumanPoseHandler m_poseHandler = null; - HumanPose m_pose; - - Matrix4x4 m_matrix = Matrix4x4.identity; - Matrix4x4 m_offset = Matrix4x4.identity; - - bool m_sitting = false; - float m_leftGesture = 0f; - float m_rightGesture = 0f; - bool m_fingerTracking = false; - readonly float[] m_fingerCurls = null; - readonly float[] m_fingerSpreads = null; - - internal PuppetParser() - { - m_fingerCurls = new float[10]; - m_fingerSpreads = new float[10]; - } - - // Unity events - void Start() - { - m_animator = this.GetComponent(); - m_cullMode = m_animator.cullingMode; - m_animator.cullingMode = AnimatorCullingMode.AlwaysAnimate; - m_poseHandler = new HumanPoseHandler(m_animator.avatar, m_animator.transform); - m_poseHandler.GetHumanPose(ref m_pose); - m_matrix = this.transform.GetMatrix(); - } - - void OnDestroy() - { - m_puppetMaster = null; - if(m_animator != null) - m_animator.cullingMode = m_cullMode; - m_animator = null; - - m_poseHandler?.Dispose(); - m_poseHandler = null; - } - - void Update() - { - if(m_puppetMaster != null) - { - m_sitting = m_puppetMaster.PlayerAvatarMovementDataInput.AnimatorSitting; - m_leftGesture = m_puppetMaster.PlayerAvatarMovementDataInput.AnimatorGestureLeft; - m_rightGesture = m_puppetMaster.PlayerAvatarMovementDataInput.AnimatorGestureRight; - m_fingerTracking = m_puppetMaster.PlayerAvatarMovementDataInput.IndexUseIndividualFingers; - if(m_fingerTracking) - { - m_fingerCurls[0] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftThumbCurl; - m_fingerCurls[1] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftIndexCurl; - m_fingerCurls[2] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftMiddleCurl; - m_fingerCurls[3] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftRingCurl; - m_fingerCurls[4] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftPinkyCurl; - m_fingerCurls[5] = m_puppetMaster.PlayerAvatarMovementDataInput.RightThumbCurl; - m_fingerCurls[6] = m_puppetMaster.PlayerAvatarMovementDataInput.RightIndexCurl; - m_fingerCurls[7] = m_puppetMaster.PlayerAvatarMovementDataInput.RightMiddleCurl; - m_fingerCurls[8] = m_puppetMaster.PlayerAvatarMovementDataInput.RightRingCurl; - m_fingerCurls[9] = m_puppetMaster.PlayerAvatarMovementDataInput.RightPinkyCurl; - - m_fingerSpreads[0] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftThumbSpread; - m_fingerSpreads[1] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftIndexSpread; - m_fingerSpreads[2] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftMiddleSpread; - m_fingerSpreads[3] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftRingSpread; - m_fingerSpreads[4] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftPinkySpread; - m_fingerSpreads[5] = m_puppetMaster.PlayerAvatarMovementDataInput.RightThumbSpread; - m_fingerSpreads[6] = m_puppetMaster.PlayerAvatarMovementDataInput.RightIndexSpread; - m_fingerSpreads[7] = m_puppetMaster.PlayerAvatarMovementDataInput.RightMiddleSpread; - m_fingerSpreads[8] = m_puppetMaster.PlayerAvatarMovementDataInput.RightRingSpread; - m_fingerSpreads[9] = m_puppetMaster.PlayerAvatarMovementDataInput.RightPinkySpread; - } - - Matrix4x4 l_current = this.transform.GetMatrix(); - m_offset = m_matrix.inverse * l_current; - m_matrix = l_current; - } - } - - void LateUpdate() - { - if((m_animator != null) && (m_poseHandler != null)) - m_poseHandler.GetHumanPose(ref m_pose); - } - - public ref HumanPose GetPose() => ref m_pose; - public ref Matrix4x4 GetLastOffset() => ref m_offset; - public bool IsSitting() => m_sitting; - public float GetLeftGesture() => m_leftGesture; - public float GetRightGesture() => m_rightGesture; - public bool HasFingerTracking() => m_fingerTracking; - public ref readonly float[] GetFingerCurls() => ref m_fingerCurls; - public ref readonly float[] GetFingerSpreads() => ref m_fingerSpreads; - } -} +using ABI_RC.Core.Player; +using UnityEngine; + +namespace ml_pmc +{ + [DisallowMultipleComponent] + class PuppetParser : MonoBehaviour + { + internal PuppetMaster m_puppetMaster = null; + Animator m_animator = null; + AnimatorCullingMode m_cullMode; + + HumanPoseHandler m_poseHandler = null; + HumanPose m_pose; + + Matrix4x4 m_matrix = Matrix4x4.identity; + Matrix4x4 m_offset = Matrix4x4.identity; + + bool m_sitting = false; + float m_leftGesture = 0f; + float m_rightGesture = 0f; + bool m_fingerTracking = false; + readonly float[] m_fingerCurls = null; + readonly float[] m_fingerSpreads = null; + + internal PuppetParser() + { + m_fingerCurls = new float[30]; + m_fingerSpreads = new float[10]; + } + + // Unity events + void Start() + { + m_animator = this.GetComponent(); + m_cullMode = m_animator.cullingMode; + m_animator.cullingMode = AnimatorCullingMode.AlwaysAnimate; + m_poseHandler = new HumanPoseHandler(m_animator.avatar, m_animator.transform); + m_poseHandler.GetHumanPose(ref m_pose); + m_matrix = this.transform.GetMatrix(); + } + + void OnDestroy() + { + m_puppetMaster = null; + if(m_animator != null) + m_animator.cullingMode = m_cullMode; + m_animator = null; + + m_poseHandler?.Dispose(); + m_poseHandler = null; + } + + void Update() + { + if(m_puppetMaster != null) + { + m_sitting = m_puppetMaster.PlayerAvatarMovementDataInput.AnimatorSitting; + m_leftGesture = m_puppetMaster.PlayerAvatarMovementDataInput.AnimatorGestureLeft; + m_rightGesture = m_puppetMaster.PlayerAvatarMovementDataInput.AnimatorGestureRight; + m_fingerTracking = m_puppetMaster.PlayerAvatarMovementDataInput.UseIndividualFingers; + if(m_fingerTracking) + { + m_fingerCurls[0] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftThumb1Stretched; + m_fingerCurls[1] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftThumb2Stretched; + m_fingerCurls[2] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftThumb3Stretched; + m_fingerSpreads[0] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftThumbSpread; + + m_fingerCurls[3] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftIndex1Stretched; + m_fingerCurls[4] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftIndex2Stretched; + m_fingerCurls[5] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftIndex3Stretched; + m_fingerSpreads[1] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftIndexSpread; + + m_fingerCurls[6] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftMiddle1Stretched; + m_fingerCurls[7] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftMiddle2Stretched; + m_fingerCurls[8] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftMiddle3Stretched; + m_fingerSpreads[2] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftMiddleSpread; + + m_fingerCurls[9] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftRing1Stretched; + m_fingerCurls[10] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftRing2Stretched; + m_fingerCurls[11] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftRing3Stretched; + m_fingerSpreads[3] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftRingSpread; + + m_fingerCurls[12] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftPinky1Stretched; + m_fingerCurls[13] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftPinky2Stretched; + m_fingerCurls[14] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftPinky3Stretched; + m_fingerSpreads[4] = m_puppetMaster.PlayerAvatarMovementDataInput.LeftPinkySpread; + + m_fingerCurls[15] = m_puppetMaster.PlayerAvatarMovementDataInput.RightThumb1Stretched; + m_fingerCurls[16] = m_puppetMaster.PlayerAvatarMovementDataInput.RightThumb2Stretched; + m_fingerCurls[17] = m_puppetMaster.PlayerAvatarMovementDataInput.RightThumb3Stretched; + m_fingerSpreads[5] = m_puppetMaster.PlayerAvatarMovementDataInput.RightThumbSpread; + + m_fingerCurls[18] = m_puppetMaster.PlayerAvatarMovementDataInput.RightIndex1Stretched; + m_fingerCurls[19] = m_puppetMaster.PlayerAvatarMovementDataInput.RightIndex2Stretched; + m_fingerCurls[20] = m_puppetMaster.PlayerAvatarMovementDataInput.RightIndex3Stretched; + m_fingerSpreads[6] = m_puppetMaster.PlayerAvatarMovementDataInput.RightIndexSpread; + + m_fingerCurls[21] = m_puppetMaster.PlayerAvatarMovementDataInput.RightMiddle1Stretched; + m_fingerCurls[22] = m_puppetMaster.PlayerAvatarMovementDataInput.RightMiddle2Stretched; + m_fingerCurls[23] = m_puppetMaster.PlayerAvatarMovementDataInput.RightMiddle3Stretched; + m_fingerSpreads[7] = m_puppetMaster.PlayerAvatarMovementDataInput.RightMiddleSpread; + + m_fingerCurls[24] = m_puppetMaster.PlayerAvatarMovementDataInput.RightRing1Stretched; + m_fingerCurls[25] = m_puppetMaster.PlayerAvatarMovementDataInput.RightRing2Stretched; + m_fingerCurls[26] = m_puppetMaster.PlayerAvatarMovementDataInput.RightRing3Stretched; + m_fingerSpreads[8] = m_puppetMaster.PlayerAvatarMovementDataInput.RightRingSpread; + + m_fingerCurls[27] = m_puppetMaster.PlayerAvatarMovementDataInput.RightPinky1Stretched; + m_fingerCurls[28] = m_puppetMaster.PlayerAvatarMovementDataInput.RightPinky2Stretched; + m_fingerCurls[29] = m_puppetMaster.PlayerAvatarMovementDataInput.RightPinky3Stretched; + m_fingerSpreads[9] = m_puppetMaster.PlayerAvatarMovementDataInput.RightPinkySpread; + } + + Matrix4x4 l_current = this.transform.GetMatrix(); + m_offset = m_matrix.inverse * l_current; + m_matrix = l_current; + } + } + + void LateUpdate() + { + if((m_animator != null) && (m_poseHandler != null)) + m_poseHandler.GetHumanPose(ref m_pose); + } + + public ref HumanPose GetPose() => ref m_pose; + public ref Matrix4x4 GetLastOffset() => ref m_offset; + public bool IsSitting() => m_sitting; + public float GetLeftGesture() => m_leftGesture; + public float GetRightGesture() => m_rightGesture; + public bool HasFingerTracking() => m_fingerTracking; + public ref readonly float[] GetFingerCurls() => ref m_fingerCurls; + public ref readonly float[] GetFingerSpreads() => ref m_fingerSpreads; + } +}