/// <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 } }
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(); } } } }
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(); } } }