Add VoxelArea::hasEmptyExtent

This commit is contained in:
unknown 2015-01-13 23:23:31 +10:00 committed by Craig Robbins
parent c0066a75cd
commit 5d08ada224
2 changed files with 14 additions and 5 deletions

@ -139,7 +139,7 @@ void VoxelManipulator::print(std::ostream &o, INodeDefManager *ndef,
void VoxelManipulator::addArea(const VoxelArea &area) void VoxelManipulator::addArea(const VoxelArea &area)
{ {
// Cancel if requested area has zero volume // Cancel if requested area has zero volume
if(area.getExtent() == v3s16(0,0,0)) if (area.hasEmptyExtent())
return; return;
// Cancel if m_area already contains the requested area // Cancel if m_area already contains the requested area
@ -151,7 +151,7 @@ void VoxelManipulator::addArea(const VoxelArea &area)
// Calculate new area // Calculate new area
VoxelArea new_area; VoxelArea new_area;
// New area is the requested area if m_area has zero volume // 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; new_area = area;
} }

@ -82,7 +82,7 @@ public:
void addArea(const VoxelArea &a) void addArea(const VoxelArea &a)
{ {
if(getExtent() == v3s16(0,0,0)) if (hasEmptyExtent())
{ {
*this = a; *this = a;
return; return;
@ -96,7 +96,7 @@ public:
} }
void addPoint(const v3s16 &p) void addPoint(const v3s16 &p)
{ {
if(getExtent() == v3s16(0,0,0)) if(hasEmptyExtent())
{ {
MinEdge = p; MinEdge = p;
MaxEdge = p; MaxEdge = p;
@ -137,6 +137,15 @@ public:
{ {
return MaxEdge - MinEdge + v3s16(1,1,1); 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 s32 getVolume() const
{ {
v3s16 e = getExtent(); v3s16 e = getExtent();
@ -146,7 +155,7 @@ public:
{ {
// No area contains an empty area // No area contains an empty area
// NOTE: Algorithms depend on this, so do not change. // NOTE: Algorithms depend on this, so do not change.
if(a.getExtent() == v3s16(0,0,0)) if(a.hasEmptyExtent())
return false; return false;
return( return(