diff options
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. |