feat(entity-manager): reload del nivell + PaintLayer::clear
This commit is contained in:
1 parent
28e55a0615
commit
59cd9b524c
4 files changed
+43
No files matched your search
@@ -90,6 +90,16 @@ class EntityManager {
|
||||
// `Map::tile_size`, `tilemap_origin_*` i `getSarcRect`).
|
||||
void loadFromLevel(const std::string& level_yaml_path);
|
||||
|
||||
// Reset complet del nivell: destrueix totes les entitats, reseteja
|
||||
// els comptadors interns (sarcòfags oberts, total, exited, flag de
|
||||
// level_complete) i torna a cridar `loadFromLevel` per regenerar les
|
||||
// entitats des del YAML. El bus i les seues subscripcions
|
||||
// sobreviuen — això inclou les subscripcions externes (paint_layer_,
|
||||
// hud_, players, GameScene). Cridat des de GameScene a la transició
|
||||
// ROOM_OUTRO → ROOM_INTRO. `setExpectedPlayerCount` cal cridar-lo de
|
||||
// nou després si vols agregació de level_complete al nou cicle.
|
||||
void reload(const std::string& level_yaml_path);
|
||||
|
||||
// Fixa quants jugadors actius es consideren al recompte d'EXITED.
|
||||
// Cridat per GameScene un cop instanciats els jugadors. Si manca,
|
||||
// `expected_players_ = 0` i mai s'emet `level_complete` automàticament.
|
||||
|
||||
@@ -355,6 +355,25 @@ namespace {
|
||||
}
|
||||
} // namespace
|
||||
|
||||
void EntityManager::reload(const std::string& level_yaml_path) {
|
||||
// Destrucció ordenada: les entitats moren aquí; les seues
|
||||
// subscripcions implícites desapareixen amb la seua vida (cap d'elles
|
||||
// se subscriu directament al bus — només publiquen). El bus i les
|
||||
// subscripcions externes (PaintLayer, HUD, GameScene) no es toquen.
|
||||
entities_.clear();
|
||||
door_ = nullptr;
|
||||
total_sarcs_ = 0;
|
||||
opened_sarcs_ = 0;
|
||||
// No reset de `expected_players_`: GameScene el tornarà a fixar
|
||||
// (amb el mateix valor o un de nou) després del reload, com a part
|
||||
// del respawn dels jugadors. Reseteig dels comptadors d'EXITED i
|
||||
// del flag d'emissió perquè el cicle següent pugui reagregar net.
|
||||
exited_players_ = 0;
|
||||
level_complete_emitted_ = false;
|
||||
|
||||
loadFromLevel(level_yaml_path);
|
||||
}
|
||||
|
||||
void EntityManager::loadFromLevel(const std::string& level_yaml_path) {
|
||||
const auto SPAWNS = EntityLoader::readSpawns(level_yaml_path);
|
||||
int loaded = 0;
|
||||
|
||||
Reference in new issue
Block a user