// Decompiled with JetBrains decompiler
// Type: Terraria.DataStructures.Point16
// Assembly: Terraria, Version=1.3.5.3, Culture=neutral, PublicKeyToken=null
// MVID: 68659D26-2BE6-448F-8663-74FA559E6F08
// Assembly location: C:\Users\mikeyisbaeyt\Downloads\depotdownloader-2.4.5\depots\105601\6707058\Terraria.exe

using Microsoft.Xna.Framework;

namespace Terraria.DataStructures
{
  public struct Point16
  {
    public readonly short X;
    public readonly short Y;
    public static Point16 Zero = new Point16(0, 0);
    public static Point16 NegativeOne = new Point16(-1, -1);

    public Point16(Point point)
    {
      this.X = (short) point.X;
      this.Y = (short) point.Y;
    }

    public Point16(int X, int Y)
    {
      this.X = (short) X;
      this.Y = (short) Y;
    }

    public Point16(short X, short Y)
    {
      this.X = X;
      this.Y = Y;
    }

    public static Point16 Max(int firstX, int firstY, int secondX, int secondY) => new Point16(firstX > secondX ? firstX : secondX, firstY > secondY ? firstY : secondY);

    public Point16 Max(int compareX, int compareY) => new Point16((int) this.X > compareX ? (int) this.X : compareX, (int) this.Y > compareY ? (int) this.Y : compareY);

    public Point16 Max(Point16 compareTo) => new Point16((int) this.X > (int) compareTo.X ? this.X : compareTo.X, (int) this.Y > (int) compareTo.Y ? this.Y : compareTo.Y);

    public static bool operator ==(Point16 first, Point16 second) => (int) first.X == (int) second.X && (int) first.Y == (int) second.Y;

    public static bool operator !=(Point16 first, Point16 second) => (int) first.X != (int) second.X || (int) first.Y != (int) second.Y;

    public override bool Equals(object obj)
    {
      Point16 point16 = (Point16) obj;
      return (int) this.X == (int) point16.X && (int) this.Y == (int) point16.Y;
    }

    public override int GetHashCode() => (int) this.X << 16 | (int) (ushort) this.Y;

    public override string ToString() => string.Format("{{{0}, {1}}}", (object) this.X, (object) this.Y);
  }
}
