Add VoxelArea::hasEmptyExtent
authorunknown <gregory.currie@gmail.com>
Tue, 13 Jan 2015 13:23:31 +0000 (23:23 +1000)
committerCraig Robbins <kde.psych@gmail.com>
Tue, 13 Jan 2015 13:24:32 +0000 (23:24 +1000)
src/voxel.cpp
src/voxel.h

index 1299a5296da9c5eef0d25e243b6f2ca721f5e052..02da42459ea3edbede63289d54cbe32402d7bba9 100644 (file)
@@ -139,7 +139,7 @@ void VoxelManipulator::print(std::ostream &o, INodeDefManager *ndef,
 void VoxelManipulator::addArea(const VoxelArea &area)
 {
        // Cancel if requested area has zero volume
-       if(area.getExtent() == v3s16(0,0,0))
+       if (area.hasEmptyExtent())
                return;
 
        // Cancel if m_area already contains the requested area
@@ -151,7 +151,7 @@ void VoxelManipulator::addArea(const VoxelArea &area)
        // Calculate new area
        VoxelArea new_area;
        // New area is the requested area if m_area has zero volume
-       if(m_area.getExtent() == v3s16(0,0,0))
+       if(m_area.hasEmptyExtent())
        {
                new_area = area;
        }
index 53b6edbc7b9ab649fa2ef64044c60622d1c28bc8..52274ac19d4479960005ead8e9c8d5628aae4466 100644 (file)
@@ -82,7 +82,7 @@ public:
 
        void addArea(const VoxelArea &a)
        {
-               if(getExtent() == v3s16(0,0,0))
+               if (hasEmptyExtent())
                {
                        *this = a;
                        return;
@@ -96,7 +96,7 @@ public:
        }
        void addPoint(const v3s16 &p)
        {
-               if(getExtent() == v3s16(0,0,0))
+               if(hasEmptyExtent())
                {
                        MinEdge = p;
                        MaxEdge = p;
@@ -137,6 +137,15 @@ public:
        {
                return MaxEdge - MinEdge + v3s16(1,1,1);
        }
+
+       /* Because MaxEdge and MinEdge are included in the voxel area an empty extent
+        * is not represented by (0, 0, 0), but instead (-1, -1, -1)
+        */
+       bool hasEmptyExtent() const
+       {
+               return MaxEdge - MinEdge == v3s16(-1, -1, -1);
+       }
+
        s32 getVolume() const
        {
                v3s16 e = getExtent();
@@ -146,7 +155,7 @@ public:
        {
                // No area contains an empty area
                // NOTE: Algorithms depend on this, so do not change.
-               if(a.getExtent() == v3s16(0,0,0))
+               if(a.hasEmptyExtent())
                        return false;
 
                return(