From 98813472a8c25b1de93dd5d843af38c5aec9b1d8 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Fri, 11 Apr 2025 20:37:08 +0300 Subject: [PATCH] fix generator area centering --- src/logic/LevelController.cpp | 4 ++-- src/voxels/Chunks.cpp | 6 +++--- src/world/generator/WorldGenerator.cpp | 4 +--- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/logic/LevelController.cpp b/src/logic/LevelController.cpp index 4404fb3a..f1aca628 100644 --- a/src/logic/LevelController.cpp +++ b/src/logic/LevelController.cpp @@ -77,8 +77,8 @@ void LevelController::update(float delta, bool pause) { player->updateEntity(); glm::vec3 position = player->getPosition(); player->chunks->configure( - position.x, - position.z, + glm::floor(position.x), + glm::floor(position.z), settings.chunks.loadDistance.get() + settings.chunks.padding.get() ); chunks->update( diff --git a/src/voxels/Chunks.cpp b/src/voxels/Chunks.cpp index 5b5a2cd9..ce533889 100644 --- a/src/voxels/Chunks.cpp +++ b/src/voxels/Chunks.cpp @@ -32,18 +32,18 @@ Chunks::Chunks( : events(events), indices(indices), areaMap(w, d) { - areaMap.setCenter(ox-w/2, oz-d/2); + areaMap.setCenter(ox - w / 2, oz - d / 2); areaMap.setOutCallback([this](int, int, const auto& chunk) { this->events->trigger(LevelEventType::CHUNK_HIDDEN, chunk.get()); }); } void Chunks::configure(int32_t x, int32_t z, uint32_t radius) { - setCenter(x, z); uint32_t diameter = radius * 2LL; if (getWidth() != diameter) { resize(diameter, diameter); } + setCenter(x, z); } voxel* Chunks::get(int32_t x, int32_t y, int32_t z) const { @@ -313,7 +313,7 @@ glm::vec3 Chunks::rayCastToObstacle( } void Chunks::setCenter(int32_t x, int32_t z) { - areaMap.setCenter(floordiv(x, CHUNK_W), floordiv(z, CHUNK_D)); + areaMap.setCenter(floordiv(x), floordiv(z)); } void Chunks::resize(uint32_t newW, uint32_t newD) { diff --git a/src/world/generator/WorldGenerator.cpp b/src/world/generator/WorldGenerator.cpp index 9ebd9067..e2bf4a86 100644 --- a/src/world/generator/WorldGenerator.cpp +++ b/src/world/generator/WorldGenerator.cpp @@ -355,9 +355,7 @@ void WorldGenerator::generateHeightmap( void WorldGenerator::update(int centerX, int centerY, int loadDistance) { surroundMap.setCenter(centerX, centerY); - // 3 is safety padding preventing ChunksController rounding problem - // FIXME - surroundMap.resize(loadDistance + 3); + surroundMap.resize(loadDistance); surroundMap.setCenter(centerX, centerY); }