示例#1
0
    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]);
    }
示例#2
0
    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);
    }