namespace blank {
-class Assets;
+class AssetLoader;
+class BlockModel;
+class ChunkIndex;
class TextureIndex;
class Viewport;
-class World;
class ChunkRenderer {
public:
- /// render_distance in chunks, excluding the base chunk which is always rendered
- ChunkRenderer(World &, int render_distance);
+ explicit ChunkRenderer(ChunkIndex &);
+ ~ChunkRenderer();
- void LoadTextures(const Assets &, const TextureIndex &);
+ void LoadTextures(const AssetLoader &, const TextureIndex &);
void FogDensity(float d) noexcept { fog_density = d; }
- bool InRange(const Chunk::Pos &) const noexcept;
- int IndexOf(const Chunk::Pos &) const noexcept;
+ int MissingChunks() const noexcept;
- int TotalChunks() const noexcept { return total_length; }
- int IndexedChunks() const noexcept { return total_indexed; }
- int MissingChunks() const noexcept { return total_length - total_indexed; }
-
- void Rebase(const Chunk::Pos &);
- void Rescan();
- void Scan();
void Update(int dt);
void Render(Viewport &);
private:
- int GetCol(int) const noexcept;
-
- void Shift(Block::Face);
-
-private:
- World &world;
- ArrayTexture block_tex;
-
- int render_dist;
- int side_length;
- int total_length;
- int total_indexed;
- glm::ivec3 stride;
+ ChunkIndex &index;
std::vector<BlockModel> models;
- std::vector<Chunk *> chunks;
- Chunk::Pos base;
+ ArrayTexture block_tex;
float fog_density;