private OutFlags CalcOutFlags(float x1, float y1) { OutFlags outFlags = OutFlags.None; if ((double)x1 < (double)this.Left) { outFlags |= OutFlags.Left; } else if ((double)x1 > (double)this.Right) { outFlags |= OutFlags.Right; } if ((double)y1 < (double)this.Top) { outFlags |= OutFlags.Top; } else if ((double)y1 > (double)this.Bottom) { outFlags |= OutFlags.Bottom; } return(outFlags); }
public bool ClipLine(Vector2 point1, Vector2 point2, out Vector2 new1, out Vector2 new2) { new1 = point1; new2 = point2; float num1 = point1.X; float num2 = point1.Y; float num3 = point2.X; float num4 = point2.Y; float x = this.x; float y = this.y; float num5 = this.x + this.height; float num6 = this.y + this.height; OutFlags outFlags1 = this.CalcOutFlags(num1, num2); OutFlags outFlags2 = this.CalcOutFlags(num3, num4); while ((outFlags1 | outFlags2) != OutFlags.None) { if ((outFlags1 & outFlags2) != OutFlags.None) { return(false); } float num7 = num3 - num1; float num8 = num4 - num2; if (outFlags1 != OutFlags.None) { if ((outFlags1 & OutFlags.Left) == OutFlags.Left && (double)num7 != 0.0) { num2 += (x - num1) * num8 / num7; num1 = x; } else if ((outFlags1 & OutFlags.Right) == OutFlags.Right && (double)num7 != 0.0) { num2 += (num5 - num1) * num8 / num7; num1 = num5; } else if ((outFlags1 & OutFlags.Bottom) == OutFlags.Bottom && (double)num8 != 0.0) { num1 += (num6 - num2) * num7 / num8; num2 = num6; } else if ((outFlags1 & OutFlags.Top) == OutFlags.Top && (double)num8 != 0.0) { num1 += (y - num2) * num7 / num8; num2 = y; } outFlags1 = this.CalcOutFlags(num1, num2); } else if (outFlags2 != OutFlags.None) { if ((outFlags2 & OutFlags.Left) == OutFlags.Left && (double)num7 != 0.0) { num4 += (x - num3) * num8 / num7; num3 = x; } else if ((outFlags2 & OutFlags.Right) == OutFlags.Right && (double)num7 != 0.0) { num4 += (num5 - num3) * num8 / num7; num3 = num5; } else if ((outFlags2 & OutFlags.Bottom) == OutFlags.Bottom && (double)num8 != 0.0) { num3 += (num6 - num4) * num7 / num8; num4 = num6; } else if ((outFlags2 & OutFlags.Top) == OutFlags.Top && (double)num8 != 0.0) { num3 += (y - num4) * num7 / num8; num4 = y; } outFlags2 = this.CalcOutFlags(num3, num4); } } new1 = new Vector2(num1, num2); new2 = new Vector2(num3, num4); return(true); }