Пример #1
0
    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);
    }
Пример #2
0
    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);
        }
    }
Пример #3
0
    /// <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;
            }
        }
    }