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); } } } }
public float3 ToWorldCoord(ChunkId chunk) { return((float3)id * WorldSettings.voxelSize + chunk.ToWorldCoord()); }