-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathHexMesh.cs
79 lines (66 loc) · 1.94 KB
/
HexMesh.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
79
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))]
public class HexMesh : MonoBehaviour
{
Mesh hexMesh;
List<Vector3> vertices;
List<int> triangles;
List<Color> colors;
MeshCollider meshCollider;
void Awake()
{
GetComponent<MeshFilter>().mesh = hexMesh = new Mesh();
meshCollider = gameObject.AddComponent<MeshCollider>();
hexMesh.name = "Hex Mesh";
vertices = new List<Vector3>();
colors = new List<Color>();
triangles = new List<int>();
}
public void Triangulate(HexCell[] cells)
{
hexMesh.Clear();
vertices.Clear();
colors.Clear();
triangles.Clear();
for (int i = 0; i < cells.Length; i++)
{
Triangulate(cells[i]);
}
hexMesh.vertices = vertices.ToArray();
hexMesh.colors = colors.ToArray();
hexMesh.triangles = triangles.ToArray();
hexMesh.RecalculateNormals();
meshCollider.sharedMesh = hexMesh;
}
void Triangulate(HexCell cell)
{
Vector3 center = cell.transform.localPosition;
for (int i = 0; i < 6; i++)
{
AddTriangle(
center,
center + HexMetrics.corners[i],
center + HexMetrics.corners[i + 1]
);
AddTriangleColor(cell.color);
}
}
void AddTriangleColor(Color color)
{
colors.Add(color);
colors.Add(color);
colors.Add(color);
}
void AddTriangle (Vector3 v1, Vector3 v2, Vector3 v3)
{
int vertexIndex = vertices.Count;
vertices.Add(v1);
vertices.Add(v2);
vertices.Add(v3);
triangles.Add(vertexIndex);
triangles.Add(vertexIndex + 1);
triangles.Add(vertexIndex + 2);
}
}