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/raycast.h | |
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/raycast.h')
-rw-r--r-- | src/raycast.h | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/raycast.h b/src/raycast.h index d7ec8c843..d69d9339b 100644 --- a/src/raycast.h +++ b/src/raycast.h @@ -20,6 +20,49 @@ with this program; if not, write to the Free Software Foundation, Inc., #ifndef SRC_RAYCAST_H_ #define SRC_RAYCAST_H_ +#include "voxelalgorithms.h" +#include "util/pointedthing.h" + +//! Sorts PointedThings based on their distance. +struct RaycastSort +{ + bool operator() (const PointedThing &pt1, const PointedThing &pt2) const; +}; + +//! Describes the state of a raycast. +class RaycastState +{ +public: + /*! + * Creates a raycast. + * @param objects_pointable if false, only nodes will be found + * @param liquids pointable if false, liquid nodes won't be found + */ + RaycastState(const core::line3d<f32> &shootline, bool objects_pointable, + bool liquids_pointable); + + //! Shootline of the raycast. + core::line3d<f32> m_shootline; + //! Iterator to store the progress of the raycast. + voxalgo::VoxelLineIterator m_iterator; + //! Previous tested node during the raycast. + v3s16 m_previous_node; + + /*! + * This priority queue stores the found pointed things + * waiting to be returned. + */ + std::priority_queue<PointedThing, std::vector<PointedThing>, RaycastSort> m_found; + + bool m_objects_pointable; + bool m_liquids_pointable; + + //! The code needs to search these nodes around the center node. + core::aabbox3d<s16> m_search_range { 0, 0, 0, 0, 0, 0 }; + + //! If true, the Environment will initialize this state. + bool m_initialization_needed = true; +}; /*! * Checks if a line and a box intersects. |