diff options
Diffstat (limited to 'src/client/client.cpp')
-rw-r--r-- | src/client/client.cpp | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/src/client/client.cpp b/src/client/client.cpp index 78e077fc3..4dc05dc09 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -475,6 +475,7 @@ void Client::step(float dtime) */ { int num_processed_meshes = 0; + std::vector<v3s16> blocks_to_ack; while (!m_mesh_update_thread.m_queue_out.empty()) { num_processed_meshes++; @@ -513,14 +514,18 @@ void Client::step(float dtime) m_minimap->addBlock(r.p, minimap_mapblock); if (r.ack_block_to_server) { - /* - Acknowledge block - [0] u8 count - [1] v3s16 pos_0 - */ - sendGotBlocks(r.p); + if (blocks_to_ack.size() == 255) { + sendGotBlocks(blocks_to_ack); + blocks_to_ack.clear(); + } + + blocks_to_ack.emplace_back(r.p); } } + if (blocks_to_ack.size() > 0) { + // Acknowledge block(s) + sendGotBlocks(blocks_to_ack); + } if (num_processed_meshes > 0) g_profiler->graphAdd("num_processed_meshes", num_processed_meshes); @@ -1069,10 +1074,13 @@ void Client::sendDeletedBlocks(std::vector<v3s16> &blocks) Send(&pkt); } -void Client::sendGotBlocks(v3s16 block) +void Client::sendGotBlocks(const std::vector<v3s16> &blocks) { - NetworkPacket pkt(TOSERVER_GOTBLOCKS, 1 + 6); - pkt << (u8) 1 << block; + NetworkPacket pkt(TOSERVER_GOTBLOCKS, 1 + 6 * blocks.size()); + pkt << (u8) blocks.size(); + for (const v3s16 &block : blocks) + pkt << block; + Send(&pkt); } |