X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fvoxelalgorithms.h;h=e8f5f64c7c9dd3d9f7979f73415e837bf1d4e0e4;hb=45e9f8081140bfcf45f83508621a94df8f2bce20;hp=cdffe86c8d6284572a71730c9e624dfd33841c9a;hpb=ab371cc93491baf0973ecc94b96c3a1fdb4abfd5;p=dragonfireclient.git diff --git a/src/voxelalgorithms.h b/src/voxelalgorithms.h index cdffe86c8..e8f5f64c7 100644 --- a/src/voxelalgorithms.h +++ b/src/voxelalgorithms.h @@ -17,13 +17,11 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef VOXELALGORITHMS_HEADER -#define VOXELALGORITHMS_HEADER +#pragma once #include "voxel.h" #include "mapnode.h" #include "util/container.h" -#include "util/cpp11_container.h" class Map; class ServerMap; @@ -97,6 +95,15 @@ void update_block_border_lighting(Map *map, MapBlock *block, void blit_back_with_light(ServerMap *map, MMVManip *vm, std::map *modified_blocks); +/*! + * Corrects the light in a map block. + * For server use only. + * + * \param block the block to update + */ +void repair_block_light(ServerMap *map, MapBlock *block, + std::map *modified_blocks); + /*! * This class iterates trough voxels that intersect with * a line. The collision detection does not see nodeboxes, @@ -115,21 +122,25 @@ struct VoxelLineIterator * which multiplying the line's vector gives a vector that ends * on the intersection of two nodes. */ - v3f m_next_intersection_multi; + v3f m_next_intersection_multi { 10000.0f, 10000.0f, 10000.0f }; /*! * Each component stores the smallest positive number, by which * m_next_intersection_multi's components can be increased. */ - v3f m_intersection_multi_inc; + v3f m_intersection_multi_inc { 10000.0f, 10000.0f, 10000.0f }; /*! * Direction of the line. Each component can be -1 or 1 (if a * component of the line's vector is 0, then there will be 1). */ - v3s16 m_step_directions; + v3s16 m_step_directions { 1, 1, 1 }; //! Position of the current node. v3s16 m_current_node_pos; - //! If true, the next node will intersect the line, too. - bool m_has_next; + //! Index of the current node + s16 m_current_index = 0; + //! Position of the start node. + v3s16 m_start_node_pos; + //! Index of the last node + s16 m_last_index; /*! * Creates a voxel line iterator with the given line. @@ -153,12 +164,18 @@ struct VoxelLineIterator /*! * Returns true if the next voxel intersects the given line. */ - inline bool hasNext() const { return m_has_next; } + inline bool hasNext() const + { + return m_current_index < m_last_index; + } + + /*! + * Returns how many times next() must be called until + * voxel==m_current_node_pos. + * If voxel does not intersect with the line, + * the result is undefined. + */ + s16 getIndex(v3s16 voxel); }; } // namespace voxalgo - - - -#endif -