Minor code improvements around active block keeping

This commit is contained in:
sfan5 2022-05-26 22:22:48 +02:00
parent ea74680df4
commit c1d03695d4
2 changed files with 17 additions and 9 deletions

@ -378,10 +378,7 @@ void ActiveBlockList::update(std::vector<PlayerSAO*> &active_players,
/* /*
Update m_list Update m_list
*/ */
m_list.clear(); m_list = std::move(newlist);
for (v3s16 p : newlist) {
m_list.insert(p);
}
} }
/* /*
@ -1343,6 +1340,7 @@ void ServerEnvironment::step(float dtime)
Get player block positions Get player block positions
*/ */
std::vector<PlayerSAO*> players; std::vector<PlayerSAO*> players;
players.reserve(m_players.size());
for (RemotePlayer *player : m_players) { for (RemotePlayer *player : m_players) {
// Ignore disconnected players // Ignore disconnected players
if (player->getPeerId() == PEER_ID_INEXISTENT) if (player->getPeerId() == PEER_ID_INEXISTENT)
@ -1368,8 +1366,6 @@ void ServerEnvironment::step(float dtime)
m_active_blocks.update(players, active_block_range, active_object_range, m_active_blocks.update(players, active_block_range, active_object_range,
blocks_removed, blocks_added); blocks_removed, blocks_added);
m_active_block_gauge->set(m_active_blocks.size());
/* /*
Handle removed blocks Handle removed blocks
*/ */
@ -1393,13 +1389,19 @@ void ServerEnvironment::step(float dtime)
for (const v3s16 &p: blocks_added) { for (const v3s16 &p: blocks_added) {
MapBlock *block = m_map->getBlockOrEmerge(p); MapBlock *block = m_map->getBlockOrEmerge(p);
if (!block) { if (!block) {
m_active_blocks.m_list.erase(p); // TODO: The blocks removed here will only be picked up again
m_active_blocks.m_abm_list.erase(p); // on the next cycle. To minimize the latency of objects being
// activated we could remember the blocks pending activating
// and activate them instantly as soon as they're loaded.
m_active_blocks.remove(p);
continue; continue;
} }
activateBlock(block); activateBlock(block);
} }
// Some blocks may be removed again by the code above so do this here
m_active_block_gauge->set(m_active_blocks.size());
} }
m_force_update_active_blocks = false; m_force_update_active_blocks = false;

@ -180,8 +180,14 @@ public:
m_list.clear(); m_list.clear();
} }
void remove(v3s16 p) {
m_list.erase(p);
m_abm_list.erase(p);
}
std::set<v3s16> m_list; std::set<v3s16> m_list;
std::set<v3s16> m_abm_list; std::set<v3s16> m_abm_list;
// list of blocks that are always active, not modified by this class
std::set<v3s16> m_forceloaded_list; std::set<v3s16> m_forceloaded_list;
}; };