LocalPlayer::accelerateHorizontal: cleanups
[oweals/minetest.git] / src / raycast.h
index d7ec8c843c5d3a712a8aa21ec89c549dfd7bc450..d69d9339b025db06f2f4d75892fac0ee9286804c 100644 (file)
@@ -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.