feat(debug): tecla Keypad 1 per forçar l'obertura de la porta
Hook només Debug que crida EntityManager::forceOpenDoor (nou helper públic que delega a Door::open). El flux posterior — creuar la porta, player_exited, level_complete, transició a OUTRO — funciona idèntic al del joc real, perquè depèn de la Door, no del comptador de sarcòfags. Útil per saltar la mecànica de pintat/sarcs durant proves de progressió de sales. Tecla configurable a data/input/keys.yaml > id: open_door (per defecte Keypad 1). Mateixos gates que els salts [/]: ignora la pulsació si la pausa està activa o l'editor obert. En Release la ENTRADA del YAML segueix carregant-se però no té consumidor.
This commit is contained in:
1 parent
3b05704e97
commit
8da18a6a86
4 files changed
+31
No files matched your search
@@ -53,6 +53,9 @@ keys:
|
|||||||
- id: next_room
|
- id: next_room
|
||||||
code: "]"
|
code: "]"
|
||||||
desc: "Salta a la sala següent del levels.yaml (només Debug)"
|
desc: "Salta a la sala següent del levels.yaml (només Debug)"
|
||||||
|
- id: open_door
|
||||||
|
code: "Keypad 1"
|
||||||
|
desc: "Força l'obertura de la porta de la sala (només Debug)"
|
||||||
- id: exit
|
- id: exit
|
||||||
code: "Escape"
|
code: "Escape"
|
||||||
desc: "Eixir (confirmar amb segona pulsació)"
|
desc: "Eixir (confirmar amb segona pulsació)"
|
||||||
@@ -65,6 +65,10 @@ void EntityManager::setExpectedPlayerCount(int n) {
|
|||||||
level_complete_emitted_ = false;
|
level_complete_emitted_ = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EntityManager::forceOpenDoor() {
|
||||||
|
if (door_ != nullptr) { door_->open(); }
|
||||||
|
}
|
||||||
|
|
||||||
auto EntityManager::add(std::unique_ptr<Entity> entity) -> Entity* {
|
auto EntityManager::add(std::unique_ptr<Entity> entity) -> Entity* {
|
||||||
if (entity == nullptr) { return nullptr; }
|
if (entity == nullptr) { return nullptr; }
|
||||||
entity->setEventBus(&bus_);
|
entity->setEventBus(&bus_);
|
||||||
|
|||||||
@@ -112,6 +112,13 @@ class EntityManager {
|
|||||||
[[nodiscard]] auto openedSarcophagusCount() const -> std::size_t { return opened_sarcs_; }
|
[[nodiscard]] auto openedSarcophagusCount() const -> std::size_t { return opened_sarcs_; }
|
||||||
[[nodiscard]] auto exitedPlayerCount() const -> std::size_t { return exited_players_; }
|
[[nodiscard]] auto exitedPlayerCount() const -> std::size_t { return exited_players_; }
|
||||||
|
|
||||||
|
// Força l'obertura de la porta sense que els sarcòfags estiguin
|
||||||
|
// oberts. Pensat com a hook de debug per a la GameScene: el flux
|
||||||
|
// posterior (creuar la porta → `player_exited` → `level_complete`
|
||||||
|
// → OUTRO) segueix exactament igual perquè depèn de Door, no de
|
||||||
|
// sarcs. No-op si la porta ja està oberta o si el nivell no en té.
|
||||||
|
void forceOpenDoor();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
EventBus bus_;
|
EventBus bus_;
|
||||||
std::vector<std::unique_ptr<Entity>> entities_;
|
std::vector<std::unique_ptr<Entity>> entities_;
|
||||||
|
|||||||
@@ -853,6 +853,14 @@ namespace {
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto detectOpenDoor() -> bool {
|
||||||
|
const SDL_Scancode SC = KeyConfig::get().scancode("open_door");
|
||||||
|
if (SC == SDL_SCANCODE_UNKNOWN) { return false; }
|
||||||
|
return std::ranges::any_of(EventBuffer::events, [SC](const SDL_Event& ev) {
|
||||||
|
return ev.type == SDL_EVENT_KEY_DOWN && ev.key.scancode == SC;
|
||||||
|
});
|
||||||
|
}
|
||||||
} // namespace
|
} // namespace
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -885,6 +893,15 @@ void GameScene::update(int delta_ms) {
|
|||||||
enterRoomIntro();
|
enterRoomIntro();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Força l'obertura de la porta (Keypad 1). Útil per saltar el
|
||||||
|
// pintat/sarcs durant proves de progressió. La resta del flux
|
||||||
|
// (creuar → player_exited → level_complete → OUTRO) es manté.
|
||||||
|
// Mateixos gates que el salt entre sales.
|
||||||
|
if (pause_.state == PauseState::IDLE && !editor_.active() && detectOpenDoor()) {
|
||||||
|
std::cout << "[DEBUG] força obertura de la porta\n";
|
||||||
|
entity_manager_.forceOpenDoor();
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
GlobalInputs::update(delta_ms);
|
GlobalInputs::update(delta_ms);
|
||||||
|
|||||||
Reference in new issue
Block a user