@@ -525,6 +525,26 @@ public void UpdateDeviceInput(IVRModuleDeviceStateRW state, bool isLeft)
525525 state . SetButtonPress ( VRModuleRawButton . GestureIndexPinch , pinched ) ;
526526 state . SetButtonTouch ( VRModuleRawButton . GestureIndexPinch , pinched ) ;
527527 state . SetAxisValue ( VRModuleRawAxis . Trigger , pinch . pinch . strength ) ;
528+
529+ var indexCurl = GetFingerCurl ( state , HandJointName . IndexTip ) ;
530+ var middleCurl = GetFingerCurl ( state , HandJointName . MiddleTip ) ;
531+ var ringCurl = GetFingerCurl ( state , HandJointName . MiddleTip ) ;
532+ var pinkyCurl = GetFingerCurl ( state , HandJointName . PinkyTip ) ;
533+ state . SetAxisValue ( VRModuleRawAxis . IndexCurl , indexCurl ) ;
534+ state . SetAxisValue ( VRModuleRawAxis . MiddleCurl , middleCurl ) ;
535+ state . SetAxisValue ( VRModuleRawAxis . RingCurl , ringCurl ) ;
536+ state . SetAxisValue ( VRModuleRawAxis . PinkyCurl , pinkyCurl ) ;
537+ state . SetAxisValue ( VRModuleRawAxis . CapSenseGrip , ( indexCurl + middleCurl + ringCurl + pinkyCurl ) * 0.25f ) ;
538+ state . SetButtonPress ( VRModuleRawButton . Grip , indexCurl > 0.75f && middleCurl > 0.75f && ringCurl > 0.75f && pinkyCurl > 0.75f ) ;
539+ state . SetButtonTouch ( VRModuleRawButton . Grip , indexCurl > 0.5f && middleCurl > 0.5f && ringCurl > 0.5f && pinkyCurl > 0.5f ) ;
540+ }
541+
542+ private float GetFingerCurl ( IVRModuleDeviceStateRW state , HandJointName finger )
543+ {
544+ var palmDir = state . pose . forward ;
545+ var fingerDir = state . handJoints [ finger ] . pose . forward ;
546+ var angle = Vector3 . SignedAngle ( palmDir , fingerDir , state . handJoints [ finger ] . pose . right ) ;
547+ return Mathf . InverseLerp ( 0f , 180f , angle ) ;
528548 }
529549
530550 private static void InitializeHandTrackerInfo ( ref WVR_HandTrackerInfo_t handTrackerInfo , ref WVR_HandJoint [ ] jointMappingArray , ref ulong [ ] jointValidFlagArray , uint count )
0 commit comments