using ABI_RC.Core.Player; using ABI_RC.Core.Savior; using UnityEngine; namespace ml_lme { [DisallowMultipleComponent] class LeapTracked : MonoBehaviour { IndexIK m_indexIK = null; bool m_enabled = true; bool m_fingersOnly = false; LeapIK m_leapIK = null; Transform m_leftHand = null; Transform m_rightHand = null; void Start() { m_indexIK = this.GetComponent(); } public void SetEnabled(bool p_state) { m_enabled = p_state; if(m_indexIK != null) { m_indexIK.activeControl = (m_enabled || Utils.AreKnucklesInUse()); CVRInputManager.Instance.individualFingerTracking = (m_enabled || Utils.AreKnucklesInUse()); } if(m_leapIK != null) m_leapIK.SetEnabled(m_enabled); } public void SetFingersOnly(bool p_state) { m_fingersOnly = p_state; if(m_leapIK != null) m_leapIK.SetFingersOnly(m_fingersOnly); } public void SetHands(Transform p_left, Transform p_right) { m_leftHand = p_left; m_rightHand = p_right; } public void UpdateTracking(GestureMatcher.GesturesData p_gesturesData) { if(m_enabled && (m_indexIK != null)) { if(m_leapIK != null) m_leapIK.SetHandsVisibility(p_gesturesData.m_handsPresenses[0], p_gesturesData.m_handsPresenses[1]); if(p_gesturesData.m_handsPresenses[0]) { m_indexIK.leftThumbCurl = p_gesturesData.m_leftFingersBends[0]; m_indexIK.leftIndexCurl = p_gesturesData.m_leftFingersBends[1]; m_indexIK.leftMiddleCurl = p_gesturesData.m_leftFingersBends[2]; m_indexIK.leftRingCurl = p_gesturesData.m_leftFingersBends[3]; m_indexIK.leftPinkyCurl = p_gesturesData.m_leftFingersBends[4]; if(CVRInputManager.Instance != null) { CVRInputManager.Instance.fingerCurlLeftThumb = p_gesturesData.m_leftFingersBends[0]; CVRInputManager.Instance.fingerCurlLeftIndex = p_gesturesData.m_leftFingersBends[1]; CVRInputManager.Instance.fingerCurlLeftMiddle = p_gesturesData.m_leftFingersBends[2]; CVRInputManager.Instance.fingerCurlLeftRing = p_gesturesData.m_leftFingersBends[3]; CVRInputManager.Instance.fingerCurlLeftPinky = p_gesturesData.m_leftFingersBends[4]; } } if(p_gesturesData.m_handsPresenses[1]) { m_indexIK.rightThumbCurl = p_gesturesData.m_rightFingersBends[0]; m_indexIK.rightIndexCurl = p_gesturesData.m_rightFingersBends[1]; m_indexIK.rightMiddleCurl = p_gesturesData.m_rightFingersBends[2]; m_indexIK.rightRingCurl = p_gesturesData.m_rightFingersBends[3]; m_indexIK.rightPinkyCurl = p_gesturesData.m_rightFingersBends[4]; if(CVRInputManager.Instance != null) { CVRInputManager.Instance.fingerCurlRightThumb = p_gesturesData.m_rightFingersBends[0]; CVRInputManager.Instance.fingerCurlRightIndex = p_gesturesData.m_rightFingersBends[1]; CVRInputManager.Instance.fingerCurlRightMiddle = p_gesturesData.m_rightFingersBends[2]; CVRInputManager.Instance.fingerCurlRightRing = p_gesturesData.m_rightFingersBends[3]; CVRInputManager.Instance.fingerCurlRightPinky = p_gesturesData.m_rightFingersBends[4]; } } } } public void OnAvatarClear() { m_leapIK = null; } public void OnSetupAvatarGeneral() { if(m_indexIK != null) { m_indexIK.activeControl = (m_enabled || Utils.AreKnucklesInUse()); CVRInputManager.Instance.individualFingerTracking = (m_enabled || Utils.AreKnucklesInUse()); } if(!PlayerSetup.Instance._inVr) { m_leapIK = PlayerSetup.Instance._animator.gameObject.AddComponent(); m_leapIK.SetHands(m_leftHand, m_rightHand); m_leapIK.SetEnabled(m_enabled); m_leapIK.SetFingersOnly(m_fingersOnly); } } } }