Left hand fist fix

This commit is contained in:
SDraw 2023-07-27 22:21:00 +03:00
parent 3c33452379
commit dae0d5c65b
No known key found for this signature in database
GPG key ID: BB95B4DAB2BB8BB5
2 changed files with 97 additions and 106 deletions

View file

@ -36,7 +36,7 @@ namespace ml_lme
{ {
base.ModuleAdded(); base.ModuleAdded();
InputEnabled = Settings.Enabled; base.InputEnabled = Settings.Enabled;
HapticFeedback = false; HapticFeedback = false;
m_inVR = Utils.IsInVR(); m_inVR = Utils.IsInVR();
@ -121,21 +121,63 @@ namespace ml_lme
public override void UpdateInput() public override void UpdateInput()
{ {
if(InputEnabled) if(base.InputEnabled)
{ {
GestureMatcher.LeapData l_data = LeapManager.Instance.GetLatestData(); GestureMatcher.LeapData l_data = LeapManager.Instance.GetLatestData();
if(l_data.m_leftHand.m_present) if(l_data.m_leftHand.m_present)
{ {
SetFingersInput(l_data.m_leftHand, true);
m_handVisibleLeft = true; m_handVisibleLeft = true;
SetFingersInput(l_data.m_leftHand, true);
if(Settings.Gestures)
{
_inputManager.gestureLeftRaw = 0f;
// Finger Point & Finger Gun
if((_inputManager.fingerCurlLeftIndex < 0.2f) && (_inputManager.fingerCurlLeftMiddle > 0.75f) &&
(_inputManager.fingerCurlLeftRing > 0.75f) && (_inputManager.fingerCurlLeftPinky > 0.75f))
{
_inputManager.gestureLeftRaw = (_inputManager.fingerCurlLeftThumb >= 0.5f) ? 4f : 3f;
}
// Peace Sign
if((_inputManager.fingerCurlLeftIndex < 0.2f) && (_inputManager.fingerCurlLeftMiddle < 0.2f) &&
(_inputManager.fingerCurlLeftRing > 0.75f) && (_inputManager.fingerCurlLeftPinky > 0.75f))
{
_inputManager.gestureLeftRaw = 5f;
}
// Rock and Roll
if((_inputManager.fingerCurlLeftIndex < 0.2f) && (_inputManager.fingerCurlLeftMiddle > 0.75f) &&
(_inputManager.fingerCurlLeftRing > 0.75f) && (_inputManager.fingerCurlLeftPinky < 0.5f))
{
_inputManager.gestureLeftRaw = 6f;
}
// Fist & Thumbs Up
if((_inputManager.fingerCurlLeftIndex > 0.5f) && (_inputManager.fingerCurlLeftMiddle > 0.5f) &&
(_inputManager.fingerCurlLeftRing > 0.5f) && (_inputManager.fingerCurlLeftPinky > 0.5f))
{
_inputManager.gestureLeftRaw = (_inputManager.fingerCurlLeftThumb >= 0.5f) ? ((l_data.m_leftHand.m_grabStrength - 0.5f) * 2f) : 2f;
}
// Open Hand
if((_inputManager.fingerCurlLeftIndex < 0.2f) && (_inputManager.fingerCurlLeftMiddle < 0.2f) &&
(_inputManager.fingerCurlLeftRing < 0.2f) && (_inputManager.fingerCurlLeftPinky < 0.2f))
{
_inputManager.gestureLeftRaw = -1f;
}
_inputManager.gestureLeft = _inputManager.gestureLeftRaw;
}
} }
else else
{ {
if(m_handVisibleLeft) if(m_handVisibleLeft)
{ {
ResetFingers(true);
m_handVisibleLeft = false; m_handVisibleLeft = false;
ResetFingers(true);
if(Settings.Gestures) if(Settings.Gestures)
ResetGestures(true); ResetGestures(true);
} }
@ -143,15 +185,57 @@ namespace ml_lme
if(l_data.m_rightHand.m_present) if(l_data.m_rightHand.m_present)
{ {
SetFingersInput(l_data.m_rightHand, false);
m_handVisibleRight = true; m_handVisibleRight = true;
SetFingersInput(l_data.m_rightHand, false);
if(Settings.Gestures)
{
_inputManager.gestureRightRaw = 0f;
// Finger Point & Finger Gun
if((_inputManager.fingerCurlRightIndex < 0.2f) && (_inputManager.fingerCurlRightMiddle > 0.75f) &&
(_inputManager.fingerCurlRightRing > 0.75f) && (_inputManager.fingerCurlRightPinky > 0.75f))
{
_inputManager.gestureRightRaw = (_inputManager.fingerCurlRightThumb >= 0.5f) ? 4f : 3f;
}
// Peace Sign
if((_inputManager.fingerCurlRightIndex < 0.2f) && (_inputManager.fingerCurlRightMiddle < 0.2f) &&
(_inputManager.fingerCurlRightRing > 0.75f) && (_inputManager.fingerCurlRightPinky > 0.75f))
{
_inputManager.gestureRightRaw = 5f;
}
// Rock and Roll
if((_inputManager.fingerCurlRightIndex < 0.2f) && (_inputManager.fingerCurlRightMiddle > 0.75f) &&
(_inputManager.fingerCurlRightRing > 0.75f) && (_inputManager.fingerCurlRightPinky < 0.5f))
{
_inputManager.gestureRightRaw = 6f;
}
// Fist & Thumbs Up
if((_inputManager.fingerCurlRightIndex > 0.5f) && (_inputManager.fingerCurlRightMiddle > 0.5f) &&
(_inputManager.fingerCurlRightRing > 0.5f) && (_inputManager.fingerCurlRightPinky > 0.5f))
{
_inputManager.gestureRightRaw = (_inputManager.fingerCurlRightThumb >= 0.5f) ? ((l_data.m_rightHand.m_grabStrength - 0.5f) * 2f) : 2f;
}
// Open Hand
if((_inputManager.fingerCurlRightIndex < 0.2f) && (_inputManager.fingerCurlRightMiddle < 0.2f) &&
(_inputManager.fingerCurlRightRing < 0.2f) && (_inputManager.fingerCurlRightPinky < 0.2f))
{
_inputManager.gestureRightRaw = -1f;
}
_inputManager.gestureRight = _inputManager.gestureRightRaw;
}
} }
else else
{ {
if(m_handVisibleRight) if(m_handVisibleRight)
{ {
ResetFingers(false);
m_handVisibleRight = false; m_handVisibleRight = false;
ResetFingers(false);
if(Settings.Gestures) if(Settings.Gestures)
ResetGestures(false); ResetGestures(false);
} }
@ -166,6 +250,7 @@ namespace ml_lme
} }
else else
_inputManager.individualFingerTracking = (l_data.m_leftHand.m_present || l_data.m_rightHand.m_present); _inputManager.individualFingerTracking = (l_data.m_leftHand.m_present || l_data.m_rightHand.m_present);
IKSystem.Instance.FingerSystem.controlActive = _inputManager.individualFingerTracking; IKSystem.Instance.FingerSystem.controlActive = _inputManager.individualFingerTracking;
} }
@ -178,10 +263,10 @@ namespace ml_lme
public override void Update_Interaction() public override void Update_Interaction()
{ {
GestureMatcher.LeapData l_data = LeapManager.Instance.GetLatestData();
if(Settings.Input) if(Settings.Input)
{ {
GestureMatcher.LeapData l_data = LeapManager.Instance.GetLatestData();
if(l_data.m_leftHand.m_present && (!m_inVR || !Utils.IsLeftHandTracked() || !Settings.FingersOnly)) if(l_data.m_leftHand.m_present && (!m_inVR || !Utils.IsLeftHandTracked() || !Settings.FingersOnly))
{ {
float l_strength = l_data.m_leftHand.m_grabStrength; float l_strength = l_data.m_leftHand.m_grabStrength;
@ -238,110 +323,17 @@ namespace ml_lme
} }
} }
} }
if(Settings.Gestures)
{
// Left hand gestures
if(l_data.m_leftHand.m_present)
{
_inputManager.gestureLeftRaw = 0f;
// Finger Point & Finger Gun
if(_inputManager.fingerCurlLeftIndex < 0.2f && _inputManager.fingerCurlLeftMiddle > 0.75f &&
_inputManager.fingerCurlLeftRing > 0.75f && _inputManager.fingerCurlLeftPinky > 0.75f)
{
_inputManager.gestureLeftRaw = _inputManager.fingerCurlLeftThumb >= 0.5f ? 4f : 3f;
}
// Peace Sign
if(_inputManager.fingerCurlLeftIndex < 0.2f && _inputManager.fingerCurlLeftMiddle < 0.2f &&
_inputManager.fingerCurlLeftRing > 0.75f && _inputManager.fingerCurlLeftPinky > 0.75f)
{
_inputManager.gestureLeftRaw = 5f;
}
// Rock and Roll
if(_inputManager.fingerCurlLeftIndex < 0.2f && _inputManager.fingerCurlLeftMiddle > 0.75f &&
_inputManager.fingerCurlLeftRing > 0.75f && _inputManager.fingerCurlLeftPinky < 0.5f)
{
_inputManager.gestureLeftRaw = 6f;
}
// Fist & Thumbs Up
if(_inputManager.fingerCurlLeftIndex > 0.5f && _inputManager.fingerCurlLeftMiddle > 0.5f &&
_inputManager.fingerCurlLeftRing > 0.5f && _inputManager.fingerCurlLeftPinky > 0.5f)
{
_inputManager.gestureLeftRaw = _inputManager.fingerCurlLeftThumb >= 0.5f
? (l_data.m_rightHand.m_grabStrength - 0.5f) * 2f
: 2f;
}
// Open Hand
if(_inputManager.fingerCurlLeftIndex < 0.2f && _inputManager.fingerCurlLeftMiddle < 0.2f &&
_inputManager.fingerCurlLeftRing < 0.2f && _inputManager.fingerCurlLeftPinky < 0.2f)
{
_inputManager.gestureLeftRaw = -1f;
}
_inputManager.gestureLeft = _inputManager.gestureLeftRaw;
}
// Right hand gestures
if(l_data.m_rightHand.m_present)
{
_inputManager.gestureRightRaw = 0f;
// Finger Point & Finger Gun
if(_inputManager.fingerCurlRightIndex < 0.2f && _inputManager.fingerCurlRightMiddle > 0.75f &&
_inputManager.fingerCurlRightRing > 0.75f && _inputManager.fingerCurlRightPinky > 0.75f)
{
_inputManager.gestureRightRaw = _inputManager.fingerCurlRightThumb >= 0.5f ? 4f : 3f;
}
// Peace Sign
if(_inputManager.fingerCurlRightIndex < 0.2f && _inputManager.fingerCurlRightMiddle < 0.2f &&
_inputManager.fingerCurlRightRing > 0.75f && _inputManager.fingerCurlRightPinky > 0.75f)
{
_inputManager.gestureRightRaw = 5f;
}
// Rock and Roll
if(_inputManager.fingerCurlRightIndex < 0.2f && _inputManager.fingerCurlRightMiddle > 0.75f &&
_inputManager.fingerCurlRightRing > 0.75f && _inputManager.fingerCurlRightPinky < 0.5f)
{
_inputManager.gestureRightRaw = 6f;
}
// Fist & Thumbs Up
if(_inputManager.fingerCurlRightIndex > 0.5f && _inputManager.fingerCurlRightMiddle > 0.5f &&
_inputManager.fingerCurlRightRing > 0.5f && _inputManager.fingerCurlRightPinky > 0.5f)
{
_inputManager.gestureRightRaw = _inputManager.fingerCurlRightThumb >= 0.5f
? (l_data.m_rightHand.m_grabStrength - 0.5f) * 2f
: 2f;
}
// Open Hand
if(_inputManager.fingerCurlRightIndex < 0.2f && _inputManager.fingerCurlRightMiddle < 0.2f &&
_inputManager.fingerCurlRightRing < 0.2f && _inputManager.fingerCurlRightPinky < 0.2f)
{
_inputManager.gestureRightRaw = -1f;
}
_inputManager.gestureRight = _inputManager.gestureRightRaw;
}
}
} }
// Settings changes // Settings changes
void OnEnableChange(bool p_state) void OnEnableChange(bool p_state)
{ {
InputEnabled = p_state; base.InputEnabled = p_state;
m_handVisibleLeft &= p_state;
m_handVisibleRight &= p_state;
OnInputChange(p_state && Settings.Input); OnInputChange(p_state && Settings.Input);
UpdateFingerTracking(); UpdateFingerTracking();
m_handVisibleLeft &= p_state;
m_handVisibleRight &= p_state;
} }
void OnInputChange(bool p_state) void OnInputChange(bool p_state)
@ -378,7 +370,6 @@ namespace ml_lme
internal void OnAvatarSetup() internal void OnAvatarSetup()
{ {
m_inVR = Utils.IsInVR(); m_inVR = Utils.IsInVR();
UpdateFingerTracking();
} }
internal void OnRayScale(float p_scale) internal void OnRayScale(float p_scale)

View file

@ -400,7 +400,7 @@ function inp_dropdown_mod_lme(_obj, _callbackName) {
</div> </div>
<div class ="row-wrapper"> <div class ="row-wrapper">
<div class ="option-caption">Recognize Gestures: </div> <div class ="option-caption">Recognize gestures: </div>
<div class ="option-input"> <div class ="option-input">
<div id="Gestures" class ="inp_toggle no-scroll" data-current="false"></div> <div id="Gestures" class ="inp_toggle no-scroll" data-current="false"></div>
</div> </div>