mirror of
https://github.com/hanetzer/sdraw_mods_cvr.git
synced 2025-09-03 10:29:22 +00:00
Add gesture recognition setting
Also fixed attachmentDistance by setting it to 0f.
This commit is contained in:
parent
c9162a766f
commit
c6506727ab
3 changed files with 136 additions and 5 deletions
|
@ -40,6 +40,7 @@ namespace ml_lme
|
|||
m_handRayLeft.isInteractionRay = true;
|
||||
m_handRayLeft.triggerGazeEvents = false;
|
||||
m_handRayLeft.holderRoot = m_handRayLeft.gameObject;
|
||||
m_handRayLeft.attachmentDistance = 0f;
|
||||
|
||||
m_handRayRight = LeapTracking.GetInstance().GetRightHand().gameObject.AddComponent<ControllerRay>();
|
||||
m_handRayRight.hand = false;
|
||||
|
@ -47,6 +48,7 @@ namespace ml_lme
|
|||
m_handRayRight.isInteractionRay = true;
|
||||
m_handRayRight.triggerGazeEvents = false;
|
||||
m_handRayRight.holderRoot = m_handRayRight.gameObject;
|
||||
m_handRayRight.attachmentDistance = 0f;
|
||||
|
||||
m_lineLeft = m_handRayLeft.gameObject.AddComponent<LineRenderer>();
|
||||
m_lineLeft.endWidth = 1f;
|
||||
|
@ -74,9 +76,11 @@ namespace ml_lme
|
|||
|
||||
Settings.EnabledChange += this.OnEnableChange;
|
||||
Settings.InputChange += this.OnInputChange;
|
||||
Settings.GesturesChange += this.OnGesturesChange;
|
||||
|
||||
OnEnableChange(Settings.Enabled);
|
||||
OnInputChange(Settings.Input);
|
||||
OnGesturesChange(Settings.Gestures);
|
||||
|
||||
MelonLoader.MelonCoroutines.Start(WaitForSettings());
|
||||
MelonLoader.MelonCoroutines.Start(WaitForMaterial());
|
||||
|
@ -133,6 +137,8 @@ namespace ml_lme
|
|||
{
|
||||
ResetFingers(true);
|
||||
m_handVisibleLeft = false;
|
||||
if (Settings.Gestures)
|
||||
ResetGestures(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -147,6 +153,8 @@ namespace ml_lme
|
|||
{
|
||||
ResetFingers(false);
|
||||
m_handVisibleRight = false;
|
||||
if (Settings.Gestures)
|
||||
ResetGestures(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -166,13 +174,16 @@ namespace ml_lme
|
|||
m_handRayLeft.enabled = (l_data.m_leftHand.m_present && (!m_inVR || !Utils.IsLeftHandTracked() || !Settings.FingersOnly));
|
||||
m_handRayRight.enabled = (l_data.m_rightHand.m_present && (!m_inVR || !Utils.IsRightHandTracked() || !Settings.FingersOnly));
|
||||
}
|
||||
|
||||
|
||||
public override void UpdateInput()
|
||||
{
|
||||
if(Settings.Enabled && Settings.Input)
|
||||
{
|
||||
GestureMatcher.LeapData l_data = LeapManager.GetInstance().GetLatestData();
|
||||
if (!Settings.Enabled)
|
||||
return;
|
||||
|
||||
GestureMatcher.LeapData l_data = LeapManager.GetInstance().GetLatestData();
|
||||
|
||||
if(Settings.Input)
|
||||
{
|
||||
if(l_data.m_leftHand.m_present && (!m_inVR || !Utils.IsLeftHandTracked() || !Settings.FingersOnly))
|
||||
{
|
||||
float l_strength = l_data.m_leftHand.m_grabStrength;
|
||||
|
@ -229,6 +240,85 @@ namespace ml_lme
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (Settings.Gestures)
|
||||
{
|
||||
// Left hand gestures
|
||||
if (l_data.m_leftHand.m_present && (!m_inVR || !Utils.IsLeftHandTracked() || !Settings.FingersOnly))
|
||||
{
|
||||
if (m_inputManager.fingerCurlLeftThumb < 0.5f && m_inputManager.fingerCurlLeftIndex < 0.5f && m_inputManager.fingerCurlLeftMiddle < 0.5f && m_inputManager.fingerCurlLeftRing < 0.5f && m_inputManager.fingerCurlLeftPinky < 0.5f)
|
||||
{
|
||||
m_inputManager.gestureLeftRaw = -1f;
|
||||
}
|
||||
if (m_inputManager.fingerCurlLeftThumb >= 0.75f || m_inputManager.fingerCurlLeftIndex >= 0.75f || m_inputManager.fingerCurlLeftMiddle >= 0.75f || m_inputManager.fingerCurlLeftRing >= 0.75f || m_inputManager.fingerCurlLeftPinky >= 0.75f)
|
||||
{
|
||||
m_inputManager.gestureLeftRaw = Settings.Input ? m_inputManager.gripLeftValue : 1f;
|
||||
}
|
||||
if (m_inputManager.fingerCurlLeftIndex >= 0.75f && m_inputManager.fingerCurlLeftMiddle >= 0.75f && m_inputManager.fingerCurlLeftRing >= 0.75f && m_inputManager.fingerCurlLeftPinky >= 0.75f)
|
||||
{
|
||||
m_inputManager.gestureLeftRaw = 2f;
|
||||
}
|
||||
if (m_inputManager.fingerCurlLeftMiddle >= 0.75f && m_inputManager.fingerCurlLeftRing >= 0.75f && m_inputManager.fingerCurlLeftPinky >= 0.75f)
|
||||
{
|
||||
m_inputManager.gestureLeftRaw = 3f;
|
||||
}
|
||||
if (m_inputManager.fingerCurlLeftThumb >= 0.75f && m_inputManager.fingerCurlLeftMiddle >= 0.75f && m_inputManager.fingerCurlLeftRing >= 0.75f && m_inputManager.fingerCurlLeftPinky >= 0.75f)
|
||||
{
|
||||
m_inputManager.gestureLeftRaw = 4f;
|
||||
}
|
||||
if (m_inputManager.fingerCurlLeftThumb >= 0.75f && m_inputManager.fingerCurlLeftRing >= 0.75f && m_inputManager.fingerCurlLeftPinky >= 0.75f)
|
||||
{
|
||||
m_inputManager.gestureLeftRaw = 5f;
|
||||
}
|
||||
if (m_inputManager.fingerCurlLeftIndex >= 0.75f && m_inputManager.fingerCurlLeftRing >= 0.75f && m_inputManager.fingerCurlLeftPinky >= 0.75f)
|
||||
{
|
||||
m_inputManager.gestureLeftRaw = 6f;
|
||||
}
|
||||
if (m_inputManager.fingerCurlLeftThumb >= 0.75f && m_inputManager.fingerCurlLeftMiddle >= 0.5f && m_inputManager.fingerCurlLeftRing >= 0.75f)
|
||||
{
|
||||
m_inputManager.gestureLeftRaw = 6f;
|
||||
}
|
||||
m_inputManager.gestureLeft = m_inputManager.gestureLeftRaw;
|
||||
}
|
||||
|
||||
// Right hand gestures
|
||||
if (l_data.m_rightHand.m_present && (!m_inVR || !Utils.IsRightHandTracked() || !Settings.FingersOnly))
|
||||
{
|
||||
if (m_inputManager.fingerCurlRightThumb < 0.5f && m_inputManager.fingerCurlRightIndex < 0.5f && m_inputManager.fingerCurlRightMiddle < 0.5f && m_inputManager.fingerCurlRightRing < 0.5f && m_inputManager.fingerCurlRightPinky < 0.5f)
|
||||
{
|
||||
m_inputManager.gestureRightRaw = -1f;
|
||||
}
|
||||
if (m_inputManager.fingerCurlRightThumb >= 0.75f || m_inputManager.fingerCurlRightIndex >= 0.75f || m_inputManager.fingerCurlRightMiddle >= 0.75f || m_inputManager.fingerCurlRightRing >= 0.75f || m_inputManager.fingerCurlRightPinky >= 0.75f)
|
||||
{
|
||||
m_inputManager.gestureRightRaw = Settings.Input ? m_inputManager.gripRightValue : 1f;
|
||||
}
|
||||
if (m_inputManager.fingerCurlRightIndex >= 0.75f && m_inputManager.fingerCurlRightMiddle >= 0.75f && m_inputManager.fingerCurlRightRing >= 0.75f && m_inputManager.fingerCurlRightPinky >= 0.75f)
|
||||
{
|
||||
m_inputManager.gestureRightRaw = 2f;
|
||||
}
|
||||
if (m_inputManager.fingerCurlRightMiddle >= 0.75f && m_inputManager.fingerCurlRightRing >= 0.75f && m_inputManager.fingerCurlRightPinky >= 0.75f)
|
||||
{
|
||||
m_inputManager.gestureRightRaw = 3f;
|
||||
}
|
||||
if (m_inputManager.fingerCurlRightThumb >= 0.75f && m_inputManager.fingerCurlRightMiddle >= 0.75f && m_inputManager.fingerCurlRightRing >= 0.75f && m_inputManager.fingerCurlRightPinky >= 0.75f)
|
||||
{
|
||||
m_inputManager.gestureRightRaw = 4f;
|
||||
}
|
||||
if (m_inputManager.fingerCurlRightThumb >= 0.75f && m_inputManager.fingerCurlRightRing >= 0.75f && m_inputManager.fingerCurlRightPinky >= 0.75f)
|
||||
{
|
||||
m_inputManager.gestureRightRaw = 5f;
|
||||
}
|
||||
if (m_inputManager.fingerCurlRightIndex >= 0.75f && m_inputManager.fingerCurlRightRing >= 0.75f && m_inputManager.fingerCurlRightPinky >= 0.75f)
|
||||
{
|
||||
m_inputManager.gestureRightRaw = 6f;
|
||||
}
|
||||
if (m_inputManager.fingerCurlRightThumb >= 0.75f && m_inputManager.fingerCurlRightMiddle >= 0.5f && m_inputManager.fingerCurlRightRing >= 0.75f)
|
||||
{
|
||||
m_inputManager.gestureRightRaw = 6f;
|
||||
}
|
||||
m_inputManager.gestureRight = m_inputManager.gestureRightRaw;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Settings changes
|
||||
|
@ -262,6 +352,14 @@ namespace ml_lme
|
|||
}
|
||||
}
|
||||
|
||||
void OnGesturesChange(bool p_state)
|
||||
{
|
||||
m_inputManager.gestureLeft = 0f;
|
||||
m_inputManager.gestureLeftRaw = 0f;
|
||||
m_inputManager.gestureRight = 0f;
|
||||
m_inputManager.gestureRightRaw = 0f;
|
||||
}
|
||||
|
||||
// Game events
|
||||
internal void OnAvatarSetup()
|
||||
{
|
||||
|
@ -348,8 +446,22 @@ namespace ml_lme
|
|||
}
|
||||
}
|
||||
|
||||
void ResetGestures(bool p_left)
|
||||
{
|
||||
if (p_left)
|
||||
{
|
||||
m_inputManager.gestureLeft = 0f;
|
||||
m_inputManager.gestureLeftRaw = 0f;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_inputManager.gestureRight = 0f;
|
||||
m_inputManager.gestureRightRaw = 0f;
|
||||
}
|
||||
}
|
||||
|
||||
// Game settings
|
||||
void OnGameSettingBoolChange(string p_name, bool p_state)
|
||||
void OnGameSettingBoolChange(string p_name, bool p_state)
|
||||
{
|
||||
if(p_name == "ControlUseGripToGrab")
|
||||
m_gripToGrab = p_state;
|
||||
|
|
|
@ -33,6 +33,7 @@ namespace ml_lme
|
|||
HeadZ,
|
||||
TrackElbows,
|
||||
Input,
|
||||
Gestures,
|
||||
InteractThreadhold,
|
||||
GripThreadhold,
|
||||
VisualHands
|
||||
|
@ -48,6 +49,7 @@ namespace ml_lme
|
|||
public static Vector3 HeadOffset { get; private set; } = new Vector3(0f, -0.3f, 0.15f);
|
||||
public static bool TrackElbows { get; private set; } = true;
|
||||
public static bool Input { get; private set; } = true;
|
||||
public static bool Gestures { get; private set; } = false;
|
||||
public static float InteractThreadhold { get; private set; } = 0.8f;
|
||||
public static float GripThreadhold { get; private set; } = 0.4f;
|
||||
public static bool VisualHands { get; private set; } = false;
|
||||
|
@ -65,6 +67,7 @@ namespace ml_lme
|
|||
static public event Action<Vector3> HeadOffsetChange;
|
||||
static public event Action<bool> TrackElbowsChange;
|
||||
static public event Action<bool> InputChange;
|
||||
static public event Action<bool> GesturesChange;
|
||||
static public event Action<float> InteractThreadholdChange;
|
||||
static public event Action<float> GripThreadholdChange;
|
||||
static public event Action<bool> VisualHandsChange;
|
||||
|
@ -91,6 +94,7 @@ namespace ml_lme
|
|||
ms_category.CreateEntry(ModSetting.HeadZ.ToString(), (int)(HeadOffset.z * 100f)),
|
||||
ms_category.CreateEntry(ModSetting.TrackElbows.ToString(), TrackElbows),
|
||||
ms_category.CreateEntry(ModSetting.Input.ToString(), Input),
|
||||
ms_category.CreateEntry(ModSetting.Gestures.ToString(), Gestures),
|
||||
ms_category.CreateEntry(ModSetting.InteractThreadhold.ToString(), (int)(InteractThreadhold * 100f)),
|
||||
ms_category.CreateEntry(ModSetting.GripThreadhold.ToString(), (int)(GripThreadhold * 100f)),
|
||||
ms_category.CreateEntry(ModSetting.VisualHands.ToString(), VisualHands)
|
||||
|
@ -148,6 +152,7 @@ namespace ml_lme
|
|||
) * 0.01f;
|
||||
TrackElbows = (bool)ms_entries[(int)ModSetting.TrackElbows].BoxedValue;
|
||||
Input = (bool)ms_entries[(int)ModSetting.Input].BoxedValue;
|
||||
Gestures = (bool)ms_entries[(int)ModSetting.Gestures].BoxedValue;
|
||||
InteractThreadhold = (int)ms_entries[(int)ModSetting.InteractThreadhold].BoxedValue * 0.01f;
|
||||
GripThreadhold = (int)ms_entries[(int)ModSetting.GripThreadhold].BoxedValue * 0.01f;
|
||||
VisualHands = (bool)ms_entries[(int)ModSetting.VisualHands].BoxedValue;
|
||||
|
@ -201,6 +206,13 @@ namespace ml_lme
|
|||
}
|
||||
break;
|
||||
|
||||
case ModSetting.Gestures:
|
||||
{
|
||||
Gestures = bool.Parse(p_value);
|
||||
GesturesChange?.Invoke(Gestures);
|
||||
}
|
||||
break;
|
||||
|
||||
case ModSetting.VisualHands:
|
||||
{
|
||||
VisualHands = bool.Parse(p_value);
|
||||
|
|
|
@ -399,6 +399,13 @@ function inp_dropdown_mod_lme(_obj, _callbackName) {
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class ="row-wrapper">
|
||||
<div class ="option-caption">Recognize Gestures: </div>
|
||||
<div class ="option-input">
|
||||
<div id="Gestures" class ="inp_toggle no-scroll" data-current="false"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class ="row-wrapper">
|
||||
<div class ="option-caption">Interact gesture threadhold: </div>
|
||||
<div class ="option-input">
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue