public int ChunkGenerationRadius; //TODO merge with PlayerChunkTracker public async Task PlaceInRandomCave() { await GenerateNearbyChunksAsync(DestinationChunkCoordinate); CaveChunk destinationChunk = await ChunkManager.CreateChunkAsync(DestinationChunkCoordinate); int randomCaveIndex = Random.Range(0, destinationChunk.CellData.Hollows.Count - 1); await PlaceInCave(destinationChunk.CellData.Hollows[randomCaveIndex]); }
private async Task GenerateNearbyChunksAsync(Vector3Int chunkCoordinate) { List <Task <CaveChunk> > chunkTasks = new List <Task <CaveChunk> >(9); for (int i = chunkCoordinate.x - ChunkGenerationRadius + 1; i < chunkCoordinate.x + ChunkGenerationRadius; i++) { for (int j = chunkCoordinate.y - ChunkGenerationRadius + 1; j < chunkCoordinate.y + ChunkGenerationRadius; j++) { for (int k = chunkCoordinate.z - ChunkGenerationRadius + 1; k < chunkCoordinate.z + ChunkGenerationRadius; k++) { Vector3Int newChunkCoordinate = new Vector3Int(i, j, k); chunkTasks.Add(ChunkManager.CreateChunkAsync(newChunkCoordinate)); } } } await Task.WhenAll(chunkTasks); }