-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTilePosition.cs
78 lines (64 loc) · 1.91 KB
/
TilePosition.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
using System;
namespace AbstractTileGame
{
public struct TilePosition : ITilePosition, IComparable<ITilePosition>, IEquatable<ITilePosition>
{
public override bool Equals(object obj)
{
if (obj is null) return false;
return obj is ITilePosition && Equals((TilePosition) obj);
}
public override int GetHashCode()
{
unchecked
{
return (X * 397) ^ Y;
}
}
public TilePosition(int x, int y)
{
X = x;
Y = y;
}
public int X { get; }
public int Y { get; }
public static bool operator ==(TilePosition left, TilePosition right)
{
return left.Equals(right);
}
public static bool operator !=(TilePosition left, TilePosition right)
{
return !(left == right);
}
public static bool operator <(TilePosition left, TilePosition right)
{
return left.CompareTo(right) < 0;
}
public static bool operator <=(TilePosition left, TilePosition right)
{
return left.CompareTo(right) <= 0;
}
public static bool operator >(TilePosition left, TilePosition right)
{
return left.CompareTo(right) > 0;
}
public static bool operator >=(TilePosition left, TilePosition right)
{
return left.CompareTo(right) >= 0;
}
public int CompareTo(ITilePosition other)
{
if (X == other.X)
return Y - other.Y;
return X - other.X;
}
public bool Equals(ITilePosition other)
{
return CompareTo(other) == 0;
}
public static implicit operator TilePosition((int x, int y) position)
{
return new TilePosition(position.x, position.y);
}
}
}