public void UpdateTerrain(Vector3 worldPosition, int radius) { var chunkPosition = GetChunkPosition(worldPosition); var newPositions = GetChunkPositionsInRadius(chunkPosition, radius); var loadedChunks = Cache.GetGeneratedChunks(); var chunksToRemove = loadedChunks.Except(newPositions).ToList(); var positionsToGenerate = newPositions.Except(chunksToRemove).ToList(); foreach (var position in positionsToGenerate) { GenerateChunk(position.X, position.Z); } //foreach (var position in chunksToRemove) // RemoveChunk(position.X, position.Z); }
public void UpdateTerrain(Vector3 worldPosition, int radius) { var chunkPosition = GetChunkPosition(worldPosition); var newPositions = GetChunkPositionsInRadius(chunkPosition, radius); var loadedChunks = Cache.GetGeneratedChunks(); var chunksToRemove = loadedChunks.Except(newPositions).ToList(); var positionsToGenerate = newPositions.Except(chunksToRemove).ToList(); var playerChunkPosition = GetChunkPosition(worldPosition); foreach (var position in positionsToGenerate) { //added if (switchDimensions) { if (position.X == playerChunkPosition.X && position.Z == playerChunkPosition.Z) { } else { GenerateChunk(position.X, position.Z); } } else { GenerateChunk(position.X, position.Z); } } foreach (var position in chunksToRemove) { RemoveChunk(position.X, position.Z); } //added if (switchDimensions) { //Remove current chunk RemoveChunk(playerChunkPosition.X, playerChunkPosition.Z); //recreate new chunk switchDimensions = false; } }