1
0

Rename AddEntityIfNotPresent to AddPlayer

+ Always make a chunk for the player to go into
* Fixes #4847
This commit is contained in:
Tiger Wang 2020-09-03 22:25:35 +01:00
parent a3b5cba6be
commit 5e670a050b
3 changed files with 7 additions and 17 deletions

View File

@ -909,21 +909,12 @@ void cChunkMap::AddEntity(OwnedEntity a_Entity)
void cChunkMap::AddEntityIfNotPresent(OwnedEntity a_Entity) void cChunkMap::AddPlayer(std::unique_ptr<cPlayer> a_Player)
{ {
cCSLock Lock(m_CSChunks); cCSLock Lock(m_CSChunks);
const auto Chunk = FindChunk(a_Entity->GetChunkX(), a_Entity->GetChunkZ()); auto & Chunk = ConstructChunk(a_Player->GetChunkX(), a_Player->GetChunkZ()); // Always construct the chunk for players
if (Chunk == nullptr) ASSERT(!Chunk.HasEntity(a_Player->GetUniqueID()));
{ Chunk.AddEntity(std::move(a_Player));
LOGWARNING("Entity at %p (%s, ID %d) spawning in a non-existent chunk, the entity is lost.",
static_cast<void *>(a_Entity.get()), a_Entity->GetClass(), a_Entity->GetUniqueID()
);
return;
}
if (!Chunk->HasEntity(a_Entity->GetUniqueID()))
{
Chunk->AddEntity(std::move(a_Entity));
}
} }

View File

@ -201,9 +201,8 @@ public:
/** Adds the entity to its appropriate chunk, takes ownership of the entity pointer */ /** Adds the entity to its appropriate chunk, takes ownership of the entity pointer */
void AddEntity(OwnedEntity a_Entity); void AddEntity(OwnedEntity a_Entity);
/** Adds the entity to its appropriate chunk, if the entity is not already added. /** Adds the player to its appropriate chunk, takes ownership of the player pointer */
Takes ownership of the entity pointer */ void AddPlayer(std::unique_ptr<cPlayer> a_Player);
void AddEntityIfNotPresent(OwnedEntity a_Entity);
/** Returns true if the entity with specified ID is present in the chunks */ /** Returns true if the entity with specified ID is present in the chunks */
bool HasEntity(UInt32 a_EntityID) const; bool HasEntity(UInt32 a_EntityID) const;

View File

@ -3506,7 +3506,7 @@ void cWorld::AddQueuedPlayers(void)
// Add to chunkmap, if not already there (Spawn vs MoveToWorld): // Add to chunkmap, if not already there (Spawn vs MoveToWorld):
auto PlayerPtr = Player.get(); auto PlayerPtr = Player.get();
m_ChunkMap->AddEntityIfNotPresent(std::move(Player)); m_ChunkMap->AddPlayer(std::move(Player));
PlayerPtr->OnAddToWorld(*this); PlayerPtr->OnAddToWorld(*this);
ASSERT(!PlayerPtr->IsTicking()); ASSERT(!PlayerPtr->IsTicking());
PlayerPtr->SetIsTicking(true); PlayerPtr->SetIsTicking(true);