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
|
// Cambia la habitación actual
|
||||||
current_room_ = room_path;
|
current_room_ = room_path;
|
||||||
|
|
||||||
|
// Sincroniza la música con la zona de la nueva room
|
||||||
|
updateMusicForRoom();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1008,13 +1011,29 @@ void Game::initPlayer(const Player::SpawnData& spawn_point, std::shared_ptr<Room
|
|||||||
if (IGNORE_INPUT) { player_->setIgnoreInput(true); }
|
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() {
|
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
|
// Sincroniza la música con la zona de la room actual. Se llama desde
|
||||||
if (Audio::get()->getMusicState() == Audio::MusicState::STOPPED) {
|
// changeRoom (al entrar a una nueva room) y desde keepMusicPlaying (safety net
|
||||||
Audio::get()->playMusic(MUSIC_PATH);
|
// 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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -83,7 +83,8 @@ class Game {
|
|||||||
void togglePause(); // Pone el juego en pausa
|
void togglePause(); // Pone el juego en pausa
|
||||||
void initPlayer(const Player::SpawnData& spawn_point, std::shared_ptr<Room> room); // Inicializa al jugador
|
void initPlayer(const Player::SpawnData& spawn_point, std::shared_ptr<Room> room); // Inicializa al jugador
|
||||||
void endTransition(); // Finaliza la transición entre pantallas
|
void endTransition(); // Finaliza la transición entre pantallas
|
||||||
void keepMusicPlaying(); // Hace sonar la música
|
void keepMusicPlaying(); // Hace sonar la música (safety net, delega en updateMusicForRoom)
|
||||||
|
void updateMusicForRoom(); // Sincroniza la música con la zona de la room actual
|
||||||
void demoInit(); // DEMO MODE: Inicializa las variables para el modo demo
|
void demoInit(); // DEMO MODE: Inicializa las variables para el modo demo
|
||||||
void demoCheckRoomChange(float delta_time); // DEMO MODE: Comprueba si se ha de cambiar de habitación
|
void demoCheckRoomChange(float delta_time); // DEMO MODE: Comprueba si se ha de cambiar de habitación
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
|
|||||||
Reference in New Issue
Block a user