diff options
Diffstat (limited to 'src/World/Generator.cpp')
| -rw-r--r-- | src/World/Generator.cpp | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/src/World/Generator.cpp b/src/World/Generator.cpp index 757abf2..ee7ece9 100644 --- a/src/World/Generator.cpp +++ b/src/World/Generator.cpp @@ -1,20 +1,30 @@ #include "Generator.hpp" +#include "../Math/Noise.hpp" namespace MC::World { Chunk Generator::generate(int64_t chunk_x, int64_t chunk_y) { Chunk chunk(chunk_x, chunk_y); - for (int y = 0; y < CHUNK_HEIGHT; y++) { - BlockType type = BlockType::Air; - if (y < CHUNK_HEIGHT / 2) { - type = BlockType::Dirt; - } else if (y == CHUNK_HEIGHT / 2) { - type = BlockType::Grass; - } + uint8_t extent = 60; + uint8_t base = 4; + + for (int x = 0; x < CHUNK_WIDTH; x++) { + for (int z = 0; z < CHUNK_WIDTH; z++) { + float noise = Math::noise2d( + {(float)chunk_x * CHUNK_WIDTH + x, (float)chunk_y * CHUNK_WIDTH + z} + ) * extent + base; + + uint height = std::round(noise); + + for (int y = 0; y < CHUNK_HEIGHT; y++) { + BlockType type = BlockType::Air; + if (y < height) { + type = BlockType::Dirt; + } else if (y == height) { + type = BlockType::Grass; + } - for (int x = 0; x < CHUNK_WIDTH; x++) { - for (int z = 0; z < CHUNK_WIDTH; z++) { chunk.set(x, y, z, type); } } |
