private void UpdateVisableChunks() { HashSet <Vector2> alreadyUpdatedChunkCoords = new HashSet <Vector2>(); for (int i = _visibleTerrainChunks.Count - 1; i >= 0; i--) { alreadyUpdatedChunkCoords.Add(_visibleTerrainChunks[i].Coord); _visibleTerrainChunks[i].UpdateTerrainChunk(); } int currentChunkCoordX = Mathf.RoundToInt(_viewerPosition.x / _meshWorldSize); int currentChunkCoordY = Mathf.RoundToInt(_viewerPosition.y / _meshWorldSize); for (int yOffset = -_chunksVisableInViewDist; yOffset <= _chunksVisableInViewDist; yOffset++) { for (int xOffset = -_chunksVisableInViewDist; xOffset <= _chunksVisableInViewDist; xOffset++) { Vector2 viewedChunkCoord = new Vector2(currentChunkCoordX + xOffset, currentChunkCoordY + yOffset); if (!alreadyUpdatedChunkCoords.Contains(viewedChunkCoord)) { if (_terrainChunkDictionary.ContainsKey(viewedChunkCoord)) { _terrainChunkDictionary[viewedChunkCoord].UpdateTerrainChunk(); } else { TerrainChunk newChunk = new TerrainChunk(viewedChunkCoord, _heightMapSettings, _meshSettings, _detailLevelsHolder[_detailLevelIndex]._levelOfDetail, _colliderLODIndex, transform, _viewer, _mapMaterial, _biome, _textureSettings, _groundLayer); //Make mapchunk MapGenerator.AddChunkToMap(viewedChunkCoord); _terrainChunkDictionary.Add(viewedChunkCoord, newChunk); newChunk.onVisibilityChanged += OnTerrainChunkVisibilityChanged; newChunk.Load(); } } } } }