X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fvoxel.h;h=033ad3e4564bbf716cd8cb4cf573b2c46041b605;hb=58e6d25e033c76dc91aaac18fdeda92ac23fe0e1;hp=483b4d2a0f5654559e0ef2e6ce9fffc71c7b5c7b;hpb=037b2591971d752e67fa7d47095b996b3f56da5a;p=oweals%2Fminetest.git diff --git a/src/voxel.h b/src/voxel.h index 483b4d2a0..033ad3e45 100644 --- a/src/voxel.h +++ b/src/voxel.h @@ -1,6 +1,6 @@ /* -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 Lesser General Public License as published by @@ -21,9 +21,14 @@ with this program; if not, write to the Free Software Foundation, Inc., #define VOXEL_HEADER #include "irrlichttypes.h" +#include "irr_v3d.h" #include #include "debug.h" +#include "exceptions.h" #include "mapnode.h" +#include +#include +#include class INodeDefManager; @@ -70,7 +75,7 @@ public: MaxEdge(p) { } - + /* Modifying methods */ @@ -104,14 +109,14 @@ public: 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 +189,7 @@ public: 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 +205,7 @@ public: } assert(contains(a)); - + // Take back area, XY inclusive { v3s16 min(MinEdge.X, MinEdge.Y, a.MaxEdge.Z+1); @@ -256,7 +261,7 @@ public: } } - + /* Translates position from virtual coordinates to array index */ @@ -272,7 +277,7 @@ public: { return index(p.X, p.Y, p.Z); } - + // Translate index in the X coordinate void add_x(const v3s16 &extent, u32 &i, s16 a) { @@ -315,10 +320,10 @@ public: v3s16 MaxEdge; }; -// Hasn't been copied from source (emerged) -#define VOXELFLAG_NOT_LOADED (1<<0) -// Checked as being inexistent in source -#define VOXELFLAG_INEXISTENT (1<<1) +// unused +#define VOXELFLAG_UNUSED (1<<0) +// no data about that node +#define VOXELFLAG_NO_DATA (1<<1) // Algorithm-dependent #define VOXELFLAG_CHECKED1 (1<<2) // Algorithm-dependent @@ -341,7 +346,7 @@ class VoxelManipulator /*: public NodeContainer*/ public: VoxelManipulator(); virtual ~VoxelManipulator(); - + /* Virtuals from NodeContainer */ @@ -351,8 +356,8 @@ public: } bool isValidPosition(v3s16 p) { - emerge(p); - return !(m_flags[m_area.index(p)] & VOXELFLAG_INEXISTENT); + addArea(p); + return !(m_flags[m_area.index(p)] & VOXELFLAG_NO_DATA); }*/ /* @@ -361,9 +366,9 @@ public: */ MapNode getNode(v3s16 p) { - emerge(p); + addArea(p); - if(m_flags[m_area.index(p)] & VOXELFLAG_INEXISTENT) + if(m_flags[m_area.index(p)] & VOXELFLAG_NO_DATA) { /*dstream<<"EXCEPT: VoxelManipulator::getNode(): " <<"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 - Shall reset VOXELFLAG_NOT_LOADED - - If not found from source, add with VOXELFLAG_INEXISTENT - */ - virtual void emerge(VoxelArea a, s32 caller_id=-1) - { - //dstream<<"emerge p=("<