mirror of
https://github.com/hanetzer/sdraw_mods_cvr.git
synced 2025-09-03 10:29:22 +00:00
Fixed local finger tracking with Index controllers
This commit is contained in:
parent
5aef3ab83c
commit
ab7f66b730
4 changed files with 60 additions and 42 deletions
|
@ -8,5 +8,5 @@ Merged set of MelonLoader mods for ChilloutVR.
|
|||
| Desktop Head Tracking | ml_dht | 1.1.0 | Yes, pending update | Working |
|
||||
| Desktop Reticle Switch | ml_drs | 1.0.0 | Yes | Working |
|
||||
| Four Point Tracking | ml_fpt | 1.0.9 | Yes | Working |
|
||||
| Leap Motion Extension | ml_lme | 1.2.6 | Yes, pending update | Working |
|
||||
| Leap Motion Extension | ml_lme | 1.2.7 | Yes, pending update | Working |
|
||||
| Server Connection Info | ml_sci | 1.0.2 | Yes | Working |
|
||||
|
|
|
@ -11,11 +11,13 @@ 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 FieldInfo ms_indexGestureToggle = typeof(InputModuleSteamVR).GetField("_steamVrIndexGestureToggleValue", BindingFlags.Instance | BindingFlags.NonPublic);
|
||||
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);
|
||||
|
||||
InputModuleSteamVR m_steamVrModule = null;
|
||||
IndexIK m_indexIK = null;
|
||||
VRIK m_vrIK = null;
|
||||
Vector2 m_armsWeights = Vector2.zero;
|
||||
|
@ -38,6 +40,7 @@ namespace ml_lme
|
|||
void Start()
|
||||
{
|
||||
m_indexIK = this.GetComponent<IndexIK>();
|
||||
m_steamVrModule = CVRInputManager.Instance.GetComponent<InputModuleSteamVR>();
|
||||
|
||||
if(m_leftHand != null)
|
||||
{
|
||||
|
@ -115,7 +118,7 @@ namespace ml_lme
|
|||
|
||||
public void UpdateTracking(GestureMatcher.GesturesData p_gesturesData)
|
||||
{
|
||||
if(m_enabled && (m_indexIK != null))
|
||||
if(m_enabled)
|
||||
{
|
||||
if((m_leftIK != null) && (m_rightIK != null))
|
||||
{
|
||||
|
@ -125,41 +128,8 @@ namespace ml_lme
|
|||
m_rightIK.solver.IKRotationWeight = Mathf.Lerp(m_rightIK.solver.IKRotationWeight, (p_gesturesData.m_handsPresenses[1] && !m_fingersOnly) ? 1f : 0f, 0.25f);
|
||||
}
|
||||
|
||||
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];
|
||||
}
|
||||
}
|
||||
if(!Utils.AreKnucklesInUse())
|
||||
UpdateFingers(p_gesturesData);
|
||||
|
||||
if((m_vrIK != null) && !m_fingersOnly)
|
||||
{
|
||||
|
@ -196,6 +166,42 @@ namespace ml_lme
|
|||
}
|
||||
}
|
||||
|
||||
public void UpdateFingers(GestureMatcher.GesturesData p_data)
|
||||
{
|
||||
if(m_enabled && (m_indexIK != null) && (CVRInputManager.Instance != null))
|
||||
{
|
||||
CVRInputManager.Instance.individualFingerTracking = true;
|
||||
|
||||
if(p_data.m_handsPresenses[0])
|
||||
{
|
||||
m_indexIK.leftThumbCurl = p_data.m_leftFingersBends[0];
|
||||
m_indexIK.leftIndexCurl = p_data.m_leftFingersBends[1];
|
||||
m_indexIK.leftMiddleCurl = p_data.m_leftFingersBends[2];
|
||||
m_indexIK.leftRingCurl = p_data.m_leftFingersBends[3];
|
||||
m_indexIK.leftPinkyCurl = p_data.m_leftFingersBends[4];
|
||||
CVRInputManager.Instance.fingerCurlLeftThumb = p_data.m_leftFingersBends[0];
|
||||
CVRInputManager.Instance.fingerCurlLeftIndex = p_data.m_leftFingersBends[1];
|
||||
CVRInputManager.Instance.fingerCurlLeftMiddle = p_data.m_leftFingersBends[2];
|
||||
CVRInputManager.Instance.fingerCurlLeftRing = p_data.m_leftFingersBends[3];
|
||||
CVRInputManager.Instance.fingerCurlLeftPinky = p_data.m_leftFingersBends[4];
|
||||
}
|
||||
|
||||
if(p_data.m_handsPresenses[1])
|
||||
{
|
||||
m_indexIK.rightThumbCurl = p_data.m_rightFingersBends[0];
|
||||
m_indexIK.rightIndexCurl = p_data.m_rightFingersBends[1];
|
||||
m_indexIK.rightMiddleCurl = p_data.m_rightFingersBends[2];
|
||||
m_indexIK.rightRingCurl = p_data.m_rightFingersBends[3];
|
||||
m_indexIK.rightPinkyCurl = p_data.m_rightFingersBends[4];
|
||||
CVRInputManager.Instance.fingerCurlRightThumb = p_data.m_rightFingersBends[0];
|
||||
CVRInputManager.Instance.fingerCurlRightIndex = p_data.m_rightFingersBends[1];
|
||||
CVRInputManager.Instance.fingerCurlRightMiddle = p_data.m_rightFingersBends[2];
|
||||
CVRInputManager.Instance.fingerCurlRightRing = p_data.m_rightFingersBends[3];
|
||||
CVRInputManager.Instance.fingerCurlRightPinky = p_data.m_rightFingersBends[4];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void OnAvatarClear()
|
||||
{
|
||||
m_vrIK = null;
|
||||
|
@ -358,8 +364,8 @@ namespace ml_lme
|
|||
{
|
||||
if(m_indexIK != null)
|
||||
{
|
||||
m_indexIK.activeControl = (m_enabled || Utils.AreKnucklesInUse());
|
||||
CVRInputManager.Instance.individualFingerTracking = (m_enabled || Utils.AreKnucklesInUse());
|
||||
m_indexIK.activeControl = (m_enabled || (PlayerSetup.Instance._inVr && Utils.AreKnucklesInUse()));
|
||||
CVRInputManager.Instance.individualFingerTracking = (m_enabled || (PlayerSetup.Instance._inVr && Utils.AreKnucklesInUse() && !(bool)ms_indexGestureToggle.GetValue(m_steamVrModule)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -57,6 +57,11 @@ namespace ml_lme
|
|||
null,
|
||||
new HarmonyLib.HarmonyMethod(typeof(LeapMotionExtension).GetMethod(nameof(OnSetupAvatar_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
|
||||
);
|
||||
HarmonyInstance.Patch(
|
||||
typeof(PlayerSetup).GetMethod("GetGesturesFromControllers", BindingFlags.Instance | BindingFlags.NonPublic),
|
||||
null,
|
||||
new HarmonyLib.HarmonyMethod(typeof(LeapMotionExtension).GetMethod(nameof(OnGetGesturesFromControllers_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
|
||||
);
|
||||
|
||||
|
||||
MelonLoader.MelonCoroutines.Start(CreateTrackingObjects());
|
||||
|
@ -356,5 +361,12 @@ namespace ml_lme
|
|||
MelonLoader.MelonLogger.Error(e);
|
||||
}
|
||||
}
|
||||
|
||||
static void OnGetGesturesFromControllers_Postfix() => ms_instance?.OnGetGesturesFromControllers();
|
||||
void OnGetGesturesFromControllers()
|
||||
{
|
||||
if(Settings.Enabled && Utils.AreKnucklesInUse() && (m_leapTracked != null))
|
||||
m_leapTracked.UpdateFingers(m_gesturesData);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
using System.Reflection;
|
||||
|
||||
[assembly: AssemblyTitle("LeapMotionExtension")]
|
||||
[assembly: AssemblyVersion("1.2.6")]
|
||||
[assembly: AssemblyFileVersion("1.2.6")]
|
||||
[assembly: AssemblyVersion("1.2.7")]
|
||||
[assembly: AssemblyFileVersion("1.2.7")]
|
||||
|
||||
[assembly: MelonLoader.MelonInfo(typeof(ml_lme.LeapMotionExtension), "LeapMotionExtension", "1.2.6", "SDraw", "https://github.com/SDraw/ml_mods_cvr")]
|
||||
[assembly: MelonLoader.MelonInfo(typeof(ml_lme.LeapMotionExtension), "LeapMotionExtension", "1.2.7", "SDraw", "https://github.com/SDraw/ml_mods_cvr")]
|
||||
[assembly: MelonLoader.MelonGame(null, "ChilloutVR")]
|
||||
[assembly: MelonLoader.MelonPlatform(MelonLoader.MelonPlatformAttribute.CompatiblePlatforms.WINDOWS_X64)]
|
||||
[assembly: MelonLoader.MelonPlatformDomain(MelonLoader.MelonPlatformDomainAttribute.CompatibleDomains.MONO)]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue