refactor(component): the client's component lifecycle

Components get the client's per-component functions: LoadDataFromTemplate,
PrepareConfigData, LoadConfigData, LoadFromSaveData, Startup, Run,
OnEnterScope, OnLeaveScope, Preshutdown and Shutdown, called by the entity in
the client's order. Update is renamed Run, LoadFromXml LoadFromSaveData and
UpdateXml WriteSaveData. Nothing sent changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Aaron Kimbrell
2026-10-01 07:45:16 -05:00
parent e8406cc829
commit 50bfa623ca
58 changed files with 181 additions and 132 deletions

View File

@@ -450,6 +450,8 @@ void EntityManager::ConstructAllEntities(const SystemAddress& sysAddr) {
for (auto* entity : m_Entities | std::views::values) {
if (entity && (entity->GetSpawnerID() != 0 || entity->GetLOT() == 1) && !entity->GetIsGhostingCandidate()) {
ConstructEntity(entity, sysAddr);
// Objects that are never ghosted enter a joining player's scope here
if (auto* const player = PlayerManager::GetPlayer(sysAddr)) entity->OnEnterScope(*player);
}
}
@@ -583,6 +585,7 @@ void EntityManager::UpdateGhosting(Entity* player) {
DestructEntity(entity, player->GetSystemAddress());
entity->SetObservers(entity->GetObservers() - 1);
entity->OnLeaveScope(*player);
} else if (!observed && nearEnough) {
// Check collectables, don't construct if it has been collected
uint32_t collectionId = entity->GetCollectibleID();
@@ -600,6 +603,7 @@ void EntityManager::UpdateGhosting(Entity* player) {
entity->SetObservers(entity->GetObservers() + 1);
ConstructEntity(entity, player->GetSystemAddress());
entity->OnEnterScope(*player);
}
}
}
@@ -632,10 +636,12 @@ void EntityManager::CheckGhosting(Entity* entity) {
ghostComponent->GhostEntity(id);
DestructEntity(entity, player->GetSystemAddress());
entity->SetObservers(entity->GetObservers() - 1);
entity->OnLeaveScope(*player);
} else if (!observed && nearEnough) {
ghostComponent->ObserveEntity(id);
ConstructEntity(entity, player->GetSystemAddress());
entity->SetObservers(entity->GetObservers() + 1);
entity->OnEnterScope(*player);
}
}
}