private void UpdateHandPose(ISnapper snapper, float fingersConstraint, float wristConstraint) { ISnapData snap = snapper.SnapData; if (snap == null) { FreeFingers(); FreeWrist(); return; } if (fingersConstraint > 0f && snap.HandPose != null) { UpdateFingers(snap.HandPose, snapper.SnappingFingers(), fingersConstraint); _areFingersFree = false; } else { FreeFingers(); } if (wristConstraint > 0f) { Pose wristLocalPose = GetWristPose(snap.WorldSnapPose, snapper.WristToSnapOffset); Pose wristPose = Transformer.ToTrackingPose(wristLocalPose); _syntheticHand.LockWristPose(wristPose, wristConstraint); _isWristFree = false; } else { FreeWrist(); } }
private void ConstrainingForce(ISnapper snapper, out float fingersConstraint, out float wristConstraint) { ISnapData snap = snapper.SnapData; fingersConstraint = wristConstraint = 0; if (snap == null) { return; } bool isSnapping = snapper.IsSnapping; if (isSnapping && snap.HandAlignment != HandAlignType.None) { fingersConstraint = snap.HandPose != null ? 1f : 0f; wristConstraint = 1f; } else if (snap.HandAlignment == HandAlignType.AttractOnHover) { fingersConstraint = snap.HandPose != null ? snapper.SnapStrength : 0f; wristConstraint = snapper.SnapStrength; } if (fingersConstraint >= 1f && !isSnapping) { fingersConstraint = 0; } if (wristConstraint >= 1f && !isSnapping) { wristConstraint = 0f; } }