+++ /dev/null
-#pragma once
-
-#include "block.hpp"
-#include "gl.hpp"
-#include "mesh_gen_mgr.hpp"
-
-#define DRAGONBLOCKS_CHUNK_SIZE 16
-
-namespace dragonblocks
-{
- class Map;
- class Mesh;
- class Scene;
-
- class Chunk : public MeshGenMgr::MeshGenerator
- {
- public:
- static void checkPos(const glm::ivec3 &);
-
- class Data
- {
- public:
- Block blocks[DRAGONBLOCKS_CHUNK_SIZE][DRAGONBLOCKS_CHUNK_SIZE][DRAGONBLOCKS_CHUNK_SIZE];
- Data() = default;
- Data(const Data &) = default;
- };
-
- glm::ivec3 pos;
-
- const Block *getBlock(const glm::ivec3 &) const;
- const Block *getBlockNoEx(const glm::ivec3 &) const;
- void setBlock(const glm::ivec3 &, const Block &);
- void setBlockNoEx(const glm::ivec3 &, const Block &);
- void addMeshUpdateTask();
- void addMeshUpdateTaskWithEdge();
- void updateMesh();
-
- Chunk(Map *, const glm::ivec3 &, const Data &, MeshGenMgr *, Scene *);
- ~Chunk();
-
- private:
- static void staticAfterAnimation(void *);
-
- Map *map;
- Mesh *mesh = nullptr;
- MeshGenMgr *mesh_gen_mgr;
- Scene *scene;
- Data data;
- bool animation_finished = false;
- bool mesh_created = false;
-
- void afterAnimation();
- };
-};