forked from jaildesigner-jailgames/jaildoctors_dilemma
clang-format
This commit is contained in:
@@ -82,13 +82,21 @@ void Game::handleEvents() {
|
||||
void Game::handleInput() {
|
||||
Input::get()->update();
|
||||
|
||||
// Inputs globales siempre funcionan
|
||||
if (Input::get()->checkAction(InputAction::TOGGLE_MUSIC, Input::DO_NOT_ALLOW_REPEAT)) {
|
||||
board_->music = !board_->music;
|
||||
board_->music ? Audio::get()->resumeMusic() : Audio::get()->pauseMusic();
|
||||
Notifier::get()->show({"MUSIC " + std::string(board_->music ? "ENABLED" : "DISABLED")});
|
||||
}
|
||||
|
||||
else if (Input::get()->checkAction(InputAction::PAUSE, Input::DO_NOT_ALLOW_REPEAT)) {
|
||||
// Durante fade/postfade, solo procesar inputs globales
|
||||
if (state_ != State::PLAYING) {
|
||||
GlobalInputs::handle();
|
||||
return;
|
||||
}
|
||||
|
||||
// Input de pausa solo en estado PLAYING
|
||||
if (Input::get()->checkAction(InputAction::PAUSE, Input::DO_NOT_ALLOW_REPEAT)) {
|
||||
togglePause();
|
||||
Notifier::get()->show({std::string(paused_ ? "GAME PAUSED" : "GAME RUNNING")});
|
||||
}
|
||||
@@ -124,28 +132,18 @@ void Game::update() {
|
||||
Debug::get()->clear();
|
||||
#endif
|
||||
|
||||
// Actualiza los objetos
|
||||
room_->update(DELTA_TIME);
|
||||
switch (mode_) {
|
||||
case Mode::GAME:
|
||||
player_->update(DELTA_TIME);
|
||||
checkPlayerIsOnBorder();
|
||||
checkPlayerAndItems();
|
||||
checkPlayerAndEnemies();
|
||||
checkIfPlayerIsAlive();
|
||||
checkGameOver();
|
||||
checkEndGame();
|
||||
checkRestoringJail(DELTA_TIME);
|
||||
checkSomeCheevos();
|
||||
// Dispatch por estado
|
||||
switch (state_) {
|
||||
case State::PLAYING:
|
||||
updatePlaying(DELTA_TIME);
|
||||
break;
|
||||
|
||||
case Mode::DEMO:
|
||||
demoCheckRoomChange(DELTA_TIME);
|
||||
case State::FADE_TO_ENDING:
|
||||
updateFadeToEnding(DELTA_TIME);
|
||||
break;
|
||||
case State::POST_FADE_ENDING:
|
||||
updatePostFadeEnding(DELTA_TIME);
|
||||
break;
|
||||
}
|
||||
scoreboard_->update(DELTA_TIME);
|
||||
keepMusicPlaying();
|
||||
updateBlackScreen(DELTA_TIME);
|
||||
|
||||
Audio::update(); // Actualiza el objeto Audio
|
||||
Screen::get()->update(DELTA_TIME); // Actualiza el objeto Screen
|
||||
@@ -155,6 +153,73 @@ void Game::update() {
|
||||
#endif
|
||||
}
|
||||
|
||||
// Actualiza el juego en estado PLAYING
|
||||
void Game::updatePlaying(float delta_time) {
|
||||
// Actualiza los objetos
|
||||
room_->update(delta_time);
|
||||
switch (mode_) {
|
||||
case Mode::GAME:
|
||||
player_->update(delta_time);
|
||||
checkPlayerIsOnBorder();
|
||||
checkPlayerAndItems();
|
||||
checkPlayerAndEnemies();
|
||||
checkIfPlayerIsAlive();
|
||||
checkGameOver();
|
||||
checkEndGame();
|
||||
checkRestoringJail(delta_time);
|
||||
checkSomeCheevos();
|
||||
break;
|
||||
|
||||
case Mode::DEMO:
|
||||
demoCheckRoomChange(delta_time);
|
||||
break;
|
||||
}
|
||||
scoreboard_->update(delta_time);
|
||||
keepMusicPlaying();
|
||||
updateBlackScreen(delta_time);
|
||||
}
|
||||
|
||||
// Actualiza el juego en estado FADE_TO_ENDING
|
||||
void Game::updateFadeToEnding(float delta_time) {
|
||||
// Actualiza room, enemies, items (todo sigue funcionando)
|
||||
room_->update(delta_time);
|
||||
|
||||
// NO actualizar player (congelar movimiento)
|
||||
// player_->update(delta_time); -- COMENTADO INTENCIONALMENTE
|
||||
|
||||
// Actualiza scoreboard
|
||||
scoreboard_->update(delta_time);
|
||||
keepMusicPlaying();
|
||||
|
||||
// Aplica el fade progresivo
|
||||
fade_accumulator_ += delta_time;
|
||||
if (fade_accumulator_ >= FADE_STEP_INTERVAL) {
|
||||
fade_accumulator_ = 0.0F;
|
||||
if (Screen::get()->getRendererSurface()->fadeSubPalette()) {
|
||||
// Fade completado, transicionar a POST_FADE
|
||||
transitionToState(State::POST_FADE_ENDING);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Actualiza el juego en estado POST_FADE_ENDING
|
||||
void Game::updatePostFadeEnding(float delta_time) {
|
||||
// Pantalla negra estática, acumular tiempo
|
||||
state_time_ += delta_time;
|
||||
|
||||
// Después del delay, cambiar a la escena de ending
|
||||
if (state_time_ >= POST_FADE_DELAY) {
|
||||
SceneManager::current = SceneManager::Scene::ENDING;
|
||||
}
|
||||
}
|
||||
|
||||
// Cambia al estado especificado y resetea los timers
|
||||
void Game::transitionToState(State new_state) {
|
||||
state_ = new_state;
|
||||
state_time_ = 0.0F;
|
||||
fade_accumulator_ = 0.0F;
|
||||
}
|
||||
|
||||
// Pinta los objetos en pantalla
|
||||
void Game::render() {
|
||||
// Prepara para dibujar el frame
|
||||
@@ -434,7 +499,9 @@ auto Game::checkEndGame() -> bool {
|
||||
// Comprueba los logros de completar el juego
|
||||
checkEndGameCheevos();
|
||||
|
||||
SceneManager::current = SceneManager::Scene::ENDING;
|
||||
// Iniciar transición de fade en vez de cambio inmediato de escena
|
||||
transitionToState(State::FADE_TO_ENDING);
|
||||
Audio::get()->fadeOutMusic(1000); // Fade out de música en 1 segundo
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user