1
0
Fork 0

Send entities in cChunkSender (#4532)

Confer issue #3696
This commit is contained in:
Mat 2020-06-24 14:48:50 +03:00 committed by GitHub
parent 6036971c77
commit e0a361de2a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 24 additions and 21 deletions

View File

@ -1707,19 +1707,6 @@ bool cChunk::AddClient(cClientHandle * a_Client)
}
m_LoadedByClient.push_back(a_Client);
for (cEntityList::iterator itr = m_Entities.begin(); itr != m_Entities.end(); ++itr)
{
/*
// DEBUG:
LOGD("cChunk: Entity #%d (%s) at [%i, %i, %i] spawning for player \"%s\"",
(*itr)->GetUniqueID(), (*itr)->GetClass(),
m_PosX, m_PosY, m_PosZ,
a_Client->GetUsername().c_str()
);
*/
(*itr)->SpawnOn(*a_Client);
}
return true;
}

View File

@ -247,22 +247,38 @@ void cChunkSender::SendChunk(int a_ChunkX, int a_ChunkZ, std::unordered_set<cCli
}
cChunkDataSerializer Data(m_Data, m_BiomeMap, m_World.GetDimension());
for (const auto client : a_Clients)
for (const auto Client : a_Clients)
{
// Send:
client->SendChunkData(a_ChunkX, a_ChunkZ, Data);
Client->SendChunkData(a_ChunkX, a_ChunkZ, Data);
// Send block-entity packets:
for (const auto & Pos : m_BlockEntities)
{
m_World.SendBlockEntity(Pos.x, Pos.y, Pos.z, *client);
m_World.SendBlockEntity(Pos.x, Pos.y, Pos.z, *Client);
} // for itr - m_Packets[]
// Send entity packets:
for (const auto EntityID : m_EntityIDs)
{
m_World.DoWithEntityByID(EntityID, [Client](cEntity & a_Entity)
{
/*
// DEBUG:
LOGD("cChunkSender: Entity #%d (%s) at [%f, %f, %f] spawning for player \"%s\"",
a_Entity.GetUniqueID(), a_Entity.GetClass(),
a_Entity.GetPosition().x, a_Entity.GetPosition().y, a_Entity.GetPosition().z,
Client->GetUsername().c_str()
);
*/
a_Entity.SpawnOn(*Client);
return true;
});
}
}
m_Data.Clear();
m_BlockEntities.clear();
// TODO: Send entity spawn packets
m_EntityIDs.clear();
}
@ -278,9 +294,9 @@ void cChunkSender::BlockEntity(cBlockEntity * a_Entity)
void cChunkSender::Entity(cEntity *)
void cChunkSender::Entity(cEntity * a_Entity)
{
// Nothing needed yet, perhaps in the future when we save entities into chunks we'd like to send them upon load, too ;)
m_EntityIDs.push_back(a_Entity->GetUniqueID());
}

View File

@ -122,7 +122,7 @@ protected:
// NOTE that m_BlockData[] is inherited from the cChunkDataCollector
unsigned char m_BiomeMap[cChunkDef::Width * cChunkDef::Width];
std::vector<Vector3i> m_BlockEntities; // Coords of the block entities to send
// TODO: sEntityIDs m_Entities; // Entity-IDs of the entities to send
std::vector<UInt32> m_EntityIDs; // Entity-IDs of the entities to send
// cIsThread override:
virtual void Execute(void) override;