fase 3 de zones
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user