X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fvoxelalgorithms.h;h=bcbd3b586bc41beeb52aaca077d3290e52c2159c;hb=e16a470d59069692d654f5c1529ab313a01ded67;hp=b518979d7f095a4a7c92009c4886c901250833dc;hpb=57e5aa662851485902575c3c747437e365bf72c8;p=minetest.git diff --git a/src/voxelalgorithms.h b/src/voxelalgorithms.h index b518979d7..bcbd3b586 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; @@ -33,30 +31,6 @@ class MMVManip; namespace voxalgo { -// TODO: Move unspreadLight and spreadLight from VoxelManipulator to here - -void setLight(VoxelManipulator &v, VoxelArea a, u8 light, - INodeDefManager *ndef); - -void clearLightAndCollectSources(VoxelManipulator &v, VoxelArea a, - enum LightBank bank, INodeDefManager *ndef, - std::set & light_sources, - std::map & unlight_from); - -struct SunlightPropagateResult -{ - bool bottom_sunlight_valid; - - SunlightPropagateResult(bool bottom_sunlight_valid_): - bottom_sunlight_valid(bottom_sunlight_valid_) - {} -}; - -SunlightPropagateResult propagateSunlight(VoxelManipulator &v, VoxelArea a, - bool inexistent_top_provides_sunlight, - std::set & light_sources, - INodeDefManager *ndef); - /*! * Updates the lighting on the map. * The result will be correct only if @@ -71,7 +45,7 @@ SunlightPropagateResult propagateSunlight(VoxelManipulator &v, VoxelArea a, */ void update_lighting_nodes( Map *map, - std::vector > &oldnodes, + const std::vector> &oldnodes, std::map &modified_blocks); /*! @@ -124,21 +98,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. @@ -162,12 +140,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 -