private void TryToDeleteQueuedChunks() { var chunksToRemove = ChunksToRemove.ToList(); foreach (var chunkPosition in chunksToRemove) { if (RequestedChunks.ContainsKey(chunkPosition)) { RequestedChunks.Remove(chunkPosition); ChunksToRemove.Remove(chunkPosition); } else if (LoadedChunks.ContainsKey(chunkPosition)) { var chunk = LoadedChunks[chunkPosition]; chunk.Remove(); LoadedChunks.Remove(chunkPosition); ChunksToRemove.Remove(chunkPosition); } else if (!ChunksBeingGenerated.ContainsKey(chunkPosition)) { ChunksToRemove.Remove(chunkPosition); } } }
private void GenerateHeightmapForAvailableChunks() { var requestedChunks = RequestedChunks.ToList(); if (requestedChunks.Count > 0 && ChunksBeingGenerated.Count < MaxChunkThreads) { var chunksToAdd = requestedChunks.Take(MaxChunkThreads - ChunksBeingGenerated.Count); foreach (var chunkEntry in chunksToAdd) { ChunksBeingGenerated.Add(chunkEntry.Key, chunkEntry.Value); RequestedChunks.Remove(chunkEntry.Key); chunkEntry.Value.GenerateHeightmap(); } } }