X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fvoxel.h;h=bed35b57e87a43acc9818995a4a24b91a07c37d9;hb=96fe1de8322a57ad82fcab3540c1eb44f74b9989;hp=2373667560dbe2ca7e904bc027c2a5dc58a93282;hpb=56496ad5d8a7662b0ae5c9f25d1348cb7b677b65;p=dragonfireclient.git diff --git a/src/voxel.h b/src/voxel.h index 237366756..bed35b57e 100644 --- a/src/voxel.h +++ b/src/voxel.h @@ -1,18 +1,18 @@ /* -Minetest-c55 -Copyright (C) 2010 celeron55, Perttu Ahola +Minetest +Copyright (C) 2013 celeron55, Perttu Ahola This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. +GNU Lesser General Public License for more details. -You should have received a copy of the GNU General Public License along +You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ @@ -21,9 +21,13 @@ with this program; if not, write to the Free Software Foundation, Inc., #define VOXEL_HEADER #include "irrlichttypes.h" +#include "irr_v3d.h" +#include #include #include "debug.h" #include "mapnode.h" +#include +#include class INodeDefManager; @@ -70,7 +74,7 @@ class VoxelArea MaxEdge(p) { } - + /* Modifying methods */ @@ -104,14 +108,14 @@ class VoxelArea if(p.Y > MaxEdge.Y) MaxEdge.Y = p.Y; if(p.Z > MaxEdge.Z) MaxEdge.Z = p.Z; } - + // Pad with d nodes void pad(v3s16 d) { MinEdge -= d; MaxEdge += d; } - + /*void operator+=(v3s16 off) { MinEdge += off; @@ -184,7 +188,7 @@ class VoxelArea a: area inside *this */ - void diff(const VoxelArea &a, core::list &result) + void diff(const VoxelArea &a, std::list &result) { /* This can result in a maximum of 6 areas @@ -200,7 +204,7 @@ class VoxelArea } assert(contains(a)); - + // Take back area, XY inclusive { v3s16 min(MinEdge.X, MinEdge.Y, a.MaxEdge.Z+1); @@ -256,7 +260,7 @@ class VoxelArea } } - + /* Translates position from virtual coordinates to array index */ @@ -272,7 +276,7 @@ class VoxelArea { return index(p.X, p.Y, p.Z); } - + // Translate index in the X coordinate void add_x(const v3s16 &extent, u32 &i, s16 a) { @@ -341,7 +345,7 @@ class VoxelManipulator /*: public NodeContainer*/ public: VoxelManipulator(); virtual ~VoxelManipulator(); - + /* Virtuals from NodeContainer */ @@ -428,7 +432,7 @@ class VoxelManipulator /*: public NodeContainer*/ void setNode(v3s16 p, const MapNode &n) { emerge(p); - + m_data[m_area.index(p)] = n; m_flags[m_area.index(p)] &= ~VOXELFLAG_INEXISTENT; m_flags[m_area.index(p)] &= ~VOXELFLAG_NOT_LOADED; @@ -455,10 +459,10 @@ class VoxelManipulator /*: public NodeContainer*/ //dstream<<"operator[] p=("< & light_sources, INodeDefManager *nodemgr); + std::set & light_sources, INodeDefManager *nodemgr); void unspreadLight(enum LightBank bank, - core::map & from_nodes, - core::map & light_sources, INodeDefManager *nodemgr); - + std::map & from_nodes, + std::set & light_sources, INodeDefManager *nodemgr); + void spreadLight(enum LightBank bank, v3s16 p, INodeDefManager *nodemgr); void spreadLight(enum LightBank bank, - core::map & from_nodes, INodeDefManager *nodemgr); - + std::set & from_nodes, INodeDefManager *nodemgr); + /* Virtual functions */ - + /* Get the contents of the requested area from somewhere. Shall touch only nodes that have VOXELFLAG_NOT_LOADED @@ -563,7 +567,7 @@ class VoxelManipulator /*: public NodeContainer*/ MaxEdge is 1 higher than maximum allowed position */ VoxelArea m_area; - + /* NULL if data size is 0 (extent (0,0,0)) Data is stored as [z*h*w + y*h + x] @@ -574,7 +578,7 @@ class VoxelManipulator /*: public NodeContainer*/ Flags of all nodes */ u8 *m_flags; - + //TODO: Use these or remove them //TODO: Would these make any speed improvement? //bool m_pressure_route_valid;