mirror of
https://github.com/hanetzer/sdraw_mods_cvr.git
synced 2025-09-03 10:29:22 +00:00
Finger tracking value override fix
Rotation fix Me angery REEE Funni joke about sttuff
This commit is contained in:
parent
1efcb8aaee
commit
a5d93643fa
4 changed files with 190 additions and 165 deletions
|
@ -27,7 +27,9 @@ namespace ml_lme
|
|||
~LeapInput()
|
||||
{
|
||||
Settings.EnabledChange -= this.OnEnableChange;
|
||||
Settings.InputChange -= this.OnInputChange;
|
||||
Settings.InteractionChange -= this.OnInteractionChange;
|
||||
Settings.GesturesChange -= this.OnGesturesChange;
|
||||
Settings.FingersOnlyChange -= this.OnFingersOnlyChange;
|
||||
|
||||
MetaPort.Instance.settings.settingBoolChanged.RemoveListener(this.OnGameSettingBoolChange);
|
||||
}
|
||||
|
@ -35,9 +37,8 @@ namespace ml_lme
|
|||
public override void ModuleAdded()
|
||||
{
|
||||
base.ModuleAdded();
|
||||
|
||||
base.InputEnabled = Settings.Enabled;
|
||||
HapticFeedback = false;
|
||||
base.HapticFeedback = false;
|
||||
|
||||
m_inVR = Utils.IsInVR();
|
||||
|
||||
|
@ -47,13 +48,6 @@ namespace ml_lme
|
|||
m_handRayLeft.isInteractionRay = true;
|
||||
m_handRayLeft.triggerGazeEvents = false;
|
||||
m_handRayLeft.holderRoot = m_handRayLeft.gameObject;
|
||||
|
||||
m_handRayRight = LeapTracking.Instance.GetRightHand().gameObject.AddComponent<ControllerRay>();
|
||||
m_handRayRight.hand = false;
|
||||
m_handRayRight.generalMask = -1485;
|
||||
m_handRayRight.isInteractionRay = true;
|
||||
m_handRayRight.triggerGazeEvents = false;
|
||||
m_handRayRight.holderRoot = m_handRayRight.gameObject;
|
||||
m_handRayLeft.attachmentDistance = 0f;
|
||||
|
||||
m_lineLeft = m_handRayLeft.gameObject.AddComponent<LineRenderer>();
|
||||
|
@ -67,6 +61,13 @@ namespace ml_lme
|
|||
m_lineLeft.enabled = false;
|
||||
m_lineLeft.receiveShadows = false;
|
||||
m_handRayLeft.lineRenderer = m_lineLeft;
|
||||
|
||||
m_handRayRight = LeapTracking.Instance.GetRightHand().gameObject.AddComponent<ControllerRay>();
|
||||
m_handRayRight.hand = false;
|
||||
m_handRayRight.generalMask = -1485;
|
||||
m_handRayRight.isInteractionRay = true;
|
||||
m_handRayRight.triggerGazeEvents = false;
|
||||
m_handRayRight.holderRoot = m_handRayRight.gameObject;
|
||||
m_handRayRight.attachmentDistance = 0f;
|
||||
|
||||
m_lineRight = m_handRayRight.gameObject.AddComponent<LineRenderer>();
|
||||
|
@ -82,12 +83,14 @@ namespace ml_lme
|
|||
m_handRayRight.lineRenderer = m_lineRight;
|
||||
|
||||
Settings.EnabledChange += this.OnEnableChange;
|
||||
Settings.InputChange += this.OnInputChange;
|
||||
Settings.InteractionChange += this.OnInteractionChange;
|
||||
Settings.GesturesChange += this.OnGesturesChange;
|
||||
Settings.FingersOnlyChange += this.OnFingersOnlyChange;
|
||||
|
||||
OnEnableChange(Settings.Enabled);
|
||||
OnInputChange(Settings.Input);
|
||||
OnInteractionChange(Settings.Interaction);
|
||||
OnGesturesChange(Settings.Gestures);
|
||||
OnFingersOnlyChange(Settings.FingersOnly);
|
||||
|
||||
MelonLoader.MelonCoroutines.Start(WaitForSettings());
|
||||
MelonLoader.MelonCoroutines.Start(WaitForMaterial());
|
||||
|
@ -128,134 +131,125 @@ namespace ml_lme
|
|||
if(l_data.m_leftHand.m_present)
|
||||
{
|
||||
m_handVisibleLeft = true;
|
||||
|
||||
SetFingersInput(l_data.m_leftHand, true);
|
||||
|
||||
if(Settings.Gestures)
|
||||
{
|
||||
_inputManager.gestureLeftRaw = 0f;
|
||||
base._inputManager.gestureLeftRaw = 0f;
|
||||
|
||||
// Finger Point & Finger Gun
|
||||
if((_inputManager.fingerCurlLeftIndex < 0.2f) && (_inputManager.fingerCurlLeftMiddle > 0.75f) &&
|
||||
(_inputManager.fingerCurlLeftRing > 0.75f) && (_inputManager.fingerCurlLeftPinky > 0.75f))
|
||||
if((base._inputManager.fingerCurlLeftIndex < 0.2f) && (base._inputManager.fingerCurlLeftMiddle > 0.75f) &&
|
||||
(base._inputManager.fingerCurlLeftRing > 0.75f) && (base._inputManager.fingerCurlLeftPinky > 0.75f))
|
||||
{
|
||||
_inputManager.gestureLeftRaw = (_inputManager.fingerCurlLeftThumb >= 0.5f) ? 4f : 3f;
|
||||
base._inputManager.gestureLeftRaw = (base._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))
|
||||
if((base._inputManager.fingerCurlLeftIndex < 0.2f) && (base._inputManager.fingerCurlLeftMiddle < 0.2f) &&
|
||||
(base._inputManager.fingerCurlLeftRing > 0.75f) && (base._inputManager.fingerCurlLeftPinky > 0.75f))
|
||||
{
|
||||
_inputManager.gestureLeftRaw = 5f;
|
||||
base._inputManager.gestureLeftRaw = 5f;
|
||||
}
|
||||
|
||||
// Rock and Roll
|
||||
if((_inputManager.fingerCurlLeftIndex < 0.2f) && (_inputManager.fingerCurlLeftMiddle > 0.75f) &&
|
||||
(_inputManager.fingerCurlLeftRing > 0.75f) && (_inputManager.fingerCurlLeftPinky < 0.5f))
|
||||
if((base._inputManager.fingerCurlLeftIndex < 0.2f) && (base._inputManager.fingerCurlLeftMiddle > 0.75f) &&
|
||||
(base._inputManager.fingerCurlLeftRing > 0.75f) && (base._inputManager.fingerCurlLeftPinky < 0.5f))
|
||||
{
|
||||
_inputManager.gestureLeftRaw = 6f;
|
||||
base._inputManager.gestureLeftRaw = 6f;
|
||||
}
|
||||
|
||||
// Fist & Thumbs Up
|
||||
if((_inputManager.fingerCurlLeftIndex > 0.5f) && (_inputManager.fingerCurlLeftMiddle > 0.5f) &&
|
||||
(_inputManager.fingerCurlLeftRing > 0.5f) && (_inputManager.fingerCurlLeftPinky > 0.5f))
|
||||
if((base._inputManager.fingerCurlLeftIndex > 0.5f) && (base._inputManager.fingerCurlLeftMiddle > 0.5f) &&
|
||||
(base._inputManager.fingerCurlLeftRing > 0.5f) && (base._inputManager.fingerCurlLeftPinky > 0.5f))
|
||||
{
|
||||
_inputManager.gestureLeftRaw = (_inputManager.fingerCurlLeftThumb >= 0.5f) ? ((l_data.m_leftHand.m_grabStrength - 0.5f) * 2f) : 2f;
|
||||
base._inputManager.gestureLeftRaw = (base._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))
|
||||
if((base._inputManager.fingerCurlLeftIndex < 0.2f) && (base._inputManager.fingerCurlLeftMiddle < 0.2f) &&
|
||||
(base._inputManager.fingerCurlLeftRing < 0.2f) && (base._inputManager.fingerCurlLeftPinky < 0.2f))
|
||||
{
|
||||
_inputManager.gestureLeftRaw = -1f;
|
||||
base._inputManager.gestureLeftRaw = -1f;
|
||||
}
|
||||
|
||||
_inputManager.gestureLeft = _inputManager.gestureLeftRaw;
|
||||
base._inputManager.gestureLeft = base._inputManager.gestureLeftRaw;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(m_handVisibleLeft)
|
||||
{
|
||||
m_handVisibleLeft = false;
|
||||
ResetFingers(true);
|
||||
if(Settings.Gestures)
|
||||
ResetGestures(true);
|
||||
}
|
||||
|
||||
m_handVisibleLeft = false;
|
||||
}
|
||||
|
||||
if(l_data.m_rightHand.m_present)
|
||||
{
|
||||
m_handVisibleRight = true;
|
||||
|
||||
SetFingersInput(l_data.m_rightHand, false);
|
||||
|
||||
if(Settings.Gestures)
|
||||
{
|
||||
_inputManager.gestureRightRaw = 0f;
|
||||
base._inputManager.gestureRightRaw = 0f;
|
||||
|
||||
// Finger Point & Finger Gun
|
||||
if((_inputManager.fingerCurlRightIndex < 0.2f) && (_inputManager.fingerCurlRightMiddle > 0.75f) &&
|
||||
(_inputManager.fingerCurlRightRing > 0.75f) && (_inputManager.fingerCurlRightPinky > 0.75f))
|
||||
if((base._inputManager.fingerCurlRightIndex < 0.2f) && (base._inputManager.fingerCurlRightMiddle > 0.75f) &&
|
||||
(base._inputManager.fingerCurlRightRing > 0.75f) && (base._inputManager.fingerCurlRightPinky > 0.75f))
|
||||
{
|
||||
_inputManager.gestureRightRaw = (_inputManager.fingerCurlRightThumb >= 0.5f) ? 4f : 3f;
|
||||
base._inputManager.gestureRightRaw = (base._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))
|
||||
if((base._inputManager.fingerCurlRightIndex < 0.2f) && (base._inputManager.fingerCurlRightMiddle < 0.2f) &&
|
||||
(base._inputManager.fingerCurlRightRing > 0.75f) && (base._inputManager.fingerCurlRightPinky > 0.75f))
|
||||
{
|
||||
_inputManager.gestureRightRaw = 5f;
|
||||
base._inputManager.gestureRightRaw = 5f;
|
||||
}
|
||||
|
||||
// Rock and Roll
|
||||
if((_inputManager.fingerCurlRightIndex < 0.2f) && (_inputManager.fingerCurlRightMiddle > 0.75f) &&
|
||||
(_inputManager.fingerCurlRightRing > 0.75f) && (_inputManager.fingerCurlRightPinky < 0.5f))
|
||||
if((base._inputManager.fingerCurlRightIndex < 0.2f) && (base._inputManager.fingerCurlRightMiddle > 0.75f) &&
|
||||
(base._inputManager.fingerCurlRightRing > 0.75f) && (base._inputManager.fingerCurlRightPinky < 0.5f))
|
||||
{
|
||||
_inputManager.gestureRightRaw = 6f;
|
||||
base._inputManager.gestureRightRaw = 6f;
|
||||
}
|
||||
|
||||
// Fist & Thumbs Up
|
||||
if((_inputManager.fingerCurlRightIndex > 0.5f) && (_inputManager.fingerCurlRightMiddle > 0.5f) &&
|
||||
(_inputManager.fingerCurlRightRing > 0.5f) && (_inputManager.fingerCurlRightPinky > 0.5f))
|
||||
if((base._inputManager.fingerCurlRightIndex > 0.5f) && (base._inputManager.fingerCurlRightMiddle > 0.5f) &&
|
||||
(base._inputManager.fingerCurlRightRing > 0.5f) && (base._inputManager.fingerCurlRightPinky > 0.5f))
|
||||
{
|
||||
_inputManager.gestureRightRaw = (_inputManager.fingerCurlRightThumb >= 0.5f) ? ((l_data.m_rightHand.m_grabStrength - 0.5f) * 2f) : 2f;
|
||||
base._inputManager.gestureRightRaw = (base._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))
|
||||
if((base._inputManager.fingerCurlRightIndex < 0.2f) && (base._inputManager.fingerCurlRightMiddle < 0.2f) &&
|
||||
(base._inputManager.fingerCurlRightRing < 0.2f) && (base._inputManager.fingerCurlRightPinky < 0.2f))
|
||||
{
|
||||
_inputManager.gestureRightRaw = -1f;
|
||||
base._inputManager.gestureRightRaw = -1f;
|
||||
}
|
||||
|
||||
_inputManager.gestureRight = _inputManager.gestureRightRaw;
|
||||
base._inputManager.gestureRight = base._inputManager.gestureRightRaw;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(m_handVisibleRight)
|
||||
{
|
||||
m_handVisibleRight = false;
|
||||
ResetFingers(false);
|
||||
if(Settings.Gestures)
|
||||
ResetGestures(false);
|
||||
}
|
||||
|
||||
m_handVisibleRight = false;
|
||||
}
|
||||
|
||||
if(!ModSupporter.SkipFingersOverride())
|
||||
{
|
||||
if(m_inVR)
|
||||
{
|
||||
_inputManager.individualFingerTracking = !CVRInputManager._moduleXR.GestureToggleValue;
|
||||
_inputManager.individualFingerTracking |= (l_data.m_leftHand.m_present || l_data.m_rightHand.m_present);
|
||||
}
|
||||
else
|
||||
_inputManager.individualFingerTracking = (l_data.m_leftHand.m_present || l_data.m_rightHand.m_present);
|
||||
|
||||
IKSystem.Instance.FingerSystem.controlActive = _inputManager.individualFingerTracking;
|
||||
}
|
||||
|
||||
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));
|
||||
if(!ModSupporter.SkipFingersOverride() && (!m_inVR || !Utils.AreKnucklesInUse()))
|
||||
SetGameFingersTracking(m_handVisibleRight || m_handVisibleLeft);
|
||||
|
||||
base.UpdateInput();
|
||||
}
|
||||
|
@ -263,11 +257,11 @@ namespace ml_lme
|
|||
|
||||
public override void Update_Interaction()
|
||||
{
|
||||
if(Settings.Input)
|
||||
if(Settings.Interaction)
|
||||
{
|
||||
LeapParser.LeapData l_data = LeapManager.Instance.GetLatestData();
|
||||
|
||||
if(l_data.m_leftHand.m_present && (!m_inVR || !Utils.IsLeftHandTracked() || !Settings.FingersOnly))
|
||||
if(m_handVisibleLeft && (!m_inVR || !Utils.IsLeftHandTracked()) && !Settings.FingersOnly)
|
||||
{
|
||||
float l_strength = l_data.m_leftHand.m_grabStrength;
|
||||
|
||||
|
@ -276,26 +270,26 @@ namespace ml_lme
|
|||
l_interactValue = Mathf.Clamp01(Mathf.InverseLerp(Mathf.Min(Settings.GripThreadhold, Settings.InteractThreadhold), Mathf.Max(Settings.GripThreadhold, Settings.InteractThreadhold), l_strength));
|
||||
else
|
||||
l_interactValue = Mathf.Clamp01(Mathf.InverseLerp(0f, Settings.InteractThreadhold, l_strength));
|
||||
_inputManager.interactLeftValue = Mathf.Max(l_interactValue, _inputManager.interactLeftValue);
|
||||
base._inputManager.interactLeftValue = Mathf.Max(l_interactValue, base._inputManager.interactLeftValue);
|
||||
|
||||
if(m_interactLeft != (l_strength > Settings.InteractThreadhold))
|
||||
{
|
||||
m_interactLeft = (l_strength > Settings.InteractThreadhold);
|
||||
_inputManager.interactLeftDown |= m_interactLeft;
|
||||
_inputManager.interactLeftUp |= !m_interactLeft;
|
||||
base._inputManager.interactLeftDown |= m_interactLeft;
|
||||
base._inputManager.interactLeftUp |= !m_interactLeft;
|
||||
}
|
||||
|
||||
float l_gripValue = Mathf.Clamp01(Mathf.InverseLerp(0f, Settings.GripThreadhold, l_strength));
|
||||
_inputManager.gripLeftValue = Mathf.Max(l_gripValue, _inputManager.gripLeftValue);
|
||||
base._inputManager.gripLeftValue = Mathf.Max(l_gripValue, base._inputManager.gripLeftValue);
|
||||
if(m_gripLeft != (l_strength > Settings.GripThreadhold))
|
||||
{
|
||||
m_gripLeft = (l_strength > Settings.GripThreadhold);
|
||||
_inputManager.gripLeftDown |= m_gripLeft;
|
||||
_inputManager.gripLeftUp |= !m_gripLeft;
|
||||
base._inputManager.gripLeftDown |= m_gripLeft;
|
||||
base._inputManager.gripLeftUp |= !m_gripLeft;
|
||||
}
|
||||
}
|
||||
|
||||
if(l_data.m_rightHand.m_present && (!m_inVR || !Utils.IsRightHandTracked() || !Settings.FingersOnly))
|
||||
if(m_handVisibleRight && (!m_inVR || !Utils.IsRightHandTracked()) && !Settings.FingersOnly)
|
||||
{
|
||||
float l_strength = l_data.m_rightHand.m_grabStrength;
|
||||
|
||||
|
@ -304,24 +298,27 @@ namespace ml_lme
|
|||
l_interactValue = Mathf.Clamp01(Mathf.InverseLerp(Mathf.Min(Settings.GripThreadhold, Settings.InteractThreadhold), Mathf.Max(Settings.GripThreadhold, Settings.InteractThreadhold), l_strength));
|
||||
else
|
||||
l_interactValue = Mathf.Clamp01(Mathf.InverseLerp(0f, Settings.InteractThreadhold, l_strength));
|
||||
_inputManager.interactRightValue = Mathf.Max(l_interactValue, _inputManager.interactRightValue);
|
||||
base._inputManager.interactRightValue = Mathf.Max(l_interactValue, base._inputManager.interactRightValue);
|
||||
|
||||
if(m_interactRight != (l_strength > Settings.InteractThreadhold))
|
||||
{
|
||||
m_interactRight = (l_strength > Settings.InteractThreadhold);
|
||||
_inputManager.interactRightDown |= m_interactRight;
|
||||
_inputManager.interactRightUp |= !m_interactRight;
|
||||
base._inputManager.interactRightDown |= m_interactRight;
|
||||
base._inputManager.interactRightUp |= !m_interactRight;
|
||||
}
|
||||
|
||||
float l_gripValue = Mathf.Clamp01(Mathf.InverseLerp(0f, Settings.GripThreadhold, l_strength));
|
||||
_inputManager.gripRightValue = Mathf.Max(l_gripValue, _inputManager.gripRightValue);
|
||||
base._inputManager.gripRightValue = Mathf.Max(l_gripValue, base._inputManager.gripRightValue);
|
||||
if(m_gripRight != (l_strength > Settings.GripThreadhold))
|
||||
{
|
||||
m_gripRight = (l_strength > Settings.GripThreadhold);
|
||||
_inputManager.gripRightDown |= m_gripRight;
|
||||
_inputManager.gripRightUp |= !m_gripRight;
|
||||
base._inputManager.gripRightDown |= m_gripRight;
|
||||
base._inputManager.gripRightUp |= !m_gripRight;
|
||||
}
|
||||
}
|
||||
|
||||
ToggleHandRay(m_handVisibleLeft && (!m_inVR || !Utils.IsLeftHandTracked()) && !Settings.FingersOnly, true);
|
||||
ToggleHandRay(m_handVisibleRight && (!m_inVR || !Utils.IsRightHandTracked()) && !Settings.FingersOnly, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -329,21 +326,36 @@ namespace ml_lme
|
|||
void OnEnableChange(bool p_state)
|
||||
{
|
||||
base.InputEnabled = p_state;
|
||||
|
||||
m_handVisibleLeft &= p_state;
|
||||
m_handVisibleRight &= p_state;
|
||||
|
||||
OnInputChange(p_state && Settings.Input);
|
||||
UpdateFingerTracking();
|
||||
if(!p_state)
|
||||
{
|
||||
ResetFingers(true);
|
||||
ResetFingers(false);
|
||||
|
||||
if(Settings.Gestures)
|
||||
{
|
||||
ResetGestures(true);
|
||||
ResetGestures(false);
|
||||
}
|
||||
|
||||
void OnInputChange(bool p_state)
|
||||
{
|
||||
((MonoBehaviour)m_handRayLeft).enabled = (p_state && Settings.Enabled);
|
||||
((MonoBehaviour)m_handRayRight).enabled = (p_state && Settings.Enabled);
|
||||
m_lineLeft.enabled = (p_state && Settings.Enabled);
|
||||
m_lineRight.enabled = (p_state && Settings.Enabled);
|
||||
// Reset to default, FreedomFingers can go brrr, player should press funny controller button two times
|
||||
SetGameFingersTracking(m_inVR && Utils.AreKnucklesInUse() && !CVRInputManager._moduleXR.GestureToggleValue);
|
||||
}
|
||||
|
||||
if(!p_state)
|
||||
OnInteractionChange(Settings.Interaction);
|
||||
}
|
||||
|
||||
void OnInteractionChange(bool p_state)
|
||||
{
|
||||
bool l_state = (p_state && Settings.Enabled && !Settings.FingersOnly);
|
||||
|
||||
ToggleHandRay(l_state, true);
|
||||
ToggleHandRay(l_state, false);
|
||||
|
||||
if(!l_state)
|
||||
{
|
||||
m_handRayLeft.DropObject(true);
|
||||
m_handRayLeft.ClearGrabbedObject();
|
||||
|
@ -360,10 +372,15 @@ namespace ml_lme
|
|||
|
||||
void OnGesturesChange(bool p_state)
|
||||
{
|
||||
_inputManager.gestureLeft = 0f;
|
||||
_inputManager.gestureLeftRaw = 0f;
|
||||
_inputManager.gestureRight = 0f;
|
||||
_inputManager.gestureRightRaw = 0f;
|
||||
base._inputManager.gestureLeft = 0f;
|
||||
base._inputManager.gestureLeftRaw = 0f;
|
||||
base._inputManager.gestureRight = 0f;
|
||||
base._inputManager.gestureRightRaw = 0f;
|
||||
}
|
||||
|
||||
void OnFingersOnlyChange(bool p_state)
|
||||
{
|
||||
OnInteractionChange(Settings.Interaction);
|
||||
}
|
||||
|
||||
// Game events
|
||||
|
@ -379,47 +396,35 @@ namespace ml_lme
|
|||
}
|
||||
|
||||
// Arbitrary
|
||||
void UpdateFingerTracking()
|
||||
{
|
||||
_inputManager.individualFingerTracking = (Settings.Enabled || (m_inVR && Utils.AreKnucklesInUse() && !CVRInputManager._moduleXR.GestureToggleValue));
|
||||
IKSystem.Instance.FingerSystem.controlActive = _inputManager.individualFingerTracking;
|
||||
|
||||
if(!Settings.Enabled)
|
||||
{
|
||||
ResetFingers(true);
|
||||
ResetFingers(false);
|
||||
}
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
_inputManager.fingerCurlLeftThumb = p_hand.m_bends[0];
|
||||
_inputManager.fingerCurlLeftIndex = p_hand.m_bends[1];
|
||||
_inputManager.fingerCurlLeftMiddle = p_hand.m_bends[2];
|
||||
_inputManager.fingerCurlLeftRing = p_hand.m_bends[3];
|
||||
_inputManager.fingerCurlLeftPinky = p_hand.m_bends[4];
|
||||
_inputManager.fingerSpreadLeftThumb = 1f - (p_hand.m_spreads[0] * 0.5f + 0.5f);
|
||||
_inputManager.fingerSpreadLeftIndex = 1f - (p_hand.m_spreads[1] * 0.5f + 0.5f);
|
||||
_inputManager.fingerSpreadLeftMiddle = 1f - (p_hand.m_spreads[2] * 0.5f + 0.5f);
|
||||
_inputManager.fingerSpreadLeftRing = 1f - (p_hand.m_spreads[3] * 0.5f + 0.5f);
|
||||
_inputManager.fingerSpreadLeftPinky = 1f - (p_hand.m_spreads[4] * 0.5f + 0.5f);
|
||||
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);
|
||||
}
|
||||
else
|
||||
{
|
||||
_inputManager.fingerCurlRightThumb = p_hand.m_bends[0];
|
||||
_inputManager.fingerCurlRightIndex = p_hand.m_bends[1];
|
||||
_inputManager.fingerCurlRightMiddle = p_hand.m_bends[2];
|
||||
_inputManager.fingerCurlRightRing = p_hand.m_bends[3];
|
||||
_inputManager.fingerCurlRightPinky = p_hand.m_bends[4];
|
||||
_inputManager.fingerSpreadRightThumb = 1f - (p_hand.m_spreads[0] * 0.5f + 0.5f);
|
||||
_inputManager.fingerSpreadRightIndex = 1f - (p_hand.m_spreads[1] * 0.5f + 0.5f);
|
||||
_inputManager.fingerSpreadRightMiddle = 1f - (p_hand.m_spreads[2] * 0.5f + 0.5f);
|
||||
_inputManager.fingerSpreadRightRing = 1f - (p_hand.m_spreads[3] * 0.5f + 0.5f);
|
||||
_inputManager.fingerSpreadRightPinky = 1f - (p_hand.m_spreads[4] * 0.5f + 0.5f);
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -427,29 +432,29 @@ namespace ml_lme
|
|||
{
|
||||
if(p_left)
|
||||
{
|
||||
_inputManager.fingerCurlLeftThumb = 0f;
|
||||
_inputManager.fingerCurlLeftIndex = 0f;
|
||||
_inputManager.fingerCurlLeftMiddle = 0f;
|
||||
_inputManager.fingerCurlLeftRing = 0f;
|
||||
_inputManager.fingerCurlLeftPinky = 0f;
|
||||
_inputManager.fingerSpreadLeftThumb = 0.5f;
|
||||
_inputManager.fingerSpreadLeftIndex = 0.5f;
|
||||
_inputManager.fingerSpreadLeftMiddle = 0.5f;
|
||||
_inputManager.fingerSpreadLeftRing = 0.5f;
|
||||
_inputManager.fingerSpreadLeftPinky = 0.5f;
|
||||
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;
|
||||
}
|
||||
else
|
||||
{
|
||||
_inputManager.fingerCurlRightThumb = 0f;
|
||||
_inputManager.fingerCurlRightIndex = 0f;
|
||||
_inputManager.fingerCurlRightMiddle = 0f;
|
||||
_inputManager.fingerCurlRightRing = 0f;
|
||||
_inputManager.fingerCurlRightPinky = 0f;
|
||||
_inputManager.fingerSpreadRightThumb = 0.5f;
|
||||
_inputManager.fingerSpreadRightIndex = 0.5f;
|
||||
_inputManager.fingerSpreadRightMiddle = 0.5f;
|
||||
_inputManager.fingerSpreadRightRing = 0.5f;
|
||||
_inputManager.fingerSpreadRightPinky = 0.5f;
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -457,13 +462,31 @@ namespace ml_lme
|
|||
{
|
||||
if(p_left)
|
||||
{
|
||||
_inputManager.gestureLeft = 0f;
|
||||
_inputManager.gestureLeftRaw = 0f;
|
||||
base._inputManager.gestureLeft = 0f;
|
||||
base._inputManager.gestureLeftRaw = 0f;
|
||||
}
|
||||
else
|
||||
{
|
||||
_inputManager.gestureRight = 0f;
|
||||
_inputManager.gestureRightRaw = 0f;
|
||||
base._inputManager.gestureRight = 0f;
|
||||
base._inputManager.gestureRightRaw = 0f;
|
||||
}
|
||||
}
|
||||
|
||||
void ToggleHandRay(bool p_state, bool p_left)
|
||||
{
|
||||
if(p_left)
|
||||
{
|
||||
m_handRayLeft.enabled = p_state;
|
||||
((MonoBehaviour)m_handRayLeft).enabled = p_state;
|
||||
m_lineLeft.enabled = p_state;
|
||||
m_lineLeft.forceRenderingOff = !p_state;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_handRayRight.enabled = p_state;
|
||||
((MonoBehaviour)m_handRayRight).enabled = p_state;
|
||||
m_lineRight.enabled = p_state;
|
||||
m_lineRight.forceRenderingOff = !p_state;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -473,5 +496,11 @@ namespace ml_lme
|
|||
if(p_name == "ControlUseGripToGrab")
|
||||
m_gripToGrab = p_state;
|
||||
}
|
||||
|
||||
void SetGameFingersTracking(bool p_state)
|
||||
{
|
||||
base._inputManager.individualFingerTracking = p_state;
|
||||
IKSystem.Instance.FingerSystem.controlActive = base._inputManager.individualFingerTracking;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,10 +10,8 @@ namespace ml_lme
|
|||
class LeapTracked : MonoBehaviour
|
||||
{
|
||||
static readonly float[] ms_tposeMuscles = typeof(ABI_RC.Systems.IK.SubSystems.BodySystem).GetField("TPoseMuscles", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null) as float[];
|
||||
static readonly Quaternion ms_offsetLeft = Quaternion.Euler(0f, 0f, 270f);
|
||||
static readonly Quaternion ms_offsetRight = Quaternion.Euler(0f, 0f, 90f);
|
||||
static readonly Quaternion ms_offsetLeftDesktop = Quaternion.Euler(0f, 90f, 0f);
|
||||
static readonly Quaternion ms_offsetRightDesktop = Quaternion.Euler(0f, 270f, 0f);
|
||||
static readonly Quaternion ms_offsetLeft = Quaternion.Euler(0f, 90f, 0f);
|
||||
static readonly Quaternion ms_offsetRight = Quaternion.Euler(0f, 270f, 0f);
|
||||
|
||||
VRIK m_vrIK = null;
|
||||
Vector4 m_armsWeights = Vector2.zero;
|
||||
|
@ -256,11 +254,11 @@ namespace ml_lme
|
|||
|
||||
Transform l_hand = PlayerSetup.Instance._animator.GetBoneTransform(HumanBodyBones.LeftHand);
|
||||
if(l_hand != null)
|
||||
m_leftHandTarget.localRotation = (m_inVR ? ms_offsetLeft : ms_offsetLeftDesktop) * (PlayerSetup.Instance._avatar.transform.GetMatrix().inverse * l_hand.GetMatrix()).rotation;
|
||||
m_leftHandTarget.localRotation = ms_offsetLeft * (PlayerSetup.Instance._avatar.transform.GetMatrix().inverse * l_hand.GetMatrix()).rotation;
|
||||
|
||||
l_hand = PlayerSetup.Instance._animator.GetBoneTransform(HumanBodyBones.RightHand);
|
||||
if(l_hand != null)
|
||||
m_rightHandTarget.localRotation = (m_inVR ? ms_offsetRight : ms_offsetRightDesktop) * (PlayerSetup.Instance._avatar.transform.GetMatrix().inverse * l_hand.GetMatrix()).rotation;
|
||||
m_rightHandTarget.localRotation = ms_offsetRight * (PlayerSetup.Instance._avatar.transform.GetMatrix().inverse * l_hand.GetMatrix()).rotation;
|
||||
|
||||
if(m_vrIK == null)
|
||||
{
|
||||
|
@ -424,8 +422,6 @@ namespace ml_lme
|
|||
{
|
||||
if(p_pose.muscles.Length > p_index)
|
||||
p_pose.muscles[p_index] = p_value;
|
||||
|
||||
//p_pose.muscles[p_index] = (p_clamped ? Mathf.Lerp(ms_muscleLimits[p_index].x, ms_muscleLimits[p_index].y, p_value) : Mathf.LerpUnclamped(ms_muscleLimits[p_index].x, ms_muscleLimits[p_index].y, p_value));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@ namespace ml_lme
|
|||
HeadY,
|
||||
HeadZ,
|
||||
TrackElbows,
|
||||
Input,
|
||||
Interaction,
|
||||
Gestures,
|
||||
InteractThreadhold,
|
||||
GripThreadhold,
|
||||
|
@ -48,7 +48,7 @@ namespace ml_lme
|
|||
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 Input { 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;
|
||||
|
@ -66,7 +66,7 @@ namespace ml_lme
|
|||
static public event Action<bool> HeadAttachChange;
|
||||
static public event Action<Vector3> HeadOffsetChange;
|
||||
static public event Action<bool> TrackElbowsChange;
|
||||
static public event Action<bool> InputChange;
|
||||
static public event Action<bool> InteractionChange;
|
||||
static public event Action<bool> GesturesChange;
|
||||
static public event Action<float> InteractThreadholdChange;
|
||||
static public event Action<float> GripThreadholdChange;
|
||||
|
@ -93,7 +93,7 @@ namespace ml_lme
|
|||
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.Input.ToString(), Input),
|
||||
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)),
|
||||
|
@ -151,7 +151,7 @@ namespace ml_lme
|
|||
(int)ms_entries[(int)ModSetting.HeadZ].BoxedValue
|
||||
) * 0.01f;
|
||||
TrackElbows = (bool)ms_entries[(int)ModSetting.TrackElbows].BoxedValue;
|
||||
Input = (bool)ms_entries[(int)ModSetting.Input].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;
|
||||
|
@ -199,10 +199,10 @@ namespace ml_lme
|
|||
}
|
||||
break;
|
||||
|
||||
case ModSetting.Input:
|
||||
case ModSetting.Interaction:
|
||||
{
|
||||
Input = bool.Parse(p_value);
|
||||
InputChange?.Invoke(Input);
|
||||
Interaction = bool.Parse(p_value);
|
||||
InteractionChange?.Invoke(Interaction);
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
|
@ -395,7 +395,7 @@ function inp_dropdown_mod_lme(_obj, _callbackName) {
|
|||
<div class ="row-wrapper">
|
||||
<div class ="option-caption">Interaction input: </div>
|
||||
<div class ="option-input">
|
||||
<div id="Input" class ="inp_toggle no-scroll" data-current="false"></div>
|
||||
<div id="Interaction" class ="inp_toggle no-scroll" data-current="false"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue