diff options
author | Dániel Juhász <juhdanad@gmail.com> | 2018-08-16 20:10:08 +0200 |
---|---|---|
committer | SmallJoker <SmallJoker@users.noreply.github.com> | 2018-08-16 20:10:08 +0200 |
commit | 325bf680410e8012394e5f3ba5ba947c69034899 (patch) | |
tree | 66ed6c2b0c9d7a1c915006212ecde535699e16c4 /src/environment.cpp | |
parent | 798724efeab2d71da4f041be99de86baa3d3cdd5 (diff) | |
download | minetest-325bf680410e8012394e5f3ba5ba947c69034899.tar.gz minetest-325bf680410e8012394e5f3ba5ba947c69034899.tar.bz2 minetest-325bf680410e8012394e5f3ba5ba947c69034899.zip |
Raycast: export exact pointing location (#6304)
* Return intersection point in node coordinates.
* Clarify 'intersection_point' documentation
Diffstat (limited to 'src/environment.cpp')
-rw-r--r-- | src/environment.cpp | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/environment.cpp b/src/environment.cpp index c2227601a..ac7b7ce69 100644 --- a/src/environment.cpp +++ b/src/environment.cpp @@ -175,12 +175,12 @@ void Environment::continueRaycast(RaycastState *state, PointedThing *result) bool is_colliding = false; // Minimal distance of all collisions float min_distance_sq = 10000000; + // ID of the current box (loop counter) + u16 id = 0; v3f npf = intToFloat(np, BS); - for (std::vector<aabb3f>::const_iterator i = boxes.begin(); - i != boxes.end(); ++i) { - // Get current collision box - aabb3f box = *i; + // This loop translates the boxes to their in-world place. + for (aabb3f &box : boxes) { box.MinEdge += npf; box.MaxEdge += npf; @@ -188,8 +188,10 @@ void Environment::continueRaycast(RaycastState *state, PointedThing *result) v3s16 intersection_normal; if (!boxLineCollision(box, state->m_shootline.start, state->m_shootline.getVector(), &intersection_point, - &intersection_normal)) + &intersection_normal)) { + ++id; continue; + } f32 distanceSq = (intersection_point - state->m_shootline.start).getLengthSQ(); @@ -198,9 +200,11 @@ void Environment::continueRaycast(RaycastState *state, PointedThing *result) min_distance_sq = distanceSq; result.intersection_point = intersection_point; result.intersection_normal = intersection_normal; + result.box_id = id; found_boxcenter = box.getCenter(); is_colliding = true; } + ++id; } // If there wasn't a collision, stop if (!is_colliding) { |