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