|
|
@@ -24,10 +24,26 @@ public class EndlessTerrain : MonoBehaviour {
|
|
|
Dictionary<Vector2, TerrainChunk> terrainChunkDictionary = new Dictionary<Vector2, TerrainChunk>();
|
|
|
static List<TerrainChunk> terrainChunksVisibleLastUpdate = new List<TerrainChunk>();
|
|
|
|
|
|
- void Start() {
|
|
|
+ void Awake()
|
|
|
+ {
|
|
|
+ ResetTerrain();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ void Start() {
|
|
|
mapGenerator = FindObjectOfType<MapGenerator> ();
|
|
|
|
|
|
- maxViewDst = detailLevels [detailLevels.Length - 1].visibleDstThreshold;
|
|
|
+ if (mapGenerator == null)
|
|
|
+ {
|
|
|
+ Debug.LogError("MapGenerator not found!");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ viewerPosition = Vector2.zero;
|
|
|
+ viewerPositionOld = Vector2.one * 9999f; // force update
|
|
|
+
|
|
|
+ maxViewDst = detailLevels [detailLevels.Length - 1].visibleDstThreshold;
|
|
|
chunkSize = MapGenerator.mapChunkSize - 1;
|
|
|
chunksVisibleInViewDst = Mathf.RoundToInt(maxViewDst / chunkSize);
|
|
|
|
|
|
@@ -175,9 +191,15 @@ public class EndlessTerrain : MonoBehaviour {
|
|
|
return meshObject.activeSelf;
|
|
|
}
|
|
|
|
|
|
- }
|
|
|
+ public void Dispose()
|
|
|
+ {
|
|
|
+ Object.Destroy(meshObject);
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
- class LODMesh {
|
|
|
+ }
|
|
|
+
|
|
|
+ class LODMesh {
|
|
|
|
|
|
public Mesh mesh;
|
|
|
public bool hasRequestedMesh;
|
|
|
@@ -211,4 +233,19 @@ public class EndlessTerrain : MonoBehaviour {
|
|
|
public bool useForCollider;
|
|
|
}
|
|
|
|
|
|
+ public void ResetTerrain()
|
|
|
+ {
|
|
|
+ // Destroy chunk GameObjects
|
|
|
+ foreach (var chunk in terrainChunkDictionary.Values)
|
|
|
+ {
|
|
|
+ chunk.Dispose();
|
|
|
+ }
|
|
|
+
|
|
|
+ terrainChunkDictionary.Clear();
|
|
|
+ terrainChunksVisibleLastUpdate.Clear();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
+
|