]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/raycast.h
Fix the documentation of InvRef:get_lists() and clean up code (#12150)
[dragonfireclient.git] / src / raycast.h
index d7ec8c843c5d3a712a8aa21ec89c549dfd7bc450..734efd6ad4ae2cc76f7b1ca9d92b8566bb9d3711 100644 (file)
@@ -17,9 +17,51 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */
 
-#ifndef SRC_RAYCAST_H_
-#define SRC_RAYCAST_H_
+#pragma once
 
+#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.
@@ -33,6 +75,3 @@ with this program; if not, write to the Free Software Foundation, Inc.,
  */
 bool boxLineCollision(const aabb3f &box, const v3f &start, const v3f &dir,
        v3f *collision_point, v3s16 *collision_normal);
-
-
-#endif /* SRC_RAYCAST_H_ */