summaryrefslogtreecommitdiff
path: root/src/chunk.cpp
diff options
context:
space:
mode:
authortylermurphy534 <tylermurphy534@gmail.com>2022-10-03 06:50:49 -0400
committertylermurphy534 <tylermurphy534@gmail.com>2022-10-03 06:50:49 -0400
commit1701aa5a616f3de55b0a426f8d9e679f2c98a0c6 (patch)
tree87a6c13fb8b7884046f9fdf8c0b7dcaaf6952f28 /src/chunk.cpp
parentmove chunk loading into world class (diff)
downloadminecraftvulkan-1701aa5a616f3de55b0a426f8d9e679f2c98a0c6.tar.gz
minecraftvulkan-1701aa5a616f3de55b0a426f8d9e679f2c98a0c6.tar.bz2
minecraftvulkan-1701aa5a616f3de55b0a426f8d9e679f2c98a0c6.zip
mouse pickingHEADmain
Diffstat (limited to 'src/chunk.cpp')
-rw-r--r--src/chunk.cpp23
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;