]> git.lizzy.rs Git - dragonblocks3d.git/blob - src/mapgen.cpp
5cad82c20e631b8444a2f57ba31e509f57f57d79
[dragonblocks3d.git] / src / mapgen.cpp
1 #include <iostream>
2 #include <glm/gtc/noise.hpp>
3 #include "mapgen.hpp" 
4
5 using namespace glm;
6 using namespace dragonblocks;
7
8 Chunk::Data Mapgen::generate(const ivec3 &chunkp) const
9 {
10         Chunk::Data data;
11         vec3 minp = chunkp * ivec3(DRAGONBLOCKS_CHUNK_SIZE);
12         vec3 maxp = minp + vec3(DRAGONBLOCKS_CHUNK_SIZE);
13         int minx = minp.x, miny = minp.y, minz = minp.z, maxx = maxp.x, maxy = maxp.y, maxz = maxp.z;
14         for (int x = minx; x < maxx; x++) {
15                 int rx = x - minx;
16                 for (int z = minz; z < maxz; z++) {
17                         int rz = z - minz;
18                         int grass_layer = grass_layer_middle + grass_layer_range * perlin(vec2((float)x / 64, (float)z / 64));
19                         for (int y = miny; y < maxy; y++) {
20                                 int ry = y - miny;
21                                 BlockDef *blockdef;
22                                 if (y < grass_layer - 4)
23                                         blockdef = stone_def;
24                                 else if (y < grass_layer - 1)
25                                         blockdef = dirt_def;
26                                 else if (y < grass_layer)
27                                         blockdef = grass_def;
28                                 else
29                                         blockdef = air_def;
30                                 data.blocks[rx][ry][rz] = blockdef;
31                         }
32                 }
33         }
34         return data;
35 }