Gloire!
This commit is contained in:
@@ -5,18 +5,44 @@ Chunk::Chunk(int x, int y) : m_posX(x), m_posY(y) { m_blocks.Reset(BTYPE_AIR); }
|
||||
|
||||
Chunk::~Chunk() { }
|
||||
|
||||
void Chunk::RemoveBlock(int x, int y, int z) {
|
||||
void Chunk::RemoveBlock(int x, int y, int z, World* world) {
|
||||
m_blocks.Set(x, y, z, BTYPE_AIR);
|
||||
|
||||
CheckNeighbors(x, y, world);
|
||||
|
||||
m_isDirty = true;
|
||||
}
|
||||
|
||||
void Chunk::SetBlock(int x, int y, int z, BlockType type) {
|
||||
void Chunk::SetBlock(int x, int y, int z, BlockType type, World* world) {
|
||||
m_blocks.Set(x, y, z, type);
|
||||
|
||||
CheckNeighbors(x, y, world);
|
||||
|
||||
m_isDirty = true;
|
||||
}
|
||||
|
||||
BlockType Chunk::GetBlock(int x, int y, int z) { return m_blocks.Get(x, y, z); }
|
||||
|
||||
void Chunk::CheckNeighbors(int x, int z, World* world) {
|
||||
if (x == 0 && m_posX > 0 &&
|
||||
world->ChunkAt((m_posX - 1) * CHUNK_SIZE_X, 1, m_posY * CHUNK_SIZE_Z) &&
|
||||
!world->ChunkAt((m_posX - 1) * CHUNK_SIZE_X, 1, m_posY * CHUNK_SIZE_Z)->IsDirty())
|
||||
world->ChunkAt((m_posX - 1) * CHUNK_SIZE_X, 1, m_posY * CHUNK_SIZE_Z)->MakeDirty();
|
||||
else if (x == CHUNK_SIZE_X - 1 && m_posX < VIEW_DISTANCE &&
|
||||
world->ChunkAt((m_posX + 1) * CHUNK_SIZE_X, 1, m_posY * CHUNK_SIZE_Z) &&
|
||||
!world->ChunkAt((m_posX + 1) * CHUNK_SIZE_X, 1, m_posY * CHUNK_SIZE_Z)->IsDirty())
|
||||
world->ChunkAt((m_posX + 1) * CHUNK_SIZE_X, 1, m_posY * CHUNK_SIZE_Z)->MakeDirty();
|
||||
|
||||
if (z == 0 && m_posY > 0 &&
|
||||
world->ChunkAt(m_posX * CHUNK_SIZE_X, 1, (m_posY - 1) * CHUNK_SIZE_Z) &&
|
||||
!world->ChunkAt(m_posX * CHUNK_SIZE_X, 1, (m_posY - 1) * CHUNK_SIZE_Z)->IsDirty())
|
||||
world->ChunkAt(m_posX * CHUNK_SIZE_X, 1, (m_posY - 1) * CHUNK_SIZE_Z)->MakeDirty();
|
||||
else if (z == CHUNK_SIZE_X - 1 && m_posY < VIEW_DISTANCE &&
|
||||
world->ChunkAt(m_posX * CHUNK_SIZE_X, 1, (m_posY + 1) * CHUNK_SIZE_Z) &&
|
||||
!world->ChunkAt(m_posX * CHUNK_SIZE_X, 1, (m_posY + 1) * CHUNK_SIZE_Z)->IsDirty())
|
||||
world->ChunkAt(m_posX * CHUNK_SIZE_X, 1, (m_posY + 1) * CHUNK_SIZE_Z)->MakeDirty();
|
||||
}
|
||||
|
||||
void Chunk::Update(BlockInfo* blockinfo[BTYPE_LAST], World* world) {
|
||||
float u, v, s;
|
||||
// Update mesh
|
||||
@@ -101,3 +127,5 @@ void Chunk::Render() const { m_vertexBuffer.Render(); }
|
||||
|
||||
bool Chunk::IsDirty() const { return m_isDirty; }
|
||||
|
||||
void Chunk::MakeDirty() { m_isDirty = true; }
|
||||
|
||||
|
Reference in New Issue
Block a user