fade effect when switching states

This commit is contained in:
2025-11-29 19:23:41 +01:00
parent a7d67b26a5
commit 332e2efb74
5 changed files with 71 additions and 21 deletions

View File

@ -326,14 +326,18 @@ void LevelSelectorState::selectLevel(int level) {
*ctx.startLevelSelection = level;
}
// Transition back to menu
if (ctx.stateManager) {
if (ctx.requestFadeTransition) {
ctx.requestFadeTransition(AppState::Menu);
} else if (ctx.stateManager) {
ctx.stateManager->setState(AppState::Menu);
}
}
void LevelSelectorState::closePopup() {
// Transition back to menu without changing level
if (ctx.stateManager) {
if (ctx.requestFadeTransition) {
ctx.requestFadeTransition(AppState::Menu);
} else if (ctx.stateManager) {
ctx.stateManager->setState(AppState::Menu);
}
}

View File

@ -126,10 +126,18 @@ void MenuState::handleEvent(const SDL_Event& e) {
triggerPlay();
break;
case 1:
ctx.stateManager->setState(AppState::LevelSelector);
if (ctx.requestFadeTransition) {
ctx.requestFadeTransition(AppState::LevelSelector);
} else if (ctx.stateManager) {
ctx.stateManager->setState(AppState::LevelSelector);
}
break;
case 2:
ctx.stateManager->setState(AppState::Options);
if (ctx.requestFadeTransition) {
ctx.requestFadeTransition(AppState::Options);
} else if (ctx.stateManager) {
ctx.stateManager->setState(AppState::Options);
}
break;
case 3:
setExitPrompt(true);

View File

@ -267,7 +267,9 @@ void OptionsState::toggleSoundFx() {
}
void OptionsState::exitToMenu() {
if (ctx.stateManager) {
if (ctx.requestFadeTransition) {
ctx.requestFadeTransition(AppState::Menu);
} else if (ctx.stateManager) {
ctx.stateManager->setState(AppState::Menu);
}
}

View File

@ -13,6 +13,7 @@ class Starfield;
class Starfield3D;
class FontAtlas;
class LineEffect;
enum class AppState;
// Forward declare StateManager so StateContext can hold a pointer without
// including the StateManager header here.
@ -58,6 +59,7 @@ struct StateContext {
std::function<bool()> queryFullscreen; // Optional callback if fullscreenFlag is not reliable
std::function<void()> requestQuit; // Allows menu/option states to close the app gracefully
std::function<void()> startPlayTransition; // Optional fade hook when transitioning from menu to gameplay
std::function<void(AppState)> requestFadeTransition; // Generic state fade requests (menu/options/level)
// Pointer to the application's StateManager so states can request transitions
StateManager* stateManager = nullptr;
};