1
0
şunun yansıması https://github.com/luanti-org/luanti.git eşitlendi 2025-12-24 07:25:20 +01:00

Resend blocks when modified while sending to client

Bu işleme şunda yer alıyor:
Jeija
2016-02-15 16:05:40 +01:00
işlemeyi yapan: est31
ebeveyn 2c72f6da7b
işleme 089f9bbe81
2 değiştirilmiş dosya ile 22 ekleme ve 6 silme

Dosyayı Görüntüle

@@ -370,17 +370,21 @@ queue_full_break:
void RemoteClient::GotBlock(v3s16 p)
{
if(m_blocks_sending.find(p) != m_blocks_sending.end())
m_blocks_sending.erase(p);
else
{
m_excess_gotblocks++;
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);
}
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);

Dosyayı Görüntüle

@@ -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