Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
                }
            }
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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));
        }
Ejemplo n.º 6
0
 private static bool SupportsPalm(IHandGrabber grabber,
                                  IHandGrabbable grabbable)
 {
     return(SupportsPalm(grabber, grabbable.SupportedGrabTypes));
 }