diff --git a/res/generators/default.lua b/res/generators/default.lua index 3560f706..75bfb868 100644 --- a/res/generators/default.lua +++ b/res/generators/default.lua @@ -19,7 +19,7 @@ biomes = { {block="base:stone", height=-1}, {block="base:bazalt", height=1}, }, - plant_chance = 0.5, + plant_chance = 0.3, plants = { {block="base:grass", weight=1}, {block="base:flower", weight=0.03}, diff --git a/src/logic/ChunksController.cpp b/src/logic/ChunksController.cpp index d84ed8d4..a1382df5 100644 --- a/src/logic/ChunksController.cpp +++ b/src/logic/ChunksController.cpp @@ -29,7 +29,8 @@ ChunksController::ChunksController(Level* level, uint padding) padding(padding), generator(std::make_unique( level->content->generators.require(level->getWorld()->getGenerator()), - level->content + level->content, + level->getWorld()->getSeed() )) {} ChunksController::~ChunksController() = default; @@ -116,7 +117,7 @@ void ChunksController::createChunk(int x, int z) { auto& chunkFlags = chunk->flags; if (!chunkFlags.loaded) { - generator->generate(chunk->voxels, x, z, level->getWorld()->getSeed()); + generator->generate(chunk->voxels, x, z); chunkFlags.unsaved = true; } chunk->updateHeights(); diff --git a/src/world/generator/WorldGenerator.cpp b/src/world/generator/WorldGenerator.cpp index 1ffcfef5..5fdfb131 100644 --- a/src/world/generator/WorldGenerator.cpp +++ b/src/world/generator/WorldGenerator.cpp @@ -7,23 +7,24 @@ #include "content/Content.hpp" #include "voxels/Block.hpp" #include "voxels/Chunk.hpp" -#include "voxels/voxel.hpp" #include "world/generator/GeneratorDef.hpp" +#include "util/timeutil.hpp" static inline constexpr uint MAX_PARAMETERS = 16; -WorldGenerator::WorldGenerator(const GeneratorDef& def, const Content* content) - : def(def), content(content) { +WorldGenerator::WorldGenerator( + const GeneratorDef& def, const Content* content, uint64_t seed +) + : def(def), content(content), seed(seed) { + voxel voxels[CHUNK_VOL]; } static inline void generate_pole( const BlocksLayers& layers, - int top, - int bottom, + int top, int bottom, int seaLevel, voxel* voxels, - int x, - int z + int x, int z ) { uint y = top; uint layerExtension = 0; @@ -75,11 +76,8 @@ static inline const Biome* choose_biome( return chosenBiome; } -#include "util/timeutil.hpp" -void WorldGenerator::generate( - voxel* voxels, int chunkX, int chunkZ, uint64_t seed -) { - timeutil::ScopeLogTimer log(555); +void WorldGenerator::generate(voxel* voxels, int chunkX, int chunkZ) { + // timeutil::ScopeLogTimer log(555); auto heightmap = def.script->generateHeightmap( {chunkX * CHUNK_W, chunkZ * CHUNK_D}, {CHUNK_W, CHUNK_D}, seed ); diff --git a/src/world/generator/WorldGenerator.hpp b/src/world/generator/WorldGenerator.hpp index 93127d10..6b001eea 100644 --- a/src/world/generator/WorldGenerator.hpp +++ b/src/world/generator/WorldGenerator.hpp @@ -1,8 +1,10 @@ #pragma once #include +#include #include "typedefs.hpp" +#include "voxels/voxel.hpp" struct voxel; class Content; @@ -12,10 +14,15 @@ struct GeneratorDef; class WorldGenerator { const GeneratorDef& def; const Content* content; + uint64_t seed; public: + /// @param def generator definition + /// @param content world content + /// @param seed world seed WorldGenerator( const GeneratorDef& def, - const Content* content + const Content* content, + uint64_t seed ); virtual ~WorldGenerator() = default; @@ -23,8 +30,7 @@ public: /// @param voxels destinatiopn chunk voxels buffer /// @param x chunk position X divided by CHUNK_W /// @param z chunk position Y divided by CHUNK_D - /// @param seed world seed - virtual void generate(voxel* voxels, int x, int z, uint64_t seed); + virtual void generate(voxel* voxels, int x, int z); inline static std::string DEFAULT = "core:default"; };