From 934bf28cc142c9500c57f0924858adacf0c3d55e Mon Sep 17 00:00:00 2001 From: IntelOrca Date: Wed, 10 Feb 2016 18:44:00 +0000 Subject: [PATCH] change scenario select to callback mechanism --- src/interface/window.h | 3 ++- src/windows/title_menu.c | 10 +++++++++- src/windows/title_scenarioselect.c | 10 ++++++---- src/windows/top_toolbar.c | 22 +++++++++++++++------- 4 files changed, 32 insertions(+), 13 deletions(-) diff --git a/src/interface/window.h b/src/interface/window.h index 1077364831..fb1b613a43 100644 --- a/src/interface/window.h +++ b/src/interface/window.h @@ -498,6 +498,7 @@ enum { }; typedef void (*modal_callback)(int result); +typedef void (*scenarioselect_callback)(const utf8 *path); extern bool gLoadSaveTitleSequenceSave; extern modal_callback gLoadSaveCallback; @@ -585,7 +586,7 @@ void window_title_exit_open(); void window_title_options_open(); void window_title_logo_open(); void window_news_open(); -void window_scenarioselect_open(); +void window_scenarioselect_open(scenarioselect_callback callback); void window_track_list_open(ride_list_item item); void window_clear_scenery_open(); void window_land_open(); diff --git a/src/windows/title_menu.c b/src/windows/title_menu.c index 246128a264..a45316b7c8 100644 --- a/src/windows/title_menu.c +++ b/src/windows/title_menu.c @@ -28,6 +28,7 @@ #include "../interface/window.h" #include "../localisation/localisation.h" #include "../sprites.h" +#include "../title.h" #include "dropdown.h" enum { @@ -131,11 +132,18 @@ void window_title_menu_open() window_init_scroll_widgets(window); } +static void window_title_menu_scenarioselect_callback(const utf8 *path) +{ + if (!scenario_load_and_play_from_path(path)) { + title_load(); + } +} + static void window_title_menu_mouseup(rct_window *w, int widgetIndex) { switch (widgetIndex) { case WIDX_START_NEW_GAME: - window_scenarioselect_open(); + window_scenarioselect_open(window_title_menu_scenarioselect_callback); break; case WIDX_CONTINUE_SAVED_GAME: game_do_command(0, 1, 0, 0, GAME_COMMAND_LOAD_OR_QUIT, 0, 0); diff --git a/src/windows/title_scenarioselect.c b/src/windows/title_scenarioselect.c index 40b21a6fa4..0bbe014f1c 100644 --- a/src/windows/title_scenarioselect.c +++ b/src/windows/title_scenarioselect.c @@ -135,16 +135,20 @@ static void initialise_list_items(rct_window *w); static bool is_scenario_visible(rct_window *w, scenario_index_entry *scenario); static bool is_locking_enabled(rct_window *w); +static scenarioselect_callback _callback; + /** * * rct2: 0x006781B5 */ -void window_scenarioselect_open() +void window_scenarioselect_open(scenarioselect_callback callback) { rct_window* window; int windowWidth; int windowHeight = 334; + _callback = callback; + if (window_bring_to_front_by_class(WC_SCENARIO_SELECT) != NULL) return; @@ -275,9 +279,7 @@ static void window_scenarioselect_scrollmousedown(rct_window *w, int scrollIndex y -= 24; if (y < 0 && !listItem->scenario.is_locked) { audio_play_sound_panned(SOUND_CLICK_1, w->width / 2 + w->x, 0, 0, 0); - if (!scenario_load_and_play_from_path(listItem->scenario.scenario->path)) { - title_load(); - } + _callback(listItem->scenario.scenario->path); } break; } diff --git a/src/windows/top_toolbar.c b/src/windows/top_toolbar.c index 50a93c9a0e..fa4aa5491b 100644 --- a/src/windows/top_toolbar.c +++ b/src/windows/top_toolbar.c @@ -19,27 +19,28 @@ *****************************************************************************/ #include "../addresses.h" +#include "../audio/audio.h" #include "../cheats.h" #include "../config.h" #include "../editor.h" #include "../game.h" #include "../input.h" -#include "../sprites.h" -#include "../audio/audio.h" +#include "../interface/console.h" #include "../interface/screenshot.h" +#include "../interface/themes.h" +#include "../interface/viewport.h" #include "../interface/widget.h" #include "../interface/window.h" -#include "../interface/viewport.h" #include "../localisation/localisation.h" #include "../network/network.h" #include "../network/twitch.h" #include "../scenario.h" +#include "../title.h" +#include "../sprites.h" #include "../util/util.h" -#include "../world/scenery.h" #include "../world/banner.h" +#include "../world/scenery.h" #include "dropdown.h" -#include "../interface/themes.h" -#include "../interface/console.h" enum { WIDX_PAUSE, @@ -498,6 +499,13 @@ static void window_top_toolbar_mousedown(int widgetIndex, rct_window*w, rct_widg } } +static void window_top_toolbar_scenarioselect_callback(const utf8 *path) +{ + if (!scenario_load_and_play_from_path(path)) { + title_load(); + } +} + /** * * rct2: 0x0066C9EA @@ -521,7 +529,7 @@ static void window_top_toolbar_dropdown(rct_window *w, int widgetIndex, int drop switch (dropdownIndex) { case DDIDX_NEW_GAME: - window_scenarioselect_open(); + window_scenarioselect_open(window_top_toolbar_scenarioselect_callback); break; case DDIDX_LOAD_GAME: game_do_command(0, 1, 0, 0, GAME_COMMAND_LOAD_OR_QUIT, 0, 0);