diff --git a/src/event_manager.odin b/src/event_manager.odin index e07284e..d7fd829 100644 --- a/src/event_manager.odin +++ b/src/event_manager.odin @@ -78,15 +78,38 @@ process_events :: proc(game: ^Game) { case .Game_Pause: push_scene(game, make_pause_overlay()) - case .Game_Resume, .Game_Back: + case .Game_Resume: pop_scene(game) case .Game_Settings: - push_scene(game, make_settings_menu(&game.audio, RESOLUTIONS[game.res_index].label)) + parent: Maybe(Scene_Type) = nil + if active := get_active_scene(game); active != nil { + parent = active.type + } + + pop_scene(game) + push_scene(game, make_settings_menu(parent, &game.audio, RESOLUTIONS[game.res_index].label)) case .Game_Main_Menu: set_root_scene(game, make_main_menu()) audio_fade_out(&game.audio, duration = 1.0) + + case .Game_Back: + // Read parent from active scene + if active := get_active_scene(game); active != nil { + if parent, ok := active.parent.?; ok { + pop_scene(game) + + #partial switch parent { + case .Pause_Menu: push_scene(game, make_pause_overlay()) + case .Main_Menu: push_scene(game, make_main_menu()) + } + break + } + } + + // still pop when no parent linked ie resuming Gameplay + pop_scene(game) case .Game_Quit: game.should_close = true