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); }
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); }
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); }
public ScreenSide DetermineHorizontalSide(Int32Point Point, float Sensitivity = 0.1f) => DetermineHorizontalSide(this, Point, Sensitivity);
public Point Clamp(Int32Point Point) => Contains(Point) ? Point : new Point(Clamp(Point.X, Left, Right), Clamp(Point.Y, Bottom, Top));
public bool Contains(Int32Point Point) => Contains(Point, Left, Right, Bottom, Top);
public static bool Contains(Int32Point Point, int Left, int Right, int Bottom, int Top) => ContainsHorizontal(Point, Left, Right) && ContainsVertical(Point, Bottom, Top);
public bool ContainsVertical(Int32Point Point) => ContainsVertical(Point, Bottom, Top);
public static bool ContainsVertical(Int32Point Point, int Bottom, int Top) => Contains(Point.Y, Bottom, Top);
public bool ContainsHorizontal(Int32Point Point) => ContainsHorizontal(Point, Left, Right);
public static bool ContainsHorizontal(Int32Point Point, int Left, int Right) => Contains(Point.X, Left, Right);
internal static extern bool GetCursorPos(ref Int32Point Pt);