|
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