public static float ComputeHandGrabScore(IHandGrabber grabber, IHandGrabbable grabbable, out GrabTypeFlags handGrabTypes) { HandGrabAPI api = grabber.HandGrabApi; handGrabTypes = GrabTypeFlags.None; float handGrabScore = 0f; if (SupportsPinch(grabber, grabbable)) { float pinchStrength = api.GetHandPinchScore(grabbable.PinchGrabRules, false); if (pinchStrength > handGrabScore) { handGrabScore = pinchStrength; handGrabTypes = GrabTypeFlags.Pinch; } } if (SupportsPalm(grabber, grabbable)) { float palmStrength = api.GetHandPalmScore(grabbable.PalmGrabRules, false); if (palmStrength > handGrabScore) { handGrabScore = palmStrength; handGrabTypes = GrabTypeFlags.Palm; } } return(handGrabScore); }
public static HandFingerFlags GrabbingFingers(IHandGrabber grabber, IHandGrabbable grabbable) { HandGrabAPI api = grabber.HandGrabApi; if (grabbable == null) { return(HandFingerFlags.None); } HandFingerFlags fingers = HandFingerFlags.None; if (SupportsPinch(grabber, grabbable)) { HandFingerFlags pinchingFingers = api.HandPinchGrabbingFingers(); grabbable.PinchGrabRules.StripIrrelevant(ref pinchingFingers); fingers = fingers | pinchingFingers; } if (SupportsPalm(grabber, grabbable)) { HandFingerFlags grabbingFingers = api.HandPalmGrabbingFingers(); grabbable.PalmGrabRules.StripIrrelevant(ref grabbingFingers); fingers = fingers | grabbingFingers; } return(fingers); }
public static void StoreGrabData(IHandGrabber grabber, IHandGrabbable grabbable, ref HandGrabbableData cache) { HandGrabAPI api = grabber.HandGrabApi; cache.SupportedGrabTypes = GrabTypeFlags.None; if (SupportsPinch(grabber, grabbable)) { HandFingerFlags pinchFingers = api.HandPinchGrabbingFingers(); if (api.IsSustainingGrab(grabbable.PinchGrabRules, pinchFingers)) { cache.SupportedGrabTypes |= GrabTypeFlags.Pinch; cache.PinchGrabRules = new GrabbingRule(pinchFingers, grabbable.PinchGrabRules); } } if (SupportsPalm(grabber, grabbable)) { HandFingerFlags palmFingers = api.HandPalmGrabbingFingers(); if (api.IsSustainingGrab(grabbable.PalmGrabRules, palmFingers)) { cache.SupportedGrabTypes |= GrabTypeFlags.Palm; cache.PalmGrabRules = new GrabbingRule(palmFingers, grabbable.PalmGrabRules); } } }
public static bool ComputeShouldSelect(IHandGrabber grabber, IHandGrabbable grabbable, out GrabTypeFlags selectingGrabTypes) { if (grabbable == null) { selectingGrabTypes = GrabTypeFlags.None; return(false); } HandGrabAPI api = grabber.HandGrabApi; selectingGrabTypes = GrabTypeFlags.None; if (SupportsPinch(grabber, grabbable) && api.IsHandSelectPinchFingersChanged(grabbable.PinchGrabRules)) { selectingGrabTypes |= GrabTypeFlags.Pinch; } if (SupportsPalm(grabber, grabbable) && api.IsHandSelectPalmFingersChanged(grabbable.PalmGrabRules)) { selectingGrabTypes |= GrabTypeFlags.Palm; } return(selectingGrabTypes != GrabTypeFlags.None); }
public void InjectAllHandGrabInteractor(HandGrabAPI handGrabApi, IHand hand, Rigidbody rigidbody, GrabTypeFlags supportedGrabTypes, HandWristOffset gripPoint) { InjectHandGrabApi(handGrabApi); InjectHand(hand); InjectRigidbody(rigidbody); InjectSupportedGrabTypes(supportedGrabTypes); InjectGripPoint(gripPoint); }
public static bool ComputeShouldUnselect(IHandGrabber grabber, IHandGrabbable grabbable) { HandGrabAPI api = grabber.HandGrabApi; HandFingerFlags pinchFingers = api.HandPinchGrabbingFingers(); HandFingerFlags palmFingers = api.HandPalmGrabbingFingers(); if (grabbable.SupportedGrabTypes == GrabTypeFlags.None) { if (!api.IsSustainingGrab(GrabbingRule.FullGrab, pinchFingers) && !api.IsSustainingGrab(GrabbingRule.FullGrab, palmFingers)) { return(true); } return(false); } bool pinchHolding = false; bool palmHolding = false; bool pinchReleased = false; bool palmReleased = false; if (SupportsPinch(grabber, grabbable.SupportedGrabTypes)) { pinchHolding = api.IsSustainingGrab(grabbable.PinchGrabRules, pinchFingers); if (api.IsHandUnselectPinchFingersChanged(grabbable.PinchGrabRules)) { pinchReleased = true; } } if (SupportsPalm(grabber, grabbable.SupportedGrabTypes)) { palmHolding = api.IsSustainingGrab(grabbable.PalmGrabRules, palmFingers); if (api.IsHandUnselectPalmFingersChanged(grabbable.PalmGrabRules)) { palmReleased = true; } } return(!pinchHolding && !palmHolding && (pinchReleased || palmReleased)); }
protected virtual void Reset() { _hand = this.GetComponentInParent<IHand>() as MonoBehaviour; _handGrabApi = this.GetComponentInParent<HandGrabAPI>(); }
public void InjectHandGrabApi(HandGrabAPI handGrabAPI) { _handGrabApi = handGrabAPI; }
public void InjectHandGrabAPI(HandGrabAPI handGrabApi) { _handGrabApi = handGrabApi; }
public void InjectAllHandPinchOffset(IHand hand, HandGrabAPI handGrabApi) { InjectHand(hand); InjectHandGrabAPI(handGrabApi); }