X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fworld.hpp;h=1d43fbe7ffce45e2929ea659ea48293be33daa33;hb=35c09fc00094a3d390732fd533b2bd03413d90c7;hp=461da5623f5874c7fae25e9923359eaa29e4ead5;hpb=eca1fdcc8e34a4918418b2de122c6200aeb7ceaf;p=blank.git diff --git a/src/world.hpp b/src/world.hpp index 461da56..1d43fbe 100644 --- a/src/world.hpp +++ b/src/world.hpp @@ -4,7 +4,7 @@ #include "block.hpp" #include "chunk.hpp" #include "entity.hpp" -#include "noise.hpp" +#include "generator.hpp" #include "shader.hpp" #include "shape.hpp" @@ -17,9 +17,22 @@ namespace blank { class World { public: - World(); - - void Generate(const Chunk::Pos &from, const Chunk::Pos &to); + struct Config { + // initial player position + glm::vec3 spawn = { 4.0f, 4.0f, 4.0f }; + // direction facing towards(!) the light + glm::vec3 light_direction = { -1.0f, -3.0f, -2.0f }; + // fade out reaches 1/e (0.3679) at 1/fog_density, + // gets less than 0.01 at e/(2 * fog_density) + // I chose 0.011 because it yields 91 and 124 for those, so + // slightly less than 6 and 8 chunks + float fog_density = 0.011f; + + Generator::Config gen = Generator::Config(); + ChunkLoader::Config load = ChunkLoader::Config(); + }; + + explicit World(const Config &); bool Intersection( const Ray &, @@ -30,22 +43,16 @@ public: glm::vec3 *normal = nullptr); BlockTypeRegistry &BlockTypes() { return blockType; } - std::list &LoadedChunks() { return loaded; } - Entity &Player() { return player; } + Entity &Player() { return *player; } + Entity &AddEntity() { entities.emplace_back(); return entities.back(); } - Chunk *ChunkLoaded(const Chunk::Pos &); - Chunk *ChunkQueued(const Chunk::Pos &); - Chunk *ChunkAvailable(const Chunk::Pos &); - Chunk &Next(const Chunk &, const glm::tvec3 &dir); + Chunk &PlayerChunk(); + Chunk &Next(const Chunk &to, const glm::tvec3 &dir); void Update(int dt); - void CheckChunkGeneration(); - - void Render(DirectionalLighting &); -private: - void Generate(Chunk &); + void Render(BlockLighting &, DirectionalLighting &); private: BlockTypeRegistry blockType; @@ -53,15 +60,14 @@ private: StairShape stairShape; CuboidShape slabShape; - SimplexNoise blockNoise; - SimplexNoise colorNoise; + Generator generate; + ChunkLoader chunks; - Entity player; - Chunk::Pos player_chunk; + Entity *player; + std::list entities; - std::list loaded; - std::list to_generate; - std::list to_free; + glm::vec3 light_direction; + float fog_density; };