public void MainLoop()
        {
            Debug.WriteLine("Entered Loop.");
            while (LoopActive)
            {
                Int32Point MousePoint = User32.Cursor;

                //Debug.WriteLine($"AR: {ActiveResolution}\tMouse: {MousePoint}");
                if (!SafeResolution.Contains(MousePoint))
                {
                    Debug.WriteLine($"{MousePoint} exceeds {SafeResolution}");
                    Debug.WriteLine($"{MousePoint} => {ActiveResolution.Clamp(MousePoint)}");
                    Int32Point NewPoint;
                    if (BoundsClamp)
                    {
                        Debug.WriteLine("\tBouncing...");
                        NewPoint = Bounce(MousePoint, BounceFactor, Sensitivity);
                    }
                    else
                    {
                        Debug.WriteLine("\tMirroring...");
                        NewPoint = Flip(MousePoint, BounceFactor, Sensitivity);
                    }

                    User32.Cursor = NewPoint;
                }
            }
            Debug.WriteLine("Exited Loop.");
        }
        public Int32Point Flip(Int32Point Point, int Factor, float Sensitivity)
        {
            // ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault
            switch (ActiveResolution.DetermineHorizontalSide(Point, Sensitivity))
            {
            case ScreenSide.Left:
                Point.X = ActiveResolution.Right - Factor;
                Debug.WriteLine("\t\t@Left; Move Right");
                break;

            case ScreenSide.Right:
                Point.X = ActiveResolution.Left + Factor;
                Debug.WriteLine("\t\t@Right; Move Left");
                break;
            }

            // ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault
            switch (ActiveResolution.DetermineVerticalSide(Point, Sensitivity))
            {
            case ScreenSide.Bottom:
                Point.Y = ActiveResolution.Top - Factor;
                Debug.WriteLine("\t\t@Bottom; Move Top");
                break;

            case ScreenSide.Top:
                Point.Y = ActiveResolution.Bottom + Factor;
                Debug.WriteLine("\t\t@Top; Move Bottom");
                break;
            }

            return(Point);
        }
Exemplo n.º 3
0
        public static ScreenSide DetermineVerticalSide(Resolution Res, Int32Point Point, float Sensitivity = 0.1f)
        {
            float RelativeY = (Point.Y - Res.Bottom) / (float)Res.Height;

            if (RelativeY <= Sensitivity)
            {
                return(ScreenSide.Bottom);
            }

            // ReSharper disable once ConvertIfStatementToReturnStatement
            if (RelativeY >= 1.0f - Sensitivity)
            {
                return(ScreenSide.Top);
            }

            return(ScreenSide.None);
        }
Exemplo n.º 4
0
        public static ScreenSide DetermineHorizontalSide(Resolution Res, Int32Point Point, float Sensitivity = 0.1f)
        {
            float RelativeX = (Point.X - Res.Left) / (float)Res.Width;

            if (RelativeX <= Sensitivity)
            {
                return(ScreenSide.Left);
            }

            // ReSharper disable once ConvertIfStatementToReturnStatement
            if (RelativeX >= 1.0f - Sensitivity)
            {
                return(ScreenSide.Right);
            }

            return(ScreenSide.None);
        }
Exemplo n.º 5
0
 public ScreenSide DetermineHorizontalSide(Int32Point Point, float Sensitivity = 0.1f) => DetermineHorizontalSide(this, Point, Sensitivity);
Exemplo n.º 6
0
 public Point Clamp(Int32Point Point) => Contains(Point) ? Point : new Point(Clamp(Point.X, Left, Right), Clamp(Point.Y, Bottom, Top));
Exemplo n.º 7
0
 public bool Contains(Int32Point Point) => Contains(Point, Left, Right, Bottom, Top);
Exemplo n.º 8
0
 public static bool Contains(Int32Point Point, int Left, int Right, int Bottom, int Top) => ContainsHorizontal(Point, Left, Right) && ContainsVertical(Point, Bottom, Top);
Exemplo n.º 9
0
 public bool ContainsVertical(Int32Point Point) => ContainsVertical(Point, Bottom, Top);
Exemplo n.º 10
0
 public static bool ContainsVertical(Int32Point Point, int Bottom, int Top) => Contains(Point.Y, Bottom, Top);
Exemplo n.º 11
0
 public bool ContainsHorizontal(Int32Point Point) => ContainsHorizontal(Point, Left, Right);
Exemplo n.º 12
0
 public static bool ContainsHorizontal(Int32Point Point, int Left, int Right) => Contains(Point.X, Left, Right);
Exemplo n.º 13
0
 internal static extern bool GetCursorPos(ref Int32Point Pt);