Rename AddEntityIfNotPresent to AddPlayer
+ Always make a chunk for the player to go into * Fixes #4847
This commit is contained in:
parent
a3b5cba6be
commit
5e670a050b
@ -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));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user