using System; using System.Globalization; // This file is part of the ANX.Framework created by the // "ANX.Framework developer group" and released under the Ms-PL license. // For details see: http://anxframework.codeplex.com/license namespace ANX.Framework { [ANX.Framework.NonXNA.Development.PercentageComplete(100)] public struct Point : IEquatable<Point> { #region fields public int X; public int Y; #endregion #region properties public static Point Zero { get { return new Point(0, 0); } } #endregion #region constructors public Point(int x, int y) { this.X = x; this.Y = y; } #endregion #region public methods public override int GetHashCode() { return this.X + this.Y; } public override string ToString() { var culture = CultureInfo.CurrentCulture; // This may look a bit more ugly, but String.Format should // be avoided cause of it's bad performance! return "{X:" + X.ToString(culture) + " Y:" + Y.ToString(culture) + "}"; //return string.Format(culture, "{{X:{0} Y:{1}}}", new object[] //{ // this.X.ToString(culture), // this.Y.ToString(culture) //}); } #endregion #region IEquatable implementation public override bool Equals(Object obj) { return (obj is Point) ? this.Equals((Point)obj) : false; } public bool Equals(Point other) { return this.X == other.X && this.Y == other.Y; } #endregion #region operator overloading public static bool operator ==(Point first, Point second) { return first.X == second.X && first.Y == second.Y; } public static bool operator !=(Point first, Point second) { return first.X != second.X || first.Y != second.Y; } #endregion } }