@@ -16,76 +16,89 @@ public enum HexDirection
1616
1717 public class HexMeshData
1818 {
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 ;
2827
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 ;
3142
3243 public HexMeshData ( )
3344 {
3445 }
3546
3647 public HexMeshData ( float radius , float border = 0.2f )
3748 {
38- this . border = Mathf . Clamp01 ( border ) ;
49+ this . _border = Mathf . Clamp01 ( border ) ;
3950
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 )
5465 } ;
5566 }
5667
5768 public Vector3 GetBridge ( HexDirection direction )
5869 {
59- return ( corners [ ( int ) direction ] + corners [ ( int ) direction + 1 ] ) * 0.5f * border ;
70+ return ( _corners [ ( int ) direction ] + _corners [ ( int ) direction + 1 ] ) * 0.5f * _border ;
6071 }
6172
6273 public Vector3 GetFirstCorner ( HexDirection direction )
6374 {
64- return corners [ ( int ) direction ] ;
75+ return _corners [ ( int ) direction ] ;
6576 }
6677
6778 public Vector3 GetSecondCorner ( HexDirection direction )
6879 {
69- return corners [ ( int ) direction + 1 ] ;
80+ return _corners [ ( int ) direction + 1 ] ;
7081 }
7182
7283 public Vector3 GetFirstSolidCorner ( HexDirection direction )
7384 {
74- return corners [ ( int ) direction ] * Solid ;
85+ return _corners [ ( int ) direction ] * Solid ;
7586 }
7687
7788 public Vector3 GetSecondSolidCorner ( HexDirection direction )
7889 {
79- return corners [ ( int ) direction + 1 ] * Solid ;
90+ return _corners [ ( int ) direction + 1 ] * Solid ;
8091 }
8192
8293 public Mesh CreateMesh ( )
8394 {
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+ } ;
89102 mesh . RecalculateNormals ( ) ;
90103 return mesh ;
91104 }
@@ -94,6 +107,12 @@ public Mesh CreateMesh()
94107
95108 public static class HexMeshUtility
96109 {
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+
97116 public static HexDirection Previous ( this HexDirection direction )
98117 {
99118 return direction == HexDirection . NE ? HexDirection . NW : ( direction - 1 ) ;
@@ -180,7 +199,7 @@ public static Mesh GenerateHexagonMesh(float radius, float border, int startX, i
180199 var index = ( y * mapWidth ) + x ;
181200
182201 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 ) ;
184203
185204 for ( var direction = 0 ; direction < 6 ; direction ++ )
186205 {
@@ -248,51 +267,51 @@ private static void AddTriangle(HexMeshData meshData, Vector3 center, Vector3 uv
248267
249268 private static void AddTriangle ( HexMeshData meshData , Vector3 v1 , Vector3 v2 , Vector3 v3 , Color color , Vector3 uv )
250269 {
251- var vertexIndex = meshData . vertices . Count ;
270+ var vertexIndex = meshData . Vertices . Count ;
252271
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 ) ;
256275
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 ) ;
260279
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 ) ;
264283
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 ) ;
268287 }
269288
270289 private static void AddQuad ( HexMeshData meshData , Vector3 v1 , Vector3 v2 , Vector3 v3 , Vector3 v4 , Color color , Vector3 uv )
271290 {
272- var vertexIndex = meshData . vertices . Count ;
291+ var vertexIndex = meshData . Vertices . Count ;
273292
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 ) ;
278297
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 ) ;
283302
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 ) ;
288307
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 ) ;
292311
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 ) ;
296315 }
297316
298317 }
0 commit comments