1
0

BlockHandler: no dynamic allocation (#4862)

* BlockHandler: no dynamic allocation
This commit is contained in:
Tiger Wang
2020-09-17 14:51:42 +01:00
committed by GitHub
parent 53549a1a4c
commit c3d2956ba5
8 changed files with 557 additions and 254 deletions

View File

@@ -414,8 +414,7 @@ cBlockInfo::cBlockInfo():
m_FullyOccupiesVoxel(false),
m_CanBeTerraformed(false),
m_BlockHeight(1.0),
m_Hardness(0.0f),
m_Handler()
m_Hardness(0.0f)
{
}
@@ -423,13 +422,9 @@ cBlockInfo::cBlockInfo():
bool cBlockInfo::IsSnowable(BLOCKTYPE a_BlockType)
cBlockHandler * cBlockInfo::GetHandler(BLOCKTYPE a_Type)
{
return (
(a_BlockType == E_BLOCK_ICE) ||
(a_BlockType == E_BLOCK_LEAVES) ||
(!IsTransparent(a_BlockType) && (a_BlockType != E_BLOCK_PACKED_ICE))
);
return &cBlockHandler::GetBlockHandler(a_Type);
}
@@ -557,9 +552,13 @@ float cBlockInfo::GetExplosionAbsorption(const BLOCKTYPE Block)
void cBlockInfo::sHandlerDeleter::operator () (cBlockHandler * a_Handler)
bool cBlockInfo::IsSnowable(BLOCKTYPE a_BlockType)
{
delete a_Handler;
return (
(a_BlockType == E_BLOCK_ICE) ||
(a_BlockType == E_BLOCK_LEAVES) ||
(!IsTransparent(a_BlockType) && (a_BlockType != E_BLOCK_PACKED_ICE))
);
}
@@ -573,7 +572,6 @@ cBlockInfo::cBlockInfoArray::cBlockInfoArray()
for (size_t i = 0; i < Info.size(); ++i)
{
Info[i].m_BlockType = static_cast<BLOCKTYPE>(i);
Info[i].m_Handler.reset(cBlockHandler::CreateBlockHandler(Info[i].m_BlockType));
}
// Emissive blocks