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