From ec4043bc12d8dba9e3e6504ade7f49edfe5eedd1 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Wed, 17 Jul 2024 19:12:59 +0300 Subject: [PATCH] remove third person cameras height limitation --- src/voxels/Chunks.cpp | 45 +++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/src/voxels/Chunks.cpp b/src/voxels/Chunks.cpp index 53d046d3..1b8aff43 100644 --- a/src/voxels/Chunks.cpp +++ b/src/voxels/Chunks.cpp @@ -554,34 +554,33 @@ glm::vec3 Chunks::rayCastToObstacle(glm::vec3 start, glm::vec3 dir, float maxDis while (t <= maxDist) { voxel* voxel = get(ix, iy, iz); - if (voxel == nullptr) { - return glm::vec3(px + t * dx, py + t * dy, pz + t * dz); - } - const auto def = indices->blocks.get(voxel->id); - if (def->obstacle) { - if (!def->rt.solid) { - const std::vector& hitboxes = def->rotatable - ? def->rt.hitboxes[voxel->state.rotation] - : def->modelBoxes; + if (voxel) { + const auto def = indices->blocks.get(voxel->id); + if (def->obstacle) { + if (!def->rt.solid) { + const std::vector& hitboxes = def->rotatable + ? def->rt.hitboxes[voxel->state.rotation] + : def->modelBoxes; - scalar_t distance; - glm::ivec3 norm; - Ray ray(start, dir); + scalar_t distance; + glm::ivec3 norm; + Ray ray(start, dir); - glm::ivec3 offset {}; - if (voxel->state.segment) { - offset = seekOrigin({ix, iy, iz}, def, voxel->state) - glm::ivec3(ix, iy, iz); - } + glm::ivec3 offset {}; + if (voxel->state.segment) { + offset = seekOrigin({ix, iy, iz}, def, voxel->state) - glm::ivec3(ix, iy, iz); + } - for (const auto& box : hitboxes) { - // norm is dummy now, can be inefficient - if (ray.intersectAABB(glm::ivec3(ix, iy, iz)+offset, box, maxDist, norm, distance) > RayRelation::None) { - return start + (dir * glm::vec3(distance)); + for (const auto& box : hitboxes) { + // norm is dummy now, can be inefficient + if (ray.intersectAABB(glm::ivec3(ix, iy, iz)+offset, box, maxDist, norm, distance) > RayRelation::None) { + return start + (dir * glm::vec3(distance)); + } } } - } - else { - return glm::vec3(px + t * dx, py + t * dy, pz + t * dz); + else { + return glm::vec3(px + t * dx, py + t * dy, pz + t * dz); + } } } if (txMax < tyMax) {