public void applyBinding(string gesture, bool down)
        {
            var b = getBinding(gesture);

            if (b != null && b.KeyMouseEvent != null && b.KeyMouseEvent != "")
            {
                var key = b.KeyMouseEvent;
                var mod = "";
                if (b.KeyMouseEvent.Contains("+"))
                {
                    var tokens = key.Split('+');
                    if (tokens.Length > 1)
                    {
                        key = tokens[1];
                        mod = tokens[0];
                    }
                    else if (tokens.Length > 0)
                    {
                        key = tokens[0];
                    }
                }

                // First handle modifiers
                if (mod.Length > 0)
                {
                    MouseKeyboardSimulator.sendKeyEvent("Left" + mod, down);
                }

                // Handle mouse buttons
                if (key == "LMB")
                {
                    if (down || Fubi.getCurrentTime() - m_lastMouseClick > 1)
                    {
                        MouseKeyboardSimulator.sendMouseButton(MouseKeyboardSimulator.MouseButtonType.LEFT, down);
                        if (!down)
                        {
                            m_lastMouseClick = Fubi.getCurrentTime();
                        }
                    }
                }
                else if (key == "RMB")
                {
                    MouseKeyboardSimulator.sendMouseButton(MouseKeyboardSimulator.MouseButtonType.RIGHT, down);
                }
                else if (key == "MMB")
                {
                    MouseKeyboardSimulator.sendMouseButton(MouseKeyboardSimulator.MouseButtonType.MIDDLE, down);
                }
                else if (key == "X1MB" || key == "X2MB")
                {
                    MouseKeyboardSimulator.sendMouseButton(MouseKeyboardSimulator.MouseButtonType.X, down);
                }
                // Handle keys
                else if (key.Length > 0)
                {
                    MouseKeyboardSimulator.sendKeyEvent(key, down);
                }
            }
        }
示例#2
0
// AA: Removing this function disables click functionality so have not commented it out
    static public bool FubiGesture(Rect r, string name, GUIStyle style)
    {
        GUI.depth = -2;
        instance.m_gesturesDisplayed = true;

        if (instance.m_gestureSymbolDict.ContainsKey(name))
        {
            MultiTexture2D animation = instance.m_gestureSymbolDict[name];
            int            index     = (int)(Time.realtimeSinceStartup * animation.animationFps) % animation.Length;
            GUI.DrawTexture(r, animation[index], ScaleMode.ScaleToFit);
            if (GUI.Button(r, "", style))
            {
                return(true);
            }
            if (instance.m_disableCursorWithGestures && instance.m_gesturesDisplayedLastFrame &&
                rectContainsCursor(r) && clickRecognized())
            {
                return(true);
            }
        }

        if (Fubi.getCurrentTime() - instance.m_lastGesture > 0.8f)
        {
            uint userID = instance.m_currentUser;
            if (userID > 0)
            {
                FubiTrackingData[] userStates;
                if (Fubi.getCombinationRecognitionProgressOn(name, userID, out userStates, false) == FubiUtils.RecognitionResult.RECOGNIZED && userStates.Length > 0)
                {
                    double time = userStates[userStates.Length - 1].timeStamp;
                    // Check if gesture did not happen longer ago then 1 second
                    if (Fubi.getCurrentTime() - time < 1.0f)
                    {
                        instance.m_lastGesture = time;
                        // Reset all recognizers
                        Fubi.enableCombinationRecognition(FubiPredefinedGestures.Combinations.NUM_COMBINATIONS, userID, false);
                        return(true);
                    }
                }

                // Unsuccesfull recognition so start the recognizer for the next recognition
                Fubi.enableCombinationRecognition(name, userID, true);

                if (Fubi.recognizeGestureOn(name, userID) == FubiUtils.RecognitionResult.RECOGNIZED)
                {
                    instance.m_lastGesture = Fubi.getCurrentTime();
                    // Reset all recognizers
                    Fubi.enableCombinationRecognition(FubiPredefinedGestures.Combinations.NUM_COMBINATIONS, userID, false);
                    return(true);
                }
            }
        }

        return(false);
    }
示例#3
0
    static private bool clickRecognized()
    {
        bool click = false;

        if (Fubi.getCurrentTime() - instance.m_lastMouseClick > 0.5f)
        {
            uint userID = instance.m_currentUser;
            if (userID > 0)
            {
                // Check for mouse click as defined in xml
                FubiTrackingData[] userStates;
                if (Fubi.getCombinationRecognitionProgressOn("mouseClick", userID, out userStates, false) == FubiUtils.RecognitionResult.RECOGNIZED)
                {
                    if (userStates != null && userStates.Length > 0)
                    {
                        double clickTime = userStates[userStates.Length - 1].timeStamp;
                        // Check that click occured no longer ago than 1 second
                        if (Fubi.getCurrentTime() - clickTime < 1.0f)
                        {
                            click = true;
                            instance.m_lastMouseClick = clickTime;
                            // Reset all recognizers
                            Fubi.enableCombinationRecognition(FubiPredefinedGestures.Combinations.NUM_COMBINATIONS, userID, false);
                        }
                    }
                }

                if (!click)
                {
                    Fubi.enableCombinationRecognition("mouseClick", userID, true);
                }

                if (Fubi.recognizeGestureOn("mouseClick", userID) == FubiUtils.RecognitionResult.RECOGNIZED)
                {
                    Debug.Log("Mouse click recognized.");
                    click = true;
                    instance.m_lastMouseClick = Fubi.getCurrentTime();
                    // Reset all recognizers
                    Fubi.enableCombinationRecognition(FubiPredefinedGestures.Combinations.NUM_COMBINATIONS, userID, false);
                }
            }
        }
        return(click);
    }
示例#4
0
        private void updateStats()
        {
            //Check all users
            var numUsers = Fubi.getNumUsers();
            var numHands = Fubi.getNumHands();

            if (numUsers == 0 && numHands == 0)
            {
                warnLabel.Visibility = Visibility.Visible;
            }
            else
            {
                warnLabel.Visibility = Visibility.Hidden;
            }

            int currentIndex = 0;

            for (uint i = 0; i < numUsers + 1; i++)
            {
                var id = (i == numUsers && Fubi.isPlayingSkeletonData()) ? FubiUtils.PlaybackUserID : Fubi.getUserID(i);
                if (id > 0)
                {
                    // Not existent yet
                    if (currentIndex >= statsTree.Items.Count)
                    {
                        statsTree.Items.Add(new TvUser());
                        ((TvUser)statsTree.Items[currentIndex]).IsExpanded = true;
                    }
                    // Wrong type, i.e. TvHand instead of TvUser
                    if (statsTree.Items[currentIndex].GetType() != typeof(TvUser))
                    {
                        statsTree.Items[currentIndex] = new TvUser();
                        ((TvUser)statsTree.Items[currentIndex]).IsExpanded = true;
                    }
                    var tUser = (TvUser)statsTree.Items[currentIndex];
                    tUser.id = id;

                    // Update user defined combinations
                    var  numRecs    = Fubi.getNumUserDefinedCombinationRecognizers();
                    uint actualRecs = 0;
                    for (uint pc = 0; pc < numRecs; ++pc)
                    {
                        var name = Fubi.getUserDefinedCombinationRecognizerName(pc);
                        while (actualRecs >= tUser.Recs.Count)
                        {
                            tUser.Recs.Add(new TvRec());
                        }

                        var rec = tUser.Recs[(int)actualRecs];
                        rec.id   = pc;
                        rec.name = name;
                        uint numStates;
                        bool isInterrupted, isInTransition;
                        rec.currState      = Fubi.getCurrentCombinationRecognitionState(name, id, out numStates, out isInterrupted, out isInTransition) + 1;
                        rec.numStates      = numStates;
                        rec.isInterrupted  = isInterrupted;
                        rec.isInTransition = isInTransition;
                        if (Recognitions.ContainsKey(id) && Recognitions[id].ContainsKey(name) && Fubi.getCurrentTime() - Recognitions[id][name] < 2.0)
                        {
                            rec.bgColor = "LightGreen";
                        }
                        else
                        {
                            rec.bgColor = Color.Transparent.Name;
                        }
                        if (Hints.ContainsKey(id) && Hints[id].ContainsKey(name))
                        {
                            rec.hint = Hints[id][name];
                        }
                        actualRecs++;
                    }

                    while (tUser.Recs.Count > actualRecs)
                    {
                        tUser.Recs.RemoveAt(tUser.Recs.Count - 1);
                    }

                    ++currentIndex;
                }
            }

            for (uint i = 0; i < numHands + 1; i++)
            {
                var id = (i == numHands && Fubi.isPlayingSkeletonData()) ? FubiUtils.PlaybackHandID : Fubi.getHandID(i);
                if (id > 0)
                {
                    if (currentIndex >= statsTree.Items.Count)
                    {
                        statsTree.Items.Add(new TvHand());
                        ((TvHand)statsTree.Items[currentIndex]).IsExpanded = true;
                    }
                    // Wrong type, i.e. TvUser instead of TvUHand
                    if (statsTree.Items[currentIndex].GetType() != typeof(TvHand))
                    {
                        statsTree.Items[currentIndex] = new TvHand();
                        ((TvHand)statsTree.Items[currentIndex]).IsExpanded = true;
                    }
                    var tHand = (TvHand)statsTree.Items[currentIndex];
                    tHand.id = id;

                    // Update combinations
                    var  numRecs    = Fubi.getNumUserDefinedCombinationRecognizers();
                    uint actualRecs = 0;
                    for (uint pc = 0; pc < numRecs; ++pc)
                    {
                        var name = Fubi.getUserDefinedCombinationRecognizerName(pc);
                        while (actualRecs >= tHand.Recs.Count)
                        {
                            tHand.Recs.Add(new TvRec());
                        }

                        var rec = tHand.Recs[(int)actualRecs];
                        rec.id   = pc;
                        rec.name = name;
                        uint numStates;
                        bool isInterrupted, isInTransition;
                        rec.currState      = Fubi.getCurrentCombinationRecognitionStateForHand(name, id, out numStates, out isInterrupted, out isInTransition) + 1;
                        rec.numStates      = numStates;
                        rec.isInterrupted  = isInterrupted;
                        rec.isInTransition = isInTransition;
                        if (HandRecognitions.ContainsKey(id) && HandRecognitions[id].ContainsKey(name) && Fubi.getCurrentTime() - HandRecognitions[id][name] < 2.0)
                        {
                            rec.bgColor = "LightGreen";
                        }
                        else
                        {
                            rec.bgColor = Color.Transparent.Name;
                        }
                        if (HandHints.ContainsKey(id) && HandHints[id].ContainsKey(name))
                        {
                            rec.hint = HandHints[id][name];
                        }

                        actualRecs++;
                    }

                    while (tHand.Recs.Count > actualRecs)
                    {
                        tHand.Recs.RemoveAt(tHand.Recs.Count - 1);
                    }

                    ++currentIndex;
                }
            }

            while (statsTree.Items.Count > currentIndex)
            {
                statsTree.Items.RemoveAt(statsTree.Items.Count - 1);
            }
        }