diff options
author | tylermurphy534 <tylermurphy534@gmail.com> | 2022-10-03 06:50:49 -0400 |
---|---|---|
committer | tylermurphy534 <tylermurphy534@gmail.com> | 2022-10-03 06:50:49 -0400 |
commit | 1701aa5a616f3de55b0a426f8d9e679f2c98a0c6 (patch) | |
tree | 87a6c13fb8b7884046f9fdf8c0b7dcaaf6952f28 /src/chunk.cpp | |
parent | move chunk loading into world class (diff) | |
download | minecraftvulkan-1701aa5a616f3de55b0a426f8d9e679f2c98a0c6.tar.gz minecraftvulkan-1701aa5a616f3de55b0a426f8d9e679f2c98a0c6.tar.bz2 minecraftvulkan-1701aa5a616f3de55b0a426f8d9e679f2c98a0c6.zip |
Diffstat (limited to 'src/chunk.cpp')
-rw-r--r-- | src/chunk.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/chunk.cpp b/src/chunk.cpp index 55f8832..18e3c69 100644 --- a/src/chunk.cpp +++ b/src/chunk.cpp @@ -391,6 +391,29 @@ void Chunk::setBlock(int32_t x, int32_t y, int32_t z, uint8_t block) { cubes[index] = block; } +uint8_t Chunk::getGlobalBlock(int32_t x, int32_t y, int32_t z) { + if(y >= CHUNK_SIZE.y) return AIR; + if(y < 0) return INVALID; + int gridX = static_cast<int>(floor(x / Chunk::CHUNK_SIZE.x)); + int gridZ = static_cast<int>(floor(z / Chunk::CHUNK_SIZE.z)); + Chunk* chunk = getChunk(gridX, gridZ); + if(chunk == nullptr) return INVALID; + int localX = x - gridX * CHUNK_SIZE.x; + int localZ = z - gridZ * CHUNK_SIZE.z; + return chunk->getBlock(localX, y, localZ); +} + +void Chunk::setGlobalBlock(int32_t x, int32_t y, int32_t z, uint8_t block) { + if(y < 0 || y >= CHUNK_SIZE.y) return; + int gridX = static_cast<int>(x % Chunk::CHUNK_SIZE.x); + int gridZ = static_cast<int>(floor(z / Chunk::CHUNK_SIZE.z)); + Chunk* chunk = getChunk(gridX, gridZ); + if(chunk == nullptr) return; + int localX = x - gridX * CHUNK_SIZE.x; + int localZ = z - gridZ * CHUNK_SIZE.z; + chunk->setBlock(localX, y, localZ, block); +} + bool Chunk::isGenerated(int32_t gridX, int32_t gridZ) { Chunk* chunk = Chunk::getChunk(gridX, gridZ); if(chunk == nullptr) return false; |