|
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; |
@@ -54,33 +53,34 @@ private void FixMeshBounds(bool useShaderElevation) |
54 | 53 | return; |
55 | 54 | } |
56 | 55 |
|
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); |
| 56 | + if (useShaderElevation) |
| 57 | + { |
| 58 | + mesh.RecalculateBounds(); |
| 59 | + mesh.bounds = GetBoundsAdjustedForElevation(); |
| 60 | + } |
61 | 61 | } |
62 | 62 |
|
63 | | - private float GetMaxExtent() |
| 63 | + private Bounds GetBoundsAdjustedForElevation() |
64 | 64 | { |
| 65 | + Mesh mesh = _unityMapTile.MeshFilter.mesh; |
65 | 66 | if (TerrainData == null || TerrainData.ElevationValues == null) |
66 | 67 | { |
67 | | - return 0; |
| 68 | + return mesh.bounds; |
68 | 69 | } |
69 | 70 |
|
70 | | - float max = 0; |
71 | | - float min = float.MaxValue; |
72 | | - for (int i = 0; i < TerrainData.ElevationValues.Length; i++) |
| 71 | + float maxY = float.MinValue; |
| 72 | + float minY = float.MaxValue; |
| 73 | + foreach (float t in TerrainData.ElevationValues) |
73 | 74 | { |
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 | | - } |
| 75 | + float elevationScaled = t * _unityMapTile.TileScale; |
| 76 | + maxY = Mathf.Max(maxY, elevationScaled); |
| 77 | + minY = Mathf.Min(minY, elevationScaled); |
82 | 78 | } |
83 | | - return Mathf.Max(Mathf.Abs(min), max); |
| 79 | + Vector3 center = mesh.bounds.center; |
| 80 | + center.y = (maxY + minY) / 2; |
| 81 | + Vector3 size = mesh.bounds.size; |
| 82 | + size.y = maxY - minY; |
| 83 | + return new Bounds(center, size); |
84 | 84 | } |
85 | 85 |
|
86 | 86 | public void OnTerrainUpdated() |
|
0 commit comments