-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathHexCoordinates.cs
More file actions
87 lines (72 loc) · 1.72 KB
/
HexCoordinates.cs
File metadata and controls
87 lines (72 loc) · 1.72 KB
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
79
80
81
82
83
84
85
86
87
using UnityEngine;
[System.Serializable]
public struct HexCoordinates
{
[SerializeField]
private int x, z;
public int X
{
get
{
return x;
}
}
public int Z
{
get
{
return z;
}
}
public int Y
{
get
{
return -X - Z;
}
}
public HexCoordinates(int x, int z)
{
this.x = x;
this.z = z;
}
public static HexCoordinates FromOffsetCoordinates(int x, int z)
{
return new HexCoordinates(x - z / 2, z);
}
public static HexCoordinates FromPosition(Vector3 position)
{
float x = position.x / (HexMetrics.innerRadius * 2f);
float y = -x;
float offset = position.z / (HexMetrics.outerRadius * 3f);
x -= offset;
y -= offset;
int iX = Mathf.RoundToInt(x);
int iY = Mathf.RoundToInt(y);
int iZ = Mathf.RoundToInt(-x - y);
if (iX + iY + iZ != 0)
{
float dX = Mathf.Abs(x - iX);
float dY = Mathf.Abs(y - iY);
float dZ = Mathf.Abs(-x - y - iZ);
if (dX > dY && dX > dZ)
{
iX = -iY - iZ;
}
else if (dZ > dY)
{
iZ = -iX - iY;
}
}
return new HexCoordinates(iX, iZ);
}
public override string ToString()
{
return "(" +
X.ToString() + ", " + Y.ToString() + ", " + Z.ToString() + ")";
}
public string ToStringOnSeparateLines()
{
return X.ToString() + "\n" + Y.ToString() + "\n" + Z.ToString();
}
}