]> git.localhorst.tv Git - blank.git/blobdiff - src/world/ChunkLoader.hpp
try to cleanly destruct world
[blank.git] / src / world / ChunkLoader.hpp
index 7cc8dfca917cce00ad8234d9f4339126173f2c7f..1c0b98f792b349e69a9f7e997228038cdffcba5a 100644 (file)
@@ -1,83 +1,40 @@
 #ifndef BLANK_WORLD_CHUNKLOADER_HPP_
 #define BLANK_WORLD_CHUNKLOADER_HPP_
 
-#include "Chunk.hpp"
-#include "../app/IntervalTimer.hpp"
-
-#include <list>
+#include <cstddef>
 
 
 namespace blank {
 
-class BlockTypeRegistry;
+class ChunkStore;
 class Generator;
 class WorldSave;
 
 class ChunkLoader {
 
 public:
-       struct Config {
-               int load_dist = 6;
-               int unload_dist = 8;
-               int gen_limit = 16;
-       };
-
        ChunkLoader(
-               const Config &,
-               const BlockTypeRegistry &,
+               ChunkStore &,
                const Generator &,
                const WorldSave &
        ) noexcept;
 
-       void Queue(const Chunk::Pos &from, const Chunk::Pos &to);
-       void QueueSurrounding(const Chunk::Pos &);
-
-       std::list<Chunk> &Loaded() noexcept { return loaded; }
        const WorldSave &SaveFile() const noexcept { return save; }
 
-       Chunk *Loaded(const Chunk::Pos &) noexcept;
-       bool Queued(const Chunk::Pos &) noexcept;
-       bool Known(const Chunk::Pos &) noexcept;
-       Chunk &ForceLoad(const Chunk::Pos &);
-
-       bool OutOfRange(const Chunk &c) const noexcept { return OutOfRange(c.Position()); }
-       bool OutOfRange(const Chunk::Pos &) const noexcept;
-
-       void Rebase(const Chunk::Pos &);
        void Update(int dt);
 
-       std::size_t ToLoad() const noexcept { return to_load.size(); }
+       int ToLoad() const noexcept;
+
        // returns true if the chunk was generated
+       // (as opposed to loaded from file)
        bool LoadOne();
        void LoadN(std::size_t n);
 
 private:
-       Chunk &Load(const Chunk::Pos &pos);
-       // link given chunk to all loaded neighbors
-       void Insert(Chunk &) noexcept;
-       // remove a loaded chunk
-       // this unlinks it from its neighbors as well as moves it to the free list
-       // given iterator must point to a chunk from the loaded list
-       // returns an iterator to the chunk following the removed one
-       // in the loaded list (end for the last one)
-       std::list<Chunk>::iterator Remove(std::list<Chunk>::iterator) noexcept;
-
-private:
-       Chunk::Pos base;
-
-       const BlockTypeRegistry &reg;
+       ChunkStore &store;
        const Generator &gen;
        const WorldSave &save;
 
-       std::list<Chunk> loaded;
-       std::list<Chunk::Pos> to_load;
-       std::list<Chunk> to_free;
-
-       IntervalTimer gen_timer;
-
-       int load_dist;
-       int unload_dist;
-
 };
 
 }