summaryrefslogtreecommitdiff
path: root/src/environment.cpp
diff options
context:
space:
mode:
authorDániel Juhász <juhdanad@gmail.com>2018-08-16 20:10:08 +0200
committerSmallJoker <SmallJoker@users.noreply.github.com>2018-08-16 20:10:08 +0200
commit325bf680410e8012394e5f3ba5ba947c69034899 (patch)
tree66ed6c2b0c9d7a1c915006212ecde535699e16c4 /src/environment.cpp
parent798724efeab2d71da4f041be99de86baa3d3cdd5 (diff)
downloadminetest-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.cpp14
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) {