summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/BlockInfo.cpp22
-rw-r--r--src/BlockInfo.h4
-rw-r--r--src/Generating/Caves.cpp24
-rw-r--r--src/Generating/RoughRavines.cpp26
4 files changed, 32 insertions, 44 deletions
diff --git a/src/BlockInfo.cpp b/src/BlockInfo.cpp
index 602deb26d..4bc3fbbdc 100644
--- a/src/BlockInfo.cpp
+++ b/src/BlockInfo.cpp
@@ -17,6 +17,7 @@ cBlockInfo::cBlockInfo()
, m_IsSnowable(false)
, m_IsSolid(true)
, m_FullyOccupiesVoxel(false)
+ , m_CanBeTerraformed(false)
, m_Handler(NULL)
{}
@@ -548,6 +549,27 @@ void cBlockInfo::Initialize(cBlockInfoArray & a_Info)
a_Info[E_BLOCK_STONE ].m_FullyOccupiesVoxel = true;
a_Info[E_BLOCK_STONE_BRICKS ].m_FullyOccupiesVoxel = true;
a_Info[E_BLOCK_WOOL ].m_FullyOccupiesVoxel = true;
+
+
+ // Blocks that can be terraformed
+ a_Info[E_BLOCK_COAL_ORE ].m_CanBeTerraformed = true;
+ a_Info[E_BLOCK_COBBLESTONE ].m_CanBeTerraformed = true;
+ a_Info[E_BLOCK_DIAMOND_ORE ].m_CanBeTerraformed = true;
+ a_Info[E_BLOCK_DIRT ].m_CanBeTerraformed = true;
+ a_Info[E_BLOCK_GOLD_ORE ].m_CanBeTerraformed = true;
+ a_Info[E_BLOCK_GRASS ].m_CanBeTerraformed = true;
+ a_Info[E_BLOCK_GRAVEL ].m_CanBeTerraformed = true;
+ a_Info[E_BLOCK_HARDENED_CLAY ].m_CanBeTerraformed = true;
+ a_Info[E_BLOCK_IRON_ORE ].m_CanBeTerraformed = true;
+ a_Info[E_BLOCK_MYCELIUM ].m_CanBeTerraformed = true;
+ a_Info[E_BLOCK_NETHERRACK ].m_CanBeTerraformed = true;
+ a_Info[E_BLOCK_REDSTONE_ORE ].m_CanBeTerraformed = true;
+ a_Info[E_BLOCK_REDSTONE_ORE_GLOWING].m_CanBeTerraformed = true;
+ a_Info[E_BLOCK_SAND ].m_CanBeTerraformed = true;
+ a_Info[E_BLOCK_SANDSTONE ].m_CanBeTerraformed = true;
+ a_Info[E_BLOCK_SOULSAND ].m_CanBeTerraformed = true;
+ a_Info[E_BLOCK_STAINED_CLAY ].m_CanBeTerraformed = true;
+ a_Info[E_BLOCK_STONE ].m_CanBeTerraformed = true;
}
diff --git a/src/BlockInfo.h b/src/BlockInfo.h
index e6ce566c5..4c66c095a 100644
--- a/src/BlockInfo.h
+++ b/src/BlockInfo.h
@@ -45,6 +45,9 @@ public:
/** Does this block fully occupy its voxel - is it a 'full' block? */
bool m_FullyOccupiesVoxel;
+ /** Can a finisher change it? */
+ bool m_CanBeTerraformed;
+
// tolua_end
/** Associated block handler. */
@@ -60,6 +63,7 @@ public:
inline static bool IsSnowable (BLOCKTYPE a_Type) { return Get(a_Type).m_IsSnowable; }
inline static bool IsSolid (BLOCKTYPE a_Type) { return Get(a_Type).m_IsSolid; }
inline static bool FullyOccupiesVoxel (BLOCKTYPE a_Type) { return Get(a_Type).m_FullyOccupiesVoxel; }
+ inline static bool CanBeTerraformed (BLOCKTYPE a_Type) { return Get(a_Type).m_CanBeTerraformed; }
// tolua_end
diff --git a/src/Generating/Caves.cpp b/src/Generating/Caves.cpp
index 3b71efb57..6fc371958 100644
--- a/src/Generating/Caves.cpp
+++ b/src/Generating/Caves.cpp
@@ -497,29 +497,9 @@ void cCaveTunnel::ProcessChunk(
int SqDist = (DifX - x) * (DifX - x) + (DifY - y) * (DifY - y) + (DifZ - z) * (DifZ - z);
if (4 * SqDist <= SqRad)
{
- switch (cChunkDef::GetBlock(a_BlockTypes, x, y, z))
+ if (cBlockInfo::CanBeTerraformed(cChunkDef::GetBlock(a_BlockTypes, x, y, z)))
{
- // Only carve out these specific block types
- case E_BLOCK_DIRT:
- case E_BLOCK_GRASS:
- case E_BLOCK_STONE:
- case E_BLOCK_COBBLESTONE:
- case E_BLOCK_GRAVEL:
- case E_BLOCK_SAND:
- case E_BLOCK_SANDSTONE:
- case E_BLOCK_SOULSAND:
- case E_BLOCK_NETHERRACK:
- case E_BLOCK_COAL_ORE:
- case E_BLOCK_IRON_ORE:
- case E_BLOCK_GOLD_ORE:
- case E_BLOCK_DIAMOND_ORE:
- case E_BLOCK_REDSTONE_ORE:
- case E_BLOCK_REDSTONE_ORE_GLOWING:
- {
- cChunkDef::SetBlock(a_BlockTypes, x, y, z, E_BLOCK_AIR);
- break;
- }
- default: break;
+ cChunkDef::SetBlock(a_BlockTypes, x, y, z, E_BLOCK_AIR);
}
}
} // for y
diff --git a/src/Generating/RoughRavines.cpp b/src/Generating/RoughRavines.cpp
index badc7768e..2ee3704b3 100644
--- a/src/Generating/RoughRavines.cpp
+++ b/src/Generating/RoughRavines.cpp
@@ -201,29 +201,11 @@ protected:
{
continue;
}
- switch (a_ChunkDesc.GetBlockType(x, y, z))
+
+ if (cBlockInfo::CanBeTerraformed(a_ChunkDesc.GetBlockType(x, y, z)))
{
- // Only carve out these specific block types
- case E_BLOCK_DIRT:
- case E_BLOCK_GRASS:
- case E_BLOCK_STONE:
- case E_BLOCK_COBBLESTONE:
- case E_BLOCK_GRAVEL:
- case E_BLOCK_SAND:
- case E_BLOCK_SANDSTONE:
- case E_BLOCK_NETHERRACK:
- case E_BLOCK_COAL_ORE:
- case E_BLOCK_IRON_ORE:
- case E_BLOCK_GOLD_ORE:
- case E_BLOCK_DIAMOND_ORE:
- case E_BLOCK_REDSTONE_ORE:
- case E_BLOCK_REDSTONE_ORE_GLOWING:
- {
- a_ChunkDesc.SetBlockType(x, y, z, E_BLOCK_AIR);
- break;
- }
- default: break;
- } // switch (BlockType)
+ a_ChunkDesc.SetBlockType(x, y, z, E_BLOCK_AIR);
+ }
} // for y
} // for x, z - a_BlockTypes
} // for itr - m_Points[]