fase 3 de zones

This commit is contained in:
2026-04-10 14:07:16 +02:00
parent 2cecfec5d5
commit f95fbf52d7
2 changed files with 26 additions and 6 deletions

View File

@@ -799,6 +799,9 @@ auto Game::changeRoom(const std::string& room_path) -> bool {
// Cambia la habitación actual
current_room_ = room_path;
// Sincroniza la música con la zona de la nueva room
updateMusicForRoom();
return true;
}
@@ -1008,13 +1011,29 @@ void Game::initPlayer(const Player::SpawnData& spawn_point, std::shared_ptr<Room
if (IGNORE_INPUT) { player_->setIgnoreInput(true); }
}
// Hace sonar la música
// Safety net: asegura que la música correcta sigue sonando. Delega en
// updateMusicForRoom, que consulta la zona de la room actual. Se llama
// periódicamente desde updatePlaying.
void Game::keepMusicPlaying() {
const std::string MUSIC_PATH = mode_ == Mode::GAME ? Defaults::Music::Files::GAME_TRACK : Defaults::Music::Files::TITLE_TRACK;
updateMusicForRoom();
}
// Si la música no está sonando
if (Audio::get()->getMusicState() == Audio::MusicState::STOPPED) {
Audio::get()->playMusic(MUSIC_PATH);
// Sincroniza la música con la zona de la room actual. Se llama desde
// changeRoom (al entrar a una nueva room) y desde keepMusicPlaying (safety net
// por si la música se detiene). Si la pista objetivo ya está sonando, no hace
// nada (Audio::playMusic tiene early return si el nombre coincide).
void Game::updateMusicForRoom() {
// Modo demo no toca música
if (mode_ != Mode::GAME) { return; }
if (room_ == nullptr) { return; }
const std::string& target = room_->getMusic();
if (target.empty()) { return; }
// Reproducir si no coincide la pista actual o si está parada
if (Audio::get()->getCurrentMusicName() != target
|| Audio::get()->getMusicState() == Audio::MusicState::STOPPED) {
Audio::get()->playMusic(target);
}
}