From 3edd271b81fec44575cb9c82bf4ba68e685e450e Mon Sep 17 00:00:00 2001 From: tylermurphy534 Date: Wed, 28 Sep 2022 23:20:37 -0400 Subject: [PATCH] shrub biome --- res/image/shrub.png | Bin 0 -> 5937 bytes res/image/shrub_top.png | Bin 0 -> 6001 bytes res/shaders/simple_shader.frag | 2 +- src/chunk.cpp | 12 ++++++++---- src/chunk.hpp | 6 +++++- src/first_app.hpp | 2 +- src/keyboard_movement_controller.hpp | 2 +- 7 files changed, 16 insertions(+), 8 deletions(-) create mode 100644 res/image/shrub.png create mode 100644 res/image/shrub_top.png diff --git a/res/image/shrub.png b/res/image/shrub.png new file mode 100644 index 0000000000000000000000000000000000000000..a6421d44f7b52f2df11bf1d6ed2c4d76df19c817 GIT binary patch literal 5937 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 Chunk::getTextures() { void Chunk::load() { blocks[DIRT] = {{getTexture(DIRT_TEXTURE), getTexture(DIRT_TEXTURE), getTexture(DIRT_TEXTURE), getTexture(DIRT_TEXTURE), getTexture(DIRT_TEXTURE), getTexture(DIRT_TEXTURE)}}; blocks[GRASS] = {{getTexture(GRASS_TEXTURE), getTexture(GRASS_TEXTURE), getTexture(GRASS_TOP_TEXTURE), getTexture(DIRT_TEXTURE), getTexture(GRASS_TEXTURE), getTexture(GRASS_TEXTURE)}}; - blocks[GREEN] = {{getTexture(GRASS_TOP_TEXTURE), getTexture(GRASS_TOP_TEXTURE), getTexture(GRASS_TOP_TEXTURE), getTexture(GRASS_TOP_TEXTURE), getTexture(GRASS_TOP_TEXTURE), getTexture(GRASS_TOP_TEXTURE)}}; + blocks[FULL_GRASS] = {{getTexture(GRASS_TOP_TEXTURE), getTexture(GRASS_TOP_TEXTURE), getTexture(GRASS_TOP_TEXTURE), getTexture(GRASS_TOP_TEXTURE), getTexture(GRASS_TOP_TEXTURE), getTexture(GRASS_TOP_TEXTURE)}}; blocks[STONE] = {{getTexture(STONE_TEXTURE), getTexture(STONE_TEXTURE), getTexture(STONE_TEXTURE), getTexture(STONE_TEXTURE), getTexture(STONE_TEXTURE), getTexture(STONE_TEXTURE)}}; blocks[SNOW] = {{getTexture(SNOW_TEXTURE), getTexture(SNOW_TEXTURE), getTexture(SNOW_TEXTURE), getTexture(SNOW_TEXTURE), getTexture(SNOW_TEXTURE), getTexture(SNOW_TEXTURE)}}; blocks[SAND] = {{getTexture(SAND_TEXTURE), getTexture(SAND_TEXTURE), getTexture(SAND_TEXTURE), getTexture(SAND_TEXTURE), getTexture(SAND_TEXTURE), getTexture(SAND_TEXTURE)}}; blocks[WATER] = {{getTexture(WATER_TEXTURE), getTexture(WATER_TEXTURE), getTexture(WATER_TEXTURE), getTexture(WATER_TEXTURE), getTexture(WATER_TEXTURE), getTexture(WATER_TEXTURE)}}; + blocks[SHRUB] = {{getTexture(SHRUB_TEXTURE), getTexture(SHRUB_TEXTURE), getTexture(SHRUB_TOP_TEXTURE), getTexture(DIRT_TEXTURE), getTexture(SHRUB_TEXTURE), getTexture(SHRUB_TEXTURE)}}; + blocks[FULL_SHRUB] = {{getTexture(SHRUB_TOP_TEXTURE), getTexture(SHRUB_TOP_TEXTURE), getTexture(SHRUB_TOP_TEXTURE), getTexture(SHRUB_TOP_TEXTURE), getTexture(SHRUB_TOP_TEXTURE), getTexture(SHRUB_TOP_TEXTURE)}}; } void Chunk::unload() { @@ -178,8 +180,10 @@ void Chunk::generate(Chunk* c) { for(int x = 0; x < 16; x++) { for(int z = 0; z < 16; z++) { + double biome = perlin.octave2D_01((( x + c->gridX * 13) * 0.0005), ((z + c->gridZ * 13) * 0.0005), 4) * 2; + double continent = perlin.octave2D_01((( x + c->gridX * 16) * 0.001), ((z + c->gridZ * 16) * 0.001), 4) * 10 - 5; double noise = perlin.octave2D_01((( x + c->gridX * 16) * 0.01), ((z + c->gridZ * 16) * 0.01), 4); - int height = noise * 40; + int height = noise * 40 + continent; for(int y = 0; y < std::max(height, WATER_LEVEL); y++) { int difference = y - WATER_LEVEL; if (difference < 0) { @@ -189,9 +193,9 @@ void Chunk::generate(Chunk* c) { } else if(difference < 5) { c->setBlock(x, y, z, DIRT); } else if(difference < 6) { - c->setBlock(x, y, z, GRASS); + c->setBlock(x, y, z, biome > 1 ? GRASS : SHRUB); } else if(difference < 10) { - c->setBlock(x, y, z, GREEN); + c->setBlock(x, y, z, biome > 1 ? FULL_GRASS : FULL_SHRUB); } else if(difference < 16) { c->setBlock(x, y, z, STONE); } else if(difference < 18) { diff --git a/src/chunk.hpp b/src/chunk.hpp index 8d1f03c..18230c8 100644 --- a/src/chunk.hpp +++ b/src/chunk.hpp @@ -19,11 +19,13 @@ #define AIR 0 #define DIRT 1 #define GRASS 2 -#define GREEN 3 +#define FULL_GRASS 3 #define STONE 4 #define SNOW 5 #define SAND 6 #define WATER 7 +#define SHRUB 8 +#define FULL_SHRUB 9 #define DIRT_TEXTURE "res/image/dirt.png" #define GRASS_TEXTURE "res/image/grass.png" @@ -32,6 +34,8 @@ #define SNOW_TEXTURE "res/image/snow.png" #define SAND_TEXTURE "res/image/sand.png" #define WATER_TEXTURE "res/image/water.png" +#define SHRUB_TEXTURE "res/image/shrub.png" +#define SHRUB_TOP_TEXTURE "res/image/shrub_top.png" static constexpr int WATER_LEVEL = 20; diff --git a/src/first_app.hpp b/src/first_app.hpp index dc912fb..3d97bad 100755 --- a/src/first_app.hpp +++ b/src/first_app.hpp @@ -32,7 +32,7 @@ class FirstApp { static constexpr int WIDTH = 800; static constexpr int HEIGHT = 600; - static constexpr int RENDER_DISTANCE = 15; + static constexpr int RENDER_DISTANCE = 25; void createGameObjects(xe::GameObject& viewer); void reloadLoadedChunks(xe::GameObject& viewer); diff --git a/src/keyboard_movement_controller.hpp b/src/keyboard_movement_controller.hpp index 5577bbf..ff7faf8 100644 --- a/src/keyboard_movement_controller.hpp +++ b/src/keyboard_movement_controller.hpp @@ -36,7 +36,7 @@ namespace app { xe::GameObject &viewerObject; KeyMappings keys{}; - float moveSpeed{30.f}; + float moveSpeed{250.f}; float lookSpeed{1.5f}; };