mirror of
https://github.com/minetest/minetest.git
synced 2024-11-23 16:13:46 +01:00
Minor code improvements around active block keeping
This commit is contained in:
parent
ea74680df4
commit
c1d03695d4
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user