@@ -16,76 +16,89 @@ public enum HexDirection
16
16
17
17
public class HexMeshData
18
18
{
19
- public float outerRadius ;
20
- public float innerRadius ;
21
- public List < Vector3 > vertices ;
22
- public List < int > triangles ;
23
- public List < Color > colors ;
24
- public List < Vector2 > uv ;
25
- public Vector3 [ ] corners ;
26
-
27
- private float border = 0.25f ;
19
+ private readonly float _outerRadius ;
20
+ private readonly float _innerRadius ;
21
+ private readonly List < Vector3 > _vertices ;
22
+ private readonly List < int > _triangles ;
23
+ private readonly List < Color > _colors ;
24
+ private readonly List < Vector2 > _uv ;
25
+ private readonly Vector3 [ ] _corners ;
26
+ private readonly float _border = 0.25f ;
28
27
29
- public float Border => border ;
30
- public float Solid => 1 - border ;
28
+ public float Border => _border ;
29
+ public float Solid => 1 - _border ;
30
+
31
+ public float OuterRadius => _outerRadius ;
32
+
33
+ public float InnerRadius => _innerRadius ;
34
+
35
+ public List < Vector3 > Vertices => _vertices ;
36
+
37
+ public List < int > Triangles => _triangles ;
38
+
39
+ public List < Color > Colors => _colors ;
40
+
41
+ public List < Vector2 > Uv => _uv ;
31
42
32
43
public HexMeshData ( )
33
44
{
34
45
}
35
46
36
47
public HexMeshData ( float radius , float border = 0.2f )
37
48
{
38
- this . border = Mathf . Clamp01 ( border ) ;
49
+ this . _border = Mathf . Clamp01 ( border ) ;
39
50
40
- outerRadius = radius ;
41
- innerRadius = outerRadius * Mathf . Sqrt ( 3f ) * 0.5f ;
42
- vertices = new List < Vector3 > ( ) ;
43
- triangles = new List < int > ( ) ;
44
- colors = new List < Color > ( ) ;
45
- uv = new List < Vector2 > ( ) ;
46
- corners = new [ ] {
47
- new Vector3 ( 0f , 0f , outerRadius ) ,
48
- new Vector3 ( innerRadius , 0f , 0.5f * outerRadius ) ,
49
- new Vector3 ( innerRadius , 0f , - 0.5f * outerRadius ) ,
50
- new Vector3 ( 0f , 0f , - outerRadius ) ,
51
- new Vector3 ( - innerRadius , 0f , - 0.5f * outerRadius ) ,
52
- new Vector3 ( - innerRadius , 0f , 0.5f * outerRadius ) ,
53
- new Vector3 ( 0f , 0f , outerRadius )
51
+ _outerRadius = radius ;
52
+ _innerRadius = HexMeshUtility . GetInnerRadius ( _outerRadius ) ;
53
+ _vertices = new List < Vector3 > ( ) ;
54
+ _triangles = new List < int > ( ) ;
55
+ _colors = new List < Color > ( ) ;
56
+ _uv = new List < Vector2 > ( ) ;
57
+ _corners = new [ ] {
58
+ new Vector3 ( 0f , 0f , _outerRadius ) ,
59
+ new Vector3 ( _innerRadius , 0f , 0.5f * _outerRadius ) ,
60
+ new Vector3 ( _innerRadius , 0f , - 0.5f * _outerRadius ) ,
61
+ new Vector3 ( 0f , 0f , - _outerRadius ) ,
62
+ new Vector3 ( - _innerRadius , 0f , - 0.5f * _outerRadius ) ,
63
+ new Vector3 ( - _innerRadius , 0f , 0.5f * _outerRadius ) ,
64
+ new Vector3 ( 0f , 0f , _outerRadius )
54
65
} ;
55
66
}
56
67
57
68
public Vector3 GetBridge ( HexDirection direction )
58
69
{
59
- return ( corners [ ( int ) direction ] + corners [ ( int ) direction + 1 ] ) * 0.5f * border ;
70
+ return ( _corners [ ( int ) direction ] + _corners [ ( int ) direction + 1 ] ) * 0.5f * _border ;
60
71
}
61
72
62
73
public Vector3 GetFirstCorner ( HexDirection direction )
63
74
{
64
- return corners [ ( int ) direction ] ;
75
+ return _corners [ ( int ) direction ] ;
65
76
}
66
77
67
78
public Vector3 GetSecondCorner ( HexDirection direction )
68
79
{
69
- return corners [ ( int ) direction + 1 ] ;
80
+ return _corners [ ( int ) direction + 1 ] ;
70
81
}
71
82
72
83
public Vector3 GetFirstSolidCorner ( HexDirection direction )
73
84
{
74
- return corners [ ( int ) direction ] * Solid ;
85
+ return _corners [ ( int ) direction ] * Solid ;
75
86
}
76
87
77
88
public Vector3 GetSecondSolidCorner ( HexDirection direction )
78
89
{
79
- return corners [ ( int ) direction + 1 ] * Solid ;
90
+ return _corners [ ( int ) direction + 1 ] * Solid ;
80
91
}
81
92
82
93
public Mesh CreateMesh ( )
83
94
{
84
- Mesh mesh = new Mesh ( ) ;
85
- mesh . vertices = vertices . ToArray ( ) ;
86
- mesh . triangles = triangles . ToArray ( ) ;
87
- mesh . colors = colors . ToArray ( ) ;
88
- mesh . uv = uv . ToArray ( ) ;
95
+ var mesh = new Mesh
96
+ {
97
+ vertices = _vertices . ToArray ( ) ,
98
+ triangles = _triangles . ToArray ( ) ,
99
+ colors = _colors . ToArray ( ) ,
100
+ uv = _uv . ToArray ( )
101
+ } ;
89
102
mesh . RecalculateNormals ( ) ;
90
103
return mesh ;
91
104
}
@@ -94,6 +107,12 @@ public Mesh CreateMesh()
94
107
95
108
public static class HexMeshUtility
96
109
{
110
+ //Calculates the inner radius from the outer radius
111
+ public static float GetInnerRadius ( float outerRadius )
112
+ {
113
+ return outerRadius * Mathf . Sqrt ( 3f ) * 0.5f ;
114
+ }
115
+
97
116
public static HexDirection Previous ( this HexDirection direction )
98
117
{
99
118
return direction == HexDirection . NE ? HexDirection . NW : ( direction - 1 ) ;
@@ -180,7 +199,7 @@ public static Mesh GenerateHexagonMesh(float radius, float border, int startX, i
180
199
var index = ( y * mapWidth ) + x ;
181
200
182
201
var xOffset = x + y * 0.5f - ( int ) ( y / 2 ) ;
183
- var center = new Vector3 ( xOffset * meshData . innerRadius * 2 , 0 , y * meshData . outerRadius * 1.5f ) ;
202
+ var center = new Vector3 ( xOffset * meshData . InnerRadius * 2 , 0 , y * meshData . OuterRadius * 1.5f ) ;
184
203
185
204
for ( var direction = 0 ; direction < 6 ; direction ++ )
186
205
{
@@ -248,51 +267,51 @@ private static void AddTriangle(HexMeshData meshData, Vector3 center, Vector3 uv
248
267
249
268
private static void AddTriangle ( HexMeshData meshData , Vector3 v1 , Vector3 v2 , Vector3 v3 , Color color , Vector3 uv )
250
269
{
251
- var vertexIndex = meshData . vertices . Count ;
270
+ var vertexIndex = meshData . Vertices . Count ;
252
271
253
- meshData . vertices . Add ( v1 ) ;
254
- meshData . vertices . Add ( v2 ) ;
255
- meshData . vertices . Add ( v3 ) ;
272
+ meshData . Vertices . Add ( v1 ) ;
273
+ meshData . Vertices . Add ( v2 ) ;
274
+ meshData . Vertices . Add ( v3 ) ;
256
275
257
- meshData . colors . Add ( color ) ;
258
- meshData . colors . Add ( color ) ;
259
- meshData . colors . Add ( color ) ;
276
+ meshData . Colors . Add ( color ) ;
277
+ meshData . Colors . Add ( color ) ;
278
+ meshData . Colors . Add ( color ) ;
260
279
261
- meshData . uv . Add ( uv ) ;
262
- meshData . uv . Add ( uv ) ;
263
- meshData . uv . Add ( uv ) ;
280
+ meshData . Uv . Add ( uv ) ;
281
+ meshData . Uv . Add ( uv ) ;
282
+ meshData . Uv . Add ( uv ) ;
264
283
265
- meshData . triangles . Add ( vertexIndex ) ;
266
- meshData . triangles . Add ( vertexIndex + 1 ) ;
267
- meshData . triangles . Add ( vertexIndex + 2 ) ;
284
+ meshData . Triangles . Add ( vertexIndex ) ;
285
+ meshData . Triangles . Add ( vertexIndex + 1 ) ;
286
+ meshData . Triangles . Add ( vertexIndex + 2 ) ;
268
287
}
269
288
270
289
private static void AddQuad ( HexMeshData meshData , Vector3 v1 , Vector3 v2 , Vector3 v3 , Vector3 v4 , Color color , Vector3 uv )
271
290
{
272
- var vertexIndex = meshData . vertices . Count ;
291
+ var vertexIndex = meshData . Vertices . Count ;
273
292
274
- meshData . vertices . Add ( v1 ) ;
275
- meshData . vertices . Add ( v2 ) ;
276
- meshData . vertices . Add ( v3 ) ;
277
- meshData . vertices . Add ( v4 ) ;
293
+ meshData . Vertices . Add ( v1 ) ;
294
+ meshData . Vertices . Add ( v2 ) ;
295
+ meshData . Vertices . Add ( v3 ) ;
296
+ meshData . Vertices . Add ( v4 ) ;
278
297
279
- meshData . colors . Add ( color ) ;
280
- meshData . colors . Add ( color ) ;
281
- meshData . colors . Add ( color ) ;
282
- meshData . colors . Add ( color ) ;
298
+ meshData . Colors . Add ( color ) ;
299
+ meshData . Colors . Add ( color ) ;
300
+ meshData . Colors . Add ( color ) ;
301
+ meshData . Colors . Add ( color ) ;
283
302
284
- meshData . uv . Add ( uv ) ;
285
- meshData . uv . Add ( uv ) ;
286
- meshData . uv . Add ( uv ) ;
287
- meshData . uv . Add ( uv ) ;
303
+ meshData . Uv . Add ( uv ) ;
304
+ meshData . Uv . Add ( uv ) ;
305
+ meshData . Uv . Add ( uv ) ;
306
+ meshData . Uv . Add ( uv ) ;
288
307
289
- meshData . triangles . Add ( vertexIndex ) ;
290
- meshData . triangles . Add ( vertexIndex + 2 ) ;
291
- meshData . triangles . Add ( vertexIndex + 1 ) ;
308
+ meshData . Triangles . Add ( vertexIndex ) ;
309
+ meshData . Triangles . Add ( vertexIndex + 2 ) ;
310
+ meshData . Triangles . Add ( vertexIndex + 1 ) ;
292
311
293
- meshData . triangles . Add ( vertexIndex + 1 ) ;
294
- meshData . triangles . Add ( vertexIndex + 2 ) ;
295
- meshData . triangles . Add ( vertexIndex + 3 ) ;
312
+ meshData . Triangles . Add ( vertexIndex + 1 ) ;
313
+ meshData . Triangles . Add ( vertexIndex + 2 ) ;
314
+ meshData . Triangles . Add ( vertexIndex + 3 ) ;
296
315
}
297
316
298
317
}
0 commit comments