public static float Distance(this Rectangle r, Vector2 point) { if (Utils.FloatIntersect((float)r.Left, (float)r.Top, (float)r.Width, (float)r.Height, point.X, point.Y, 0.0f, 0.0f)) { return(0.0f); } if ((double)point.X >= (double)r.Left && (double)point.X <= (double)r.Right) { if ((double)point.Y < (double)r.Top) { return((float)r.Top - point.Y); } return(point.Y - (float)r.Bottom); } if ((double)point.Y >= (double)r.Top && (double)point.Y <= (double)r.Bottom) { if ((double)point.X < (double)r.Left) { return((float)r.Left - point.X); } return(point.X - (float)r.Right); } if ((double)point.X < (double)r.Left) { if ((double)point.Y < (double)r.Top) { return(Vector2.Distance(point, Utils.TopLeft(r))); } return(Vector2.Distance(point, Utils.BottomLeft(r))); } if ((double)point.Y < (double)r.Top) { return(Vector2.Distance(point, Utils.TopRight(r))); } return(Vector2.Distance(point, Utils.BottomRight(r))); }