Skip to content

Commit 3da9aad

Browse files
committed
base class for mesh builder views
1 parent 915c2a9 commit 3da9aad

File tree

6 files changed

+59
-11
lines changed

6 files changed

+59
-11
lines changed

Runtime/Utility/HexMeshUtility.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public HexMeshData(float radius, float border = 0.2f)
3838
this.border = Mathf.Clamp01(border);
3939

4040
outerRadius = radius;
41-
innerRadius = outerRadius * Mathf.Sqrt(3f) * 0.5f;
41+
innerRadius = HexMeshUtility.GetInnerRadius(outerRadius);
4242
vertices = new List<Vector3>();
4343
triangles = new List<int>();
4444
colors = new List<Color>();
@@ -94,6 +94,12 @@ public Mesh CreateMesh()
9494

9595
public static class HexMeshUtility
9696
{
97+
//Calculates the inner radius from the outer radius
98+
public static float GetInnerRadius(float outerRadius)
99+
{
100+
return outerRadius * Mathf.Sqrt(3f) * 0.5f;
101+
}
102+
97103
public static HexDirection Previous(this HexDirection direction)
98104
{
99105
return direction == HexDirection.NE ? HexDirection.NW : (direction - 1);

Runtime/WorldMap/Views/WoldMapTerrainMeshView.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
namespace Gameframe.Procgen
77
{
8-
public class WoldMapTerrainMeshView : MonoBehaviour, IWorldMapView
8+
public class WoldMapTerrainMeshView : WorldMapView, IWorldMapView
99
{
1010
[SerializeField] private MeshFilter _meshFilter = null;
1111

@@ -24,7 +24,7 @@ private void Start()
2424
{
2525
}
2626

27-
public void DisplayMap(WorldMapData worldMapData)
27+
public override void DisplayMap(WorldMapData worldMapData)
2828
{
2929
if (!enabled)
3030
{

Runtime/WorldMap/Views/WorldMapHexMeshView.cs

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
namespace Gameframe.Procgen
66
{
77

8-
public class WorldMapHexMeshView : MonoBehaviour, IWorldMapView
8+
public class WorldMapHexMeshView : WorldMapView, IWorldMapView
99
{
1010
[SerializeField] private WorldMapViewChunk _prefab = null;
1111
[SerializeField] private float radius = 1f;
@@ -21,6 +21,9 @@ public class WorldMapHexMeshView : MonoBehaviour, IWorldMapView
2121
[SerializeField] private List<WorldMapViewChunk> chunkList = new List<WorldMapViewChunk>();
2222
private readonly Dictionary<Vector2, WorldMapViewChunk> _chunks = new Dictionary<Vector2, WorldMapViewChunk>();
2323

24+
private WorldMapData _mapData = null;
25+
private float[] _heightMap = null;
26+
2427
private void Start()
2528
{
2629
//This is here just to show the enable checkbox in editor
@@ -30,15 +33,29 @@ private void OnDisable()
3033
{
3134
ClearChunks();
3235
}
33-
34-
public void DisplayMap(WorldMapData mapData)
36+
37+
public override Vector3 MapToWorldPosition(Vector2Int point)
38+
{
39+
var innerRadius = HexMeshUtility.GetInnerRadius(radius);
40+
var xOffset = point.x + point.y * 0.5f - (int)(point.y / 2);
41+
var pt = new Vector3
42+
{
43+
x = xOffset * innerRadius * 2,
44+
y = _mapData == null || _heightMap == null ? 0 : GetElevation(_heightMap[point.y * _mapData.width + point.x]),
45+
z = point.y * radius * 1.5f
46+
};
47+
return pt;
48+
}
49+
50+
public override void DisplayMap(WorldMapData mapData)
3551
{
3652
if (!enabled)
3753
{
3854
return;
3955
}
40-
41-
var heightMap = mapData.GetLayer<HeightMapLayerData>().heightMap;
56+
57+
_mapData = mapData;
58+
_heightMap = _mapData.GetLayer<HeightMapLayerData>().heightMap;
4259

4360
ClearChunks();
4461

@@ -55,7 +72,7 @@ public void DisplayMap(WorldMapData mapData)
5572
var startY = chunkY * chunkHeight;
5673
var chunkView = GetChunk(new Vector2Int(chunkX,chunkY));
5774
chunkView.transform.localPosition = new Vector3(0,0,0);
58-
var mesh = HexMeshUtility.GenerateHexagonMesh(radius, border, startX, startY, chunkWidth, chunkHeight, mapData.width, mapData.height, heightMap, GetColor, GetElevation);
75+
var mesh = HexMeshUtility.GenerateHexagonMesh(radius, border, startX, startY, chunkWidth, chunkHeight, mapData.width, mapData.height, _heightMap, GetColor, GetElevation);
5976
chunkView.SetMesh(mesh);
6077
}
6178
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using UnityEngine;
2+
3+
namespace Gameframe.Procgen
4+
{
5+
public abstract class WorldMapView : MonoBehaviour, IWorldMapView
6+
{
7+
public virtual Vector3 MapToWorldPosition(Vector2Int point)
8+
{
9+
return new Vector3(point.x, 0, point.y);
10+
}
11+
12+
public abstract void DisplayMap(WorldMapData mapData);
13+
}
14+
}

Runtime/WorldMap/Views/WorldMapView.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Runtime/WorldMap/Views/WorldMapVoxelMeshView.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
namespace Gameframe.Procgen
88
{
9-
public class WorldMapVoxelMeshView : MonoBehaviour, IWorldMapView
9+
public class WorldMapVoxelMeshView : WorldMapView, IWorldMapView
1010
{
1111
[SerializeField] private TerrainTable _terrainTable;
1212

@@ -36,7 +36,7 @@ private void OnDisable()
3636
ClearChunks();
3737
}
3838

39-
public void DisplayMap(WorldMapData mapData)
39+
public override void DisplayMap(WorldMapData mapData)
4040
{
4141
if (!enabled)
4242
{

0 commit comments

Comments
 (0)