Ejemplo n.º 1
0
        /// <summary>
        /// Converts a Leap.Finger.FingerType enum type to a FingerFilter enum.
        ///
        /// There are two possible failure states: being fed an enum as integer that is out of range (you have to try hard to do this), and
        /// trying to convert a FingerFilter.none to Leap.Finger.FingerType, as FingerType has no equivalent.
        ///
        /// Upon failure, the method will throw a System.NotSupported exception with details about the failure.
        /// </summary>
        /// <param name="finger">Finger filter to convert.</param>
        /// <returns></returns>
        public static Finger.FingerType FingerTypeFromFingerFilter(FingerFilter finger)
        {
            switch (finger)
            {
            case FingerFilter.none:
                throw new System.NotSupportedException("Error in HandProperties.cs: FingerFilter.none cannot map to Leap.Finger.FingerType. No equivalent exists.");
                return(Finger.FingerType.TYPE_THUMB);    // all thumbs, lol

            case FingerFilter.thumb:
                return(Finger.FingerType.TYPE_THUMB);

            case FingerFilter.index:
                return(Finger.FingerType.TYPE_INDEX);

            case FingerFilter.middle:
                return(Finger.FingerType.TYPE_MIDDLE);

            case FingerFilter.ring:
                return(Finger.FingerType.TYPE_RING);

            case FingerFilter.pinky:
                return(Finger.FingerType.TYPE_PINKY);

            default:
                throw new System.NotSupportedException("Error in HandProperties.cs: An out of bounds enum value " + ((int)finger).ToString() + " was supplied.");
                return(Finger.FingerType.TYPE_THUMB);    // all thumbs, lol
            }
        }
Ejemplo n.º 2
0
    void OnFingertipTriggerExit(FingertipData fingertipData)
    {
        for (int i = 0; i < FingertipsInCollisionBounds.Count; i++)
        {
            int knownID     = FingertipsInCollisionBounds[i].GetInstanceID();
            int candidateID = fingertipData.Owner.GetInstanceID();

            FingerFilter knownFilter     = FingerTipFilters[i];
            FingerFilter candidateFilter = fingertipData.finger;

            if (knownID == candidateID)
            {
                FingertipsInCollisionBounds.RemoveAt(i);
                FingerTipFilters.RemoveAt(i);
                fingerDots.RemoveAt(i);

                if (FingertipsInCollisionBounds.Count == 0)
                {
                    CancelHover();
                }
            }
        }
    }
Ejemplo n.º 3
0
    void OnFingertipTriggerEnter(FingertipData fingertipData)
    {
        bool acceptFingertip = false;

        if ((fingertipData.finger == FingerFilter.index) && (RespondToIndex))
        {
            acceptFingertip = true;
        }
        if ((fingertipData.finger == FingerFilter.middle) && (RespondToMiddle))
        {
            acceptFingertip = true;
        }
        if ((fingertipData.finger == FingerFilter.thumb) && (RespondToThumb))
        {
            acceptFingertip = true;
        }

        if (acceptFingertip)
        {
            if (FingertipsInCollisionBounds.Count == 0)
            {
                HandModel = fingertipData.HandModel;
            }
            else
            {
                // check incoming hand model to make sure it matches the existing one.
                int oldHandModelID = HandModel.GetInstanceID();
                int newHandModelID = fingertipData.HandModel.GetInstanceID();
                if (oldHandModelID != newHandModelID)
                {
                    Debug.Log("Tried using two different hands at once to push a button. Ignoring second hand.");
                    return;
                }
                else
                {
                    int          candidateID     = fingertipData.Owner.GetInstanceID();
                    FingerFilter candidateFilter = fingertipData.finger;

                    for (int i = 0; i < FingertipsInCollisionBounds.Count; i++)
                    {
                        FingerFilter knownFilter = FingerTipFilters[i];
                        int          knownID     = FingertipsInCollisionBounds[i].GetInstanceID();

                        if ((knownID == candidateID) || (knownFilter == candidateFilter))
                        {
                            Debug.Log("Fingertip exists already, why wasn't it removed?");
                            return;
                        }
                    }
                }
            }

            FingertipsInCollisionBounds.Add(fingertipData.Owner);
            FingerTipFilters.Add(fingertipData.finger);
            fingerDots.Add(0);

            if (FingertipsInCollisionBounds.Count == 1)
            {
                Hover();
            }
        }
    }