Пример #1
0
        public void UpdateMouse(Point currentPoint)
        {
            switch (state)
            {
            case TrackingState.STARTING:
                if (warp.IsWarpReady())
                {
                    state      = TrackingState.RUNNING;
                    finalPoint = currentPoint;
                }
                break;

            case TrackingState.RUNNING:
                if (movement == Movement.HOTKEY)
                {
                    if (updatedAtLeastOnce && !hotKeyDown)
                    {
                        break;
                    }
                }
                Point warpPoint = warp.GetNextPoint(currentPoint);
                if (mode == Mode.EYEX_AND_SMARTNAV)
                {
                    warpPoint = limitToScreenBounds(warpPoint);
                    if (warpPoint != finalPoint)
                    {
                        finalPoint = warpPoint;
                        form.SetMousePosition(finalPoint);
                    }
                }
                else
                {
                    if (PrecisionGazeMouseForm.MousePosition != finalPoint)
                    {
                        state     = TrackingState.PAUSED;
                        pauseTime = System.DateTime.Now;
                    }
                    finalPoint = prec.GetNextPoint(warpPoint);
                    finalPoint = limitToScreenBounds(finalPoint);
                    form.SetMousePosition(finalPoint);
                }
                updatedAtLeastOnce = true;
                break;

            case TrackingState.PAUSED:
                // Keep pausing if the user is still moving the mouse
                if (lastCursorPosition != currentPoint)
                {
                    lastCursorPosition = currentPoint;
                    pauseTime          = System.DateTime.Now;
                }
                if (System.DateTime.Now.CompareTo(pauseTime.AddSeconds(1)) > 0)
                {
                    state = TrackingState.STARTING;
                }
                break;

            case TrackingState.ERROR:
                if (warp.IsStarted() && prec.IsStarted())
                {
                    state = TrackingState.STARTING;
                }
                break;
            }
        }
Пример #2
0
        //returns true if a new update is made, false otherwise
        public bool UpdateMouse(Point currentPoint)
        {
            bool ret = false;

            switch (state)
            {
            case TrackingState.STARTING:
                if (warp.IsWarpReady())
                {
                    state      = TrackingState.RUNNING;
                    finalPoint = currentPoint;
                }
                break;

            case TrackingState.RUNNING:
                if (movement == Movement.HOTKEY)
                {
                    if (updatedAtLeastOnce && !hotKeyDown)
                    {
                        break;
                    }
                }
                Point warpPoint = warp.GetNextPoint(currentPoint);
                if (mode == Mode.EYEX_AND_SMARTNAV || mode == Mode.TRACKIR_ONLY)     //warps in a split second (EyeX is 60 Hz)
                {
                    if (warpPoint != finalPoint)
                    {
                        finalPoint = warpPoint;
                        form.SetMousePosition(finalPoint);
                        ret = true;
                    }
                }
                else     //eyex only, this one takes about a 3 second dwell for it to warp
                         //as well eyeX and TrackIR which is with warp + head movement
                {
                    if (PrecisionGazeMouseForm.MousePosition != finalPoint)
                    {
                        state     = TrackingState.PAUSED;
                        pauseTime = System.DateTime.Now;
                    }
                    finalPoint = prec.GetNextPoint(warpPoint);
                    form.SetMousePosition(finalPoint);
                    ret = true;
                }
                updatedAtLeastOnce = true;
                break;

            case TrackingState.PAUSED:
                // Keep pausing if the user is still moving the mouse
                if (lastCursorPosition != currentPoint)
                {
                    lastCursorPosition = currentPoint;
                    pauseTime          = System.DateTime.Now;
                }
                if (System.DateTime.Now.CompareTo(pauseTime.AddSeconds(1)) > 0)
                {
                    state = TrackingState.STARTING;
                }
                break;

            case TrackingState.ERROR:
                if (warp.IsStarted() && prec.IsStarted())
                {
                    state = TrackingState.STARTING;
                }
                break;
            }

            if (previousState != state)
            {
                Logger.WriteVar(nameof(state), state);
                previousState = state;
            }
            return(ret);
        }