|
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