private GestureDirection GetFingerEntryGestureDirection(FingerEntry fingerEntry, float minimumComponentValue) { GestureDirection gestureDirection = GestureDirection.None; Vector3 startEnd = fingerEntry.GetStartEndDifference(); if (startEnd.x > minimumComponentValue) { gestureDirection = GestureDirection.Right; } else if (startEnd.x < -minimumComponentValue) { gestureDirection = GestureDirection.Left; } else if (startEnd.y < -minimumComponentValue) { gestureDirection = GestureDirection.Down; } else if (startEnd.y > minimumComponentValue) { gestureDirection = GestureDirection.Up; } else if (startEnd.z > minimumComponentValue) { gestureDirection = GestureDirection.Forward; } else if (startEnd.z < -minimumComponentValue) { gestureDirection = GestureDirection.Back; } return(gestureDirection); }
private void UpdateFingerEntries(Frame frame) { List <int> fingerIDsUpdated = new List <int>(); foreach (Finger finger in frame.Fingers) { if (finger.IsValid) { if (!IsUsingHandSphereForFingerRemovalInUpdate || IsFingerAppropriateToTrack(finger)) { if (!FingerEntries.ContainsKey(finger.Id)) { FingerEntry entry = new FingerEntry(finger, _handParentObjectCurrentOffset); FingerEntries.Add(finger.Id, entry); //Debug.Log("Entry "+finger.Id+" added."); } else { FingerEntries[finger.Id].AddEntryData(finger, _handParentObjectCurrentOffset); } } fingerIDsUpdated.Add(finger.Id); } } // Each entry that was not updated should be removed from entries List <int> keysToRemove = new List <int>(); foreach (int id in FingerEntries.Keys) { if (!fingerIDsUpdated.Contains(id)) { keysToRemove.Add(id); //Debug.Log("Entry " + id + " removed."); } } foreach (int id in keysToRemove) { FingerEntries.Remove(id); } }
/// <summary> /// Checks if any of finger entries has tip position that moved for a given /// </summary> private void CheckFingerEntries() { foreach (KeyValuePair <int, FingerEntry> keyValuePair in FingerEntries) { FingerEntry entry = keyValuePair.Value; GestureDirection gestureDirection = GetFingerEntryGestureDirection(entry, FixedAmountFromDetectionOneDirection); if (gestureDirection != GestureDirection.None) { List <GestureDirection> gestureDirections = new List <GestureDirection>() { gestureDirection }; entry.Clear(); // search for any other that have the smaller minimum component value and quit the search foreach (KeyValuePair <int, FingerEntry> keyValuePair2 in FingerEntries) { if (keyValuePair.Key != keyValuePair2.Key) { GestureDirection gestureDirection2 = GetFingerEntryGestureDirection(keyValuePair2.Value, FixedAmountFromDetectionOneDirection - FixedAmountFromDetectionSecondDirectionDifference); if (gestureDirection2 != GestureDirection.None) { gestureDirections.Add(gestureDirection2); keyValuePair2.Value.Clear(); } } } Debug.Log("First gesture: " + gestureDirections[0].ToString() + " of " + gestureDirections.Count + " fingers."); return; } } }