2D-Platformer/Assets/Plugins/Light2D/Scripts/Point2.cs
2022-02-12 12:53:50 +02:00

137 lines
3.3 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UnityEngine;
namespace Light2D
{
/// <summary>
/// Class is almost same as Vector2, but using int data type instead of float.
/// </summary>
[Serializable]
public struct Point2 : IEquatable<Point2>
{
public int x, y;
public Point2(int x, int y)
{
this.x = x;
this.y = y;
}
public bool Equals(Point2 other)
{
return x == other.x && y == other.y;
}
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj)) return false;
return obj is Point2 && Equals((Point2)obj);
}
public override int GetHashCode()
{
unchecked
{
return (x * 397) ^ y;
}
}
public static bool operator ==(Point2 left, Point2 right)
{
return left.Equals(right);
}
public static bool operator !=(Point2 left, Point2 right)
{
return !left.Equals(right);
}
public static implicit operator Vector2(Point2 p)
{
return new Vector2(p.x, p.y);
}
public static implicit operator Vector3(Point2 p)
{
return new Vector2(p.x, p.y);
}
public static Point2 Floor(Vector2 v)
{
return new Point2((int)v.x, (int)v.y);
}
public static Point2 Round(Vector2 v)
{
return new Point2(Mathf.RoundToInt(v.x), Mathf.RoundToInt(v.y));
}
public static Point2 Floor(float x, float y)
{
return new Point2((int)x, (int)y);
}
public static Point2 Round(float x, float y)
{
return new Point2(Mathf.RoundToInt(x), Mathf.RoundToInt(y));
}
public static Point2 operator +(Point2 first, Point2 second)
{
return new Point2(first.x + second.x, first.y + second.y);
}
public static Point2 operator -(Point2 first, Point2 second)
{
return new Point2(first.x - second.x, first.y - second.y);
}
public static Vector2 operator +(Point2 first, Vector2 second)
{
return new Vector2(first.x + second.x, first.y + second.y);
}
public static Vector2 operator -(Point2 first, Vector2 second)
{
return new Vector2(first.x - second.x, first.y - second.y);
}
public static Point2 operator *(Point2 p, int mul)
{
return new Point2(p.x * mul, p.y * mul);
}
public static Point2 operator /(Point2 p, int div)
{
return new Point2(p.x / div, p.y / div);
}
public static Vector2 operator *(Point2 p, float mul)
{
return new Vector2(p.x * mul, p.y * mul);
}
public static Vector2 operator /(Point2 p, float div)
{
return new Vector2(p.x / div, p.y / div);
}
public static Point2 one
{
get { return new Point2(1, 1); }
}
public static Point2 zero
{
get { return new Point2(0, 0); }
}
public override string ToString()
{
return "(" + x + ", " + y + ")";
}
}
}