From 70d309dfd9ea92369429f2985b67e24dd35eeadb Mon Sep 17 00:00:00 2001 From: InfiniteCoder Date: Sat, 24 Feb 2024 12:06:35 +0300 Subject: [PATCH] Done --- src/voxels/Chunks.cpp | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/src/voxels/Chunks.cpp b/src/voxels/Chunks.cpp index df7e651d..cbac2c21 100644 --- a/src/voxels/Chunks.cpp +++ b/src/voxels/Chunks.cpp @@ -247,16 +247,28 @@ voxel* Chunks::rayCast(glm::vec3 start, iend.z = iz; if (!def->rt.solid) { - const AABB& box = def->rotatable - ? def->rt.hitboxes[voxel->rotation()] - : def->hitbox; - scalar_t distance; - Ray ray(start, dir); - if (ray.intersectAABB(iend, box, maxDist, norm, distance) > RayRelation::None){ - end = start + (dir * glm::vec3(distance)); - return voxel; - } + std::vector hitboxes; + if (def->hitboxExplicit) { + hitboxes = { + def->rotatable + ? def->rt.hitboxes[voxel->rotation()] + : def->hitbox + }; + } else { + hitboxes = def->rotatable + ? def->rt.modelBoxes[voxel->rotation()] + : def->modelBoxes; + } + scalar_t distance; + Ray ray(start, dir); + + for (const auto& box : hitboxes) { + if (ray.intersectAABB(iend, box, maxDist, norm, distance) > RayRelation::None) { + end = start + (dir * glm::vec3(distance)); + return voxel; + } + } } else { iend.x = ix; iend.y = iy;