diff options
author | Dániel Juhász <juhdanad@gmail.com> | 2016-07-23 21:11:20 +0200 |
---|---|---|
committer | paramat <mat.gregory@virginmedia.com> | 2017-07-07 22:28:23 +0100 |
commit | 3caad3f3c9e319ca67d63231e8c64b2ace855fff (patch) | |
tree | f3cb283b7aa28958e2deec7c70dad3a85e1236d4 /src/util/pointedthing.cpp | |
parent | a80ecbee1e838491343af760539a37fac4232048 (diff) | |
download | minetest-3caad3f3c9e319ca67d63231e8c64b2ace855fff.tar.gz minetest-3caad3f3c9e319ca67d63231e8c64b2ace855fff.tar.bz2 minetest-3caad3f3c9e319ca67d63231e8c64b2ace855fff.zip |
Expose getPointedThing to Lua
This commit introduces Raycast, a Lua user object, which can be
used to perform a raycast on the map. The ray is continuable, so one can
also get hidden nodes (for example to see trough glass).
Diffstat (limited to 'src/util/pointedthing.cpp')
-rw-r--r-- | src/util/pointedthing.cpp | 46 |
1 files changed, 36 insertions, 10 deletions
diff --git a/src/util/pointedthing.cpp b/src/util/pointedthing.cpp index f1f1d3f20..e5c5dcf4c 100644 --- a/src/util/pointedthing.cpp +++ b/src/util/pointedthing.cpp @@ -23,20 +23,47 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "../exceptions.h" #include <sstream> +PointedThing::PointedThing(const v3s16 &under, const v3s16 &above, + const v3s16 &real_under, const v3f &point, const v3s16 &normal, + f32 distSq): + type(POINTEDTHING_NODE), + node_undersurface(under), + node_abovesurface(above), + node_real_undersurface(real_under), + intersection_point(point), + intersection_normal(normal), + distanceSq(distSq) +{} + +PointedThing::PointedThing(s16 id, const v3f &point, const v3s16 &normal, + f32 distSq) : + type(POINTEDTHING_OBJECT), + object_id(id), + intersection_point(point), + intersection_normal(normal), + distanceSq(distSq) +{} + std::string PointedThing::dump() const { std::ostringstream os(std::ios::binary); - if (type == POINTEDTHING_NOTHING) { - os<<"[nothing]"; - } else if (type == POINTEDTHING_NODE) { + switch (type) { + case POINTEDTHING_NOTHING: + os << "[nothing]"; + break; + case POINTEDTHING_NODE: + { const v3s16 &u = node_undersurface; const v3s16 &a = node_abovesurface; - os<<"[node under="<<u.X<<","<<u.Y<<","<<u.Z - << " above="<<a.X<<","<<a.Y<<","<<a.Z<<"]"; - } else if (type == POINTEDTHING_OBJECT) { - os<<"[object "<<object_id<<"]"; - } else { - os<<"[unknown PointedThing]"; + os << "[node under=" << u.X << "," << u.Y << "," << u.Z << " above=" + << a.X << "," << a.Y << "," << a.Z << "]"; + } + break; + case POINTEDTHING_OBJECT: + os << "[object " << object_id << "]"; + break; + default: + os << "[unknown PointedThing]"; } return os.str(); } @@ -104,4 +131,3 @@ bool PointedThing::operator!=(const PointedThing &pt2) const { return !(*this == pt2); } - |