X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fraycast.h;h=734efd6ad4ae2cc76f7b1ca9d92b8566bb9d3711;hb=cef016d393959e989df259aeacd055fc702a55ca;hp=d7ec8c843c5d3a712a8aa21ec89c549dfd7bc450;hpb=3f8261830e0503cd59d8713d5c9aab12fc1491db;p=dragonfireclient.git diff --git a/src/raycast.h b/src/raycast.h index d7ec8c843..734efd6ad 100644 --- a/src/raycast.h +++ b/src/raycast.h @@ -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 &shootline, bool objects_pointable, + bool liquids_pointable); + + //! Shootline of the raycast. + core::line3d 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, RaycastSort> m_found; + + bool m_objects_pointable; + bool m_liquids_pointable; + + //! The code needs to search these nodes around the center node. + core::aabbox3d 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_ */