private void InitNewChunks()
    {
        ChunkId playerChunkCoord = GetPlayerChunkCoord();

        for (int x = 0; x < WorldSettings.RenderDistanceInChunks; x++)
        {
            for (int y = 0; y < WorldSettings.RenderDistanceInChunks; y++)
            {
                for (int z = 0; z < WorldSettings.RenderDistanceInChunks; z++)
                {
                    ChunkId newChunk = new ChunkId(new int3(x, y, z) + playerChunkCoord.id);
                    if (!chunks.ContainsKey(newChunk) && Utils.Magnitude(newChunk.id - playerChunkCoord.id) <= WorldSettings.RenderDistanceInChunks)
                    {
                        GameObject chunkGameObject = Instantiate(chunkPrefab, newChunk.ToWorldCoord(), Quaternion.identity);
                        Chunk      chunk           = new Chunk(newChunk, chunkGameObject);
                        chunks.Add(newChunk, chunk);
                    }
                }
            }
        }
    }
    public void Execute()
    {
        for (int x = 0; x < WorldSettings.chunkDimension.x; x++)
        {
            for (int z = 0; z < WorldSettings.chunkDimension.z; z++)
            {
                float3 chunkCoord   = chunk.ToWorldCoord();
                float2 terrainCoord = new float2(x * WorldSettings.voxelSize + chunkCoord.x, z * WorldSettings.voxelSize + chunkCoord.z);

                float terrainHeight = NoiseGenerator.Generate(terrainCoord) * WorldSettings.WorldHeight;

                for (int y = 0; y < WorldSettings.chunkDimension.y; y++)
                {
                    float height = y * WorldSettings.voxelSize + chunkCoord.y;

                    float density = math.clamp((terrainHeight - height) / WorldSettings.WorldHeight, 0, 1);

                    voxelData[Utils.CoordToIndex(new int3(x, y, z))] = new VoxelData(density, Color.white);
                }
            }
        }
    }
Пример #3
0
 public float3 ToWorldCoord(ChunkId chunk)
 {
     return((float3)id * WorldSettings.voxelSize + chunk.ToWorldCoord());
 }