9#include "LayerBuffer.h"
10#include "block/Block.h"
11#include "block/BlockState.h"
12#include "block/VariantBlock.h"
13#include "block/Vertex.h"
14#include "data/IChunkData.h"
15#include "render/Renderable.h"
18#include <LWGL/buffer/Attributes.h>
39 static inline glm::ivec3 Dims{16, 16, 16};
49 glm::ivec3
position()
const {
return m_coords * m_data->dims; }
54 virtual glm::ivec3
dims()
const {
return m_data->dims; }
56 World* world()
const {
return m_world; }
60 return static_cast<T*
>(m_world);
65 bool generated()
const {
return m_generated; }
73 const Block* getBlock(glm::ivec3 pos, BlockState** state =
nullptr);
74 void setBlock(
const glm::ivec3& pos, BlockID block);
75 void setBlock(
const glm::ivec3& pos, BlockID block, BlockState state);
76 void setBlock(
const glm::ivec3& pos, MultiBlock&& multiBlock);
96 void serialize(std::ostream& out)
const override;
97 void deserialize(std::istream& in)
override;
103 std::unique_ptr<IChunkData> m_data;
104 bool m_dirty =
false;
115 gl::Attributes<Vertex>& storage;
116 glm::ivec3 posInChunk;
123 void generateMeshForBlock(
127 const glm::ivec3& chunkBlockCoords
129 void generateMeshForBlock(
133 const glm::ivec3& chunkBlockCoords
135 void generateMeshForBlock(
139 const glm::ivec3& chunkBlockCoords
143 std::array<LayerBuffer, 3> m_renderLayers;
145 bool m_generated =
false;
146 std::atomic_bool m_generatingMesh =
false;
Definition BlockState.h:17
IChunkData * data()
Definition Chunk.h:80
glm::ivec3 position() const
Definition Chunk.h:49
const IChunkData * data() const
Definition Chunk.h:82
virtual void afterGenerated()
Definition Chunk.h:93
bool generateMesh()
Generates the mesh data for the chunk.
Definition Chunk.cpp:45
virtual glm::ivec3 dims() const
Get the dimensions of this chunk type.
Definition Chunk.h:54
const ChunkID & id() const
Definition Chunk.h:47
void render(Engine &engine, const Camera *camera, int pass) override
Renders the chunk.
Definition Chunk.cpp:151
void populateTerrainData()
Generates the chunk data per TerrainGenerator if not generated yet.
Definition Chunk.cpp:37
Interface for chunk data representation.
Definition IChunkData.h:17
Definition ISerializable.h:6
A MultiBlock represents multiple blocks at the same position.
Definition MultiBlock.h:19
Definition Renderable.h:10
A variant block is a block that can have multiple geometries based on the surrounding blocks.
Definition VariantBlock.h:16
Definition VariantBlock.h:55