1
0

Use std::queue for the block tick queue

This commit is contained in:
Tiger Wang
2020-07-29 18:51:39 +01:00
parent 71ffa76847
commit b205d233bd
2 changed files with 9 additions and 11 deletions

View File

@@ -812,23 +812,21 @@ void cChunk::BroadcastPendingBlockChanges(void)
void cChunk::CheckBlocks()
{
if (m_ToTickBlocks.empty())
{
return;
}
std::vector<Vector3i> ToTickBlocks;
std::swap(m_ToTickBlocks, ToTickBlocks);
cChunkInterface ChunkInterface(m_World->GetChunkMap());
cBlockInServerPluginInterface PluginInterface(*m_World);
for (std::vector<Vector3i>::const_iterator itr = ToTickBlocks.begin(), end = ToTickBlocks.end(); itr != end; ++itr)
// Process a limited number of blocks since cBlockHandler::Check may queue more to tick
auto Count = m_ToTickBlocks.size();
while (Count != 0)
{
Vector3i Pos = (*itr);
Vector3i Pos = m_ToTickBlocks.front();
m_ToTickBlocks.pop();
Count--;
cBlockHandler * Handler = BlockHandler(GetBlock(Pos));
Handler->Check(ChunkInterface, PluginInterface, Pos, *this);
} // for itr - ToTickBlocks[]
}
}