forked from Mirrorlandia_minetest/minetest
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)
|
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()) {
|
||||||
m_blocks_sending.erase(p);
|
if (m_blocks_sending.find(p) != m_blocks_sending.end())
|
||||||
else
|
m_blocks_sending.erase(p);
|
||||||
{
|
else
|
||||||
m_excess_gotblocks++;
|
m_excess_gotblocks++;
|
||||||
|
|
||||||
|
m_blocks_sent.insert(p);
|
||||||
}
|
}
|
||||||
m_blocks_sent.insert(p);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void RemoteClient::SentBlock(v3s16 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())
|
if(m_blocks_sending.find(p) == m_blocks_sending.end())
|
||||||
m_blocks_sending[p] = 0.0;
|
m_blocks_sending[p] = 0.0;
|
||||||
else
|
else
|
||||||
@ -397,6 +401,7 @@ void RemoteClient::SetBlockNotSent(v3s16 p)
|
|||||||
m_blocks_sending.erase(p);
|
m_blocks_sending.erase(p);
|
||||||
if(m_blocks_sent.find(p) != m_blocks_sent.end())
|
if(m_blocks_sent.find(p) != m_blocks_sent.end())
|
||||||
m_blocks_sent.erase(p);
|
m_blocks_sent.erase(p);
|
||||||
|
m_blocks_modified.insert(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RemoteClient::SetBlocksNotSent(std::map<v3s16, MapBlock*> &blocks)
|
void RemoteClient::SetBlocksNotSent(std::map<v3s16, MapBlock*> &blocks)
|
||||||
@ -409,6 +414,7 @@ void RemoteClient::SetBlocksNotSent(std::map<v3s16, MapBlock*> &blocks)
|
|||||||
i != blocks.end(); ++i)
|
i != blocks.end(); ++i)
|
||||||
{
|
{
|
||||||
v3s16 p = i->first;
|
v3s16 p = i->first;
|
||||||
|
m_blocks_modified.insert(p);
|
||||||
|
|
||||||
if(m_blocks_sending.find(p) != m_blocks_sending.end())
|
if(m_blocks_sending.find(p) != m_blocks_sending.end())
|
||||||
m_blocks_sending.erase(p);
|
m_blocks_sending.erase(p);
|
||||||
|
@ -394,6 +394,16 @@ private:
|
|||||||
*/
|
*/
|
||||||
std::map<v3s16, float> m_blocks_sending;
|
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().
|
Count of excess GotBlocks().
|
||||||
There is an excess amount because the client sometimes
|
There is an excess amount because the client sometimes
|
||||||
|
Loading…
Reference in New Issue
Block a user