1 #ifndef BLANK_WORLD_CHUNKLOADER_HPP_
2 #define BLANK_WORLD_CHUNKLOADER_HPP_
5 #include "../app/IntervalTimer.hpp"
12 class BlockTypeRegistry;
24 ChunkLoader(const Config &, const BlockTypeRegistry &, const Generator &) noexcept;
26 void Generate(const Chunk::Pos &from, const Chunk::Pos &to);
27 void GenerateSurrounding(const Chunk::Pos &);
29 std::list<Chunk> &Loaded() noexcept { return loaded; }
31 Chunk *Loaded(const Chunk::Pos &) noexcept;
32 bool Queued(const Chunk::Pos &) noexcept;
33 bool Known(const Chunk::Pos &) noexcept;
34 Chunk &ForceLoad(const Chunk::Pos &);
36 bool OutOfRange(const Chunk &c) const noexcept { return OutOfRange(c.Position()); }
37 bool OutOfRange(const Chunk::Pos &) const noexcept;
39 void Rebase(const Chunk::Pos &);
43 Chunk &Generate(const Chunk::Pos &pos);
44 // link given chunk to all loaded neighbors
45 void Insert(Chunk &) noexcept;
46 // remove a loaded chunk
47 // this unlinks it from its neighbors as well as moves it to the free list
48 // given iterator must point to a chunk from the loaded list
49 // returns an iterator to the chunk following the removed one
50 // in the loaded list (end for the last one)
51 std::list<Chunk>::iterator Remove(std::list<Chunk>::iterator) noexcept;
56 const BlockTypeRegistry ®
59 std::list<Chunk> loaded;
60 std::list<Chunk::Pos> to_generate;
61 std::list<Chunk> to_free;
63 IntervalTimer gen_timer;