diff --git a/source/game/entities/concrete/whip_attack.hpp b/source/game/entities/concrete/whip_attack.hpp index 6a34ed3..60331e8 100644 --- a/source/game/entities/concrete/whip_attack.hpp +++ b/source/game/entities/concrete/whip_attack.hpp @@ -152,7 +152,7 @@ class WhipAttack : public Attack { // del nostre `getFeetY()` per delegar el bucket d'y-sort al jugador. float owner_feet_y_{0.0F}; - EntityManager* entity_manager_{nullptr}; + // `entity_manager_` viu a Entity (protected): l'utilitzem d'allà. const std::vector* players_{nullptr}; DirSprite sprite_north_; diff --git a/source/game/scenes/game_scene.cpp b/source/game/scenes/game_scene.cpp index 0394e39..549091b 100644 --- a/source/game/scenes/game_scene.cpp +++ b/source/game/scenes/game_scene.cpp @@ -1141,9 +1141,18 @@ void GameScene::update(int delta_ms) { #ifdef _DEBUG // Toggle de l'editor: només si no hi ha cap transició de pausa ni // pausa consolidada. L'editor mateix no consumeix la tecla — la - // llegim ací per decidir la coexistència. + // llegim ací per decidir la coexistència. Quan se surt del editor, + // recarreguem les entitats des del YAML perquè el manager torne a + // estar sincronitzat amb el que el writer acaba de desar (cada + // sessió d'edició parteix del fitxer, no de l'estat runtime previ). if (pause_.state == PauseState::IDLE && detectEditorToggle()) { + const bool WAS_ACTIVE = editor_.active(); editor_.toggle(tilemap_); + if (WAS_ACTIVE) { + entity_manager_.reload(Levels::LevelManager::get().currentPath()); + const int ACTIVE_COUNT = std::ranges::count(players_starts_active_, true); + entity_manager_.setExpectedPlayerCount(ACTIVE_COUNT); + } } // Salts debug entre sales (`[` / `]`). Mútuament excloents amb la @@ -1242,18 +1251,25 @@ void GameScene::render() { tilemap_.render(); #ifdef _DEBUG - // En mode editor amaguem entitats i jugador: el tilemap queda net - // per a poder clicar cel·la per cel·la sense interferència visual. - // El HUD futur (quan s'afegeixi) també farà cas d'aquest flag. - const bool SKIP_ACTORS = editor_.active(); + // En mode editor amaguem jugadors, sombres, paint layer, fades, HUD + // i textos de transició: el tilemap queda net per editar i només es + // pinten les entitats (congelades, sense tick) per que el dissenyador + // veja on estan. + const bool EDITOR_ACTIVE = editor_.active(); #else - constexpr bool SKIP_ACTORS = false; + constexpr bool EDITOR_ACTIVE = false; #endif + if (EDITOR_ACTIVE) { + // Render barat de les entitats sense z-sort entre elles ni amb + // jugadors: ja no hi ha actors mòbils. L'ordre és el d'inserció + // del manager — suficient per editar. + entity_manager_.renderAll(); + } // Capa de pintat: va entre el tilemap base i els actors, perquè els // sarcòfags i el jugador la tapen. S'amaga al mode editor (decisió // explícita: l'editor edita el tilemap, no la capa de pintat). - if (!SKIP_ACTORS && paint_layer_) { paint_layer_->render(); } - if (!SKIP_ACTORS) { + if (!EDITOR_ACTIVE && paint_layer_) { paint_layer_->render(); } + if (!EDITOR_ACTIVE) { // Passada de sombres dels jugadors saltant. Va per davant del // pintat (al damunt) però per darrere de TOTS els actors — // entitats i jugadors, inclòs el saltador mateix— així la sombra