|
1 | 1 | using System; |
2 | | -using Mapbox.BaseModule.Data.DataFetchers; |
3 | 2 | using Mapbox.BaseModule.Data.Tiles; |
4 | 3 | using UnityEngine; |
5 | 4 | using TerrainData = Mapbox.BaseModule.Data.DataFetchers.TerrainData; |
@@ -49,38 +48,34 @@ public void SetTerrainData(TerrainData terrainData, bool useShaderElevation, Til |
49 | 48 | private void FixMeshBounds(bool useShaderElevation) |
50 | 49 | { |
51 | 50 | Mesh mesh = _unityMapTile.MeshFilter.mesh; |
52 | | - if (mesh == null) |
| 51 | + if (mesh != null && useShaderElevation) |
53 | 52 | { |
54 | | - return; |
| 53 | + mesh.RecalculateBounds(); |
| 54 | + mesh.bounds = GetBoundsAdjustedForElevation(); |
55 | 55 | } |
56 | | - |
57 | | - float elevation = useShaderElevation ? GetMaxExtent() : 0f; |
58 | | - Vector3 newExtents = mesh.bounds.extents; |
59 | | - newExtents.y = elevation; |
60 | | - mesh.bounds = new Bounds(mesh.bounds.center, newExtents); |
61 | 56 | } |
62 | 57 |
|
63 | | - private float GetMaxExtent() |
| 58 | + private Bounds GetBoundsAdjustedForElevation() |
64 | 59 | { |
| 60 | + Mesh mesh = _unityMapTile.MeshFilter.mesh; |
65 | 61 | if (TerrainData == null || TerrainData.ElevationValues == null) |
66 | 62 | { |
67 | | - return 0; |
| 63 | + return mesh.bounds; |
68 | 64 | } |
69 | 65 |
|
70 | | - float max = 0; |
71 | | - float min = float.MaxValue; |
72 | | - for (int i = 0; i < TerrainData.ElevationValues.Length; i++) |
| 66 | + float maxY = float.MinValue; |
| 67 | + float minY = float.MaxValue; |
| 68 | + foreach (float t in TerrainData.ElevationValues) |
73 | 69 | { |
74 | | - if (TerrainData.ElevationValues[i] > max) |
75 | | - { |
76 | | - max = TerrainData.ElevationValues[i]; |
77 | | - } |
78 | | - if (TerrainData.ElevationValues[i] < min) |
79 | | - { |
80 | | - min = TerrainData.ElevationValues[i]; |
81 | | - } |
| 70 | + float elevationScaled = t * _unityMapTile.TileScale; |
| 71 | + maxY = Mathf.Max(maxY, elevationScaled); |
| 72 | + minY = Mathf.Min(minY, elevationScaled); |
82 | 73 | } |
83 | | - return Mathf.Max(Mathf.Abs(min), max); |
| 74 | + Vector3 center = mesh.bounds.center; |
| 75 | + center.y = (maxY + minY) / 2; |
| 76 | + Vector3 size = mesh.bounds.size; |
| 77 | + size.y = maxY - minY; |
| 78 | + return new Bounds(center, size); |
84 | 79 | } |
85 | 80 |
|
86 | 81 | public void OnTerrainUpdated() |
|
0 commit comments