mirror of
https://github.com/minetest/minetest.git
synced 2024-11-27 01:53:45 +01:00
Resend blocks when modified while sending to client
This commit is contained in:
parent
2c72f6da7b
commit
089f9bbe81
@ -370,17 +370,21 @@ queue_full_break:
|
||||
|
||||
void RemoteClient::GotBlock(v3s16 p)
|
||||
{
|
||||
if(m_blocks_sending.find(p) != m_blocks_sending.end())
|
||||
if (m_blocks_modified.find(p) == m_blocks_modified.end()) {
|
||||
if (m_blocks_sending.find(p) != m_blocks_sending.end())
|
||||
m_blocks_sending.erase(p);
|
||||
else
|
||||
{
|
||||
m_excess_gotblocks++;
|
||||
}
|
||||
|
||||
m_blocks_sent.insert(p);
|
||||
}
|
||||
}
|
||||
|
||||
void RemoteClient::SentBlock(v3s16 p)
|
||||
{
|
||||
if (m_blocks_modified.find(p) != m_blocks_modified.end())
|
||||
m_blocks_modified.erase(p);
|
||||
|
||||
if(m_blocks_sending.find(p) == m_blocks_sending.end())
|
||||
m_blocks_sending[p] = 0.0;
|
||||
else
|
||||
@ -397,6 +401,7 @@ void RemoteClient::SetBlockNotSent(v3s16 p)
|
||||
m_blocks_sending.erase(p);
|
||||
if(m_blocks_sent.find(p) != m_blocks_sent.end())
|
||||
m_blocks_sent.erase(p);
|
||||
m_blocks_modified.insert(p);
|
||||
}
|
||||
|
||||
void RemoteClient::SetBlocksNotSent(std::map<v3s16, MapBlock*> &blocks)
|
||||
@ -409,6 +414,7 @@ void RemoteClient::SetBlocksNotSent(std::map<v3s16, MapBlock*> &blocks)
|
||||
i != blocks.end(); ++i)
|
||||
{
|
||||
v3s16 p = i->first;
|
||||
m_blocks_modified.insert(p);
|
||||
|
||||
if(m_blocks_sending.find(p) != m_blocks_sending.end())
|
||||
m_blocks_sending.erase(p);
|
||||
|
@ -394,6 +394,16 @@ private:
|
||||
*/
|
||||
std::map<v3s16, float> m_blocks_sending;
|
||||
|
||||
/*
|
||||
Blocks that have been modified since last sending them.
|
||||
These blocks will not be marked as sent, even if the
|
||||
client reports it has received them to account for blocks
|
||||
that are being modified while on the line.
|
||||
|
||||
List of block positions.
|
||||
*/
|
||||
std::set<v3s16> m_blocks_modified;
|
||||
|
||||
/*
|
||||
Count of excess GotBlocks().
|
||||
There is an excess amount because the client sometimes
|
||||
|
Loading…
Reference in New Issue
Block a user