Merge pull request #1262 from mc-server/CanBeTerraformed
Added cBlockInfo::CanBeTerraformed and made finishers use it
This commit is contained in:
commit
b41c8b5de7
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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[]
|
||||
|
Loading…
Reference in New Issue
Block a user