X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fworld%2FChunkLoader.hpp;h=1c0b98f792b349e69a9f7e997228038cdffcba5a;hb=e4a1425dccd0ba9b106e415dd02809f4308a85ee;hp=b2730a67e15fdcaa2cf1b1e7039cf56d1c507427;hpb=551573ecb04969696f916aeb5485658e298a7f6b;p=blank.git diff --git a/src/world/ChunkLoader.hpp b/src/world/ChunkLoader.hpp index b2730a6..1c0b98f 100644 --- a/src/world/ChunkLoader.hpp +++ b/src/world/ChunkLoader.hpp @@ -1,81 +1,40 @@ #ifndef BLANK_WORLD_CHUNKLOADER_HPP_ #define BLANK_WORLD_CHUNKLOADER_HPP_ -#include "Chunk.hpp" -#include "../app/IntervalTimer.hpp" - -#include +#include 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 &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(); } - void LoadOne(); - void LoadN(std::size_t n); + int ToLoad() const noexcept; -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::iterator Remove(std::list::iterator) noexcept; + // returns true if the chunk was generated + // (as opposed to loaded from file) + bool LoadOne(); + void LoadN(std::size_t n); private: - Chunk::Pos base; - - const BlockTypeRegistry ® + ChunkStore &store; const Generator &gen; const WorldSave &save; - std::list loaded; - std::list to_load; - std::list to_free; - - IntervalTimer gen_timer; - - int load_dist; - int unload_dist; - }; }