diff --git a/util/grid/grid3.hpp b/util/grid/grid3.hpp index ae97a25..7a5faa4 100644 --- a/util/grid/grid3.hpp +++ b/util/grid/grid3.hpp @@ -267,65 +267,63 @@ public: float dist = 0; - while (lv != cv && visitedVoxel.size() < 10 && dist < maxDist) { + while (lv != cv && visitedVoxel.size() < 10 && dist < maxDist && inGrid(cv)) { Vec3i currentChunk = getChunkCoord(cv); auto it = activeChunks.find(currentChunk); bool isChunkActive = (it != activeChunks.end() && it->second); + if (get(cv).active) { + visitedVoxel.push_back(cv); + } if (!isChunkActive) { - while (getChunkCoord(cv) == currentChunk && inGrid(cv)) { - Vec3f chunkStep = step * CHUNK_THRESHOLD / 2; - Vec3d chunkDelta = tDelta * CHUNK_THRESHOLD / 2; - if (tMax.x < tMax.y) { - if (tMax.x < tMax.z) { - dist += chunkDelta.x; - cv.x += chunkStep.x; - tMax.x += chunkDelta.x; - } else { - dist += chunkDelta.z; - cv.z += chunkStep.z; - tMax.z += chunkDelta.z; - } + Vec3f chunkStep = step * CHUNK_THRESHOLD / 2; + Vec3d chunkDelta = tDelta * CHUNK_THRESHOLD / 2; + if (tMax.x < tMax.y) { + if (tMax.x < tMax.z) { + dist += chunkDelta.x; + cv.x += chunkStep.x; + tMax.x += chunkDelta.x; } else { - if (tMax.y < tMax.z) { - dist += chunkDelta.y; - cv.y += chunkStep.y; - tMax.y += chunkDelta.y; - } else { - dist += chunkDelta.z; - cv.z += chunkStep.z; - tMax.z += chunkDelta.z; - } + dist += chunkDelta.z; + cv.z += chunkStep.z; + tMax.z += chunkDelta.z; + } + } else { + if (tMax.y < tMax.z) { + dist += chunkDelta.y; + cv.y += chunkStep.y; + tMax.y += chunkDelta.y; + } else { + dist += chunkDelta.z; + cv.z += chunkStep.z; + tMax.z += chunkDelta.z; } } continue; - } - if (get(cv).active) { - visitedVoxel.push_back(cv); - } - - if (tMax.x < tMax.y) { - if (tMax.x < tMax.z) { - dist += tDelta.x; - cv.x += step.x; - tMax.x += tDelta.x; - } else { - dist += tDelta.z; - cv.z += step.z; - tMax.z += tDelta.z; - } } else { - if (tMax.y < tMax.z) { - dist += tDelta.y; - cv.y += step.y; - tMax.y += tDelta.y; + if (tMax.x < tMax.y) { + if (tMax.x < tMax.z) { + dist += tDelta.x; + cv.x += step.x; + tMax.x += tDelta.x; + } else { + dist += tDelta.z; + cv.z += step.z; + tMax.z += tDelta.z; + } } else { - dist += tDelta.z; - cv.z += step.z; - tMax.z += tDelta.z; + if (tMax.y < tMax.z) { + dist += tDelta.y; + cv.y += step.y; + tMax.y += tDelta.y; + } else { + dist += tDelta.z; + cv.z += step.z; + tMax.z += tDelta.z; + } } } } diff --git a/util/vectorlogic/vec3.hpp b/util/vectorlogic/vec3.hpp index 114145e..c3afc3d 100644 --- a/util/vectorlogic/vec3.hpp +++ b/util/vectorlogic/vec3.hpp @@ -259,6 +259,10 @@ public: Vec3 floorToI() const { return Vec3(static_cast(std::floor(x)), static_cast(std::floor(x)), static_cast(std::floor(z))); } + + Vec3 floorToI8() const { + return Vec3(static_cast(std::floor(x)), static_cast(std::floor(x)), static_cast(std::floor(z))); + } Vec3 floorToT() const { return Vec3(static_cast(std::floor(x)), static_cast(std::floor(x)), static_cast(std::floor(z)));