]> git.localhorst.tv Git - blank.git/blobdiff - src/world/ChunkLoader.hpp
different limits for reading and generating chunks
[blank.git] / src / world / ChunkLoader.hpp
index 6a8c2c19ac30d2143d42f85f01512d68c63af531..81e7178a5f4c4bb203b1a8a5ce72317d8e67823d 100644 (file)
@@ -11,6 +11,7 @@ namespace blank {
 
 class BlockTypeRegistry;
 class Generator;
+class WorldSave;
 
 class ChunkLoader {
 
@@ -21,10 +22,15 @@ public:
                int gen_limit = 16;
        };
 
-       ChunkLoader(const Config &, const BlockTypeRegistry &, const Generator &) noexcept;
+       ChunkLoader(
+               const Config &,
+               const BlockTypeRegistry &,
+               const Generator &,
+               const WorldSave &
+       ) noexcept;
 
-       void Generate(const Chunk::Pos &from, const Chunk::Pos &to);
-       void GenerateSurrounding(const Chunk::Pos &);
+       void Queue(const Chunk::Pos &from, const Chunk::Pos &to);
+       void QueueSurrounding(const Chunk::Pos &);
 
        std::list<Chunk> &Loaded() noexcept { return loaded; }
 
@@ -39,12 +45,13 @@ public:
        void Rebase(const Chunk::Pos &);
        void Update(int dt);
 
-       std::size_t ToLoad() const noexcept { return to_generate.size(); }
-       void LoadOne();
+       std::size_t ToLoad() const noexcept { return to_load.size(); }
+       // returns true if the chunk was generated
+       bool LoadOne();
        void LoadN(std::size_t n);
 
 private:
-       Chunk &Generate(const Chunk::Pos &pos);
+       Chunk &Load(const Chunk::Pos &pos);
        // link given chunk to all loaded neighbors
        void Insert(Chunk &) noexcept;
        // remove a loaded chunk
@@ -59,9 +66,10 @@ private:
 
        const BlockTypeRegistry &reg;
        const Generator &gen;
+       const WorldSave &save;
 
        std::list<Chunk> loaded;
-       std::list<Chunk::Pos> to_generate;
+       std::list<Chunk::Pos> to_load;
        std::list<Chunk> to_free;
 
        IntervalTimer gen_timer;