summary refs log tree commit diff
path: root/src/World/Generator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/World/Generator.cpp')
-rw-r--r--src/World/Generator.cpp28
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);
             }
         }