-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathPointAxial.cs
41 lines (31 loc) · 1.12 KB
/
PointAxial.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
using System;
namespace Hexagony
{
readonly struct PointAxial : IEquatable<PointAxial>
{
public int Q { get; }
public int R { get; }
public PointAxial(int q, int r) : this() { Q = q; R = r; }
public static PointAxial operator +(PointAxial a, PointAxial b) =>
new(a.Q + b.Q, a.R + b.R);
public static PointAxial operator -(PointAxial a, PointAxial b) =>
new(a.Q - b.Q, a.R - b.R);
public override string ToString() =>
$"(Q: {Q,3}, R: {R,3})";
public static bool operator ==(PointAxial a, PointAxial b) =>
a.Q == b.Q && a.R == b.R;
public static bool operator !=(PointAxial a, PointAxial b) =>
a.Q != b.Q || a.R != b.R;
public override int GetHashCode() =>
unchecked(Q * 24567 + R * 47);
public override bool Equals(object obj) =>
obj is PointAxial axial && this == axial;
public bool Equals(PointAxial other) =>
this == other;
public void Deconstruct(out int q, out int r)
{
q = Q;
r = R;
}
}
}