Merge branch 'scenario-select-callback' into develop

This commit is contained in:
IntelOrca 2016-02-13 11:43:11 +00:00
commit ca115bb410
5 changed files with 52 additions and 16 deletions

View File

@ -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();

View File

@ -25,6 +25,7 @@
#include "../localisation/localisation.h"
#include "../network/network.h"
#include "../sprites.h"
#include "../title.h"
#include "../util/util.h"
#include "error.h"
@ -43,7 +44,8 @@ enum {
WIDX_MAXPLAYERS_INCREASE,
WIDX_MAXPLAYERS_DECREASE,
WIDX_ADVERTISE_CHECKBOX,
WIDX_START_SERVER
WIDX_START_SERVER,
WIDX_LOAD_SERVER
};
#define WW 300
@ -60,7 +62,8 @@ static rct_widget window_server_start_widgets[] = {
{ WWT_DROPDOWN_BUTTON, 1, WW-18, WW-8, 68, 72, STR_NUMERIC_UP, STR_NONE },
{ WWT_DROPDOWN_BUTTON, 1, WW-18, WW-8, 72, 76, STR_NUMERIC_DOWN, STR_NONE },
{ WWT_CHECKBOX, 1, 6, WW-8, 85, 91, STR_ADVERTISE, STR_NONE }, // advertise checkbox
{ WWT_DROPDOWN_BUTTON, 1, 6, 106, WH-6-11, WH-6, STR_START_SERVER, STR_NONE }, // start server button
{ WWT_DROPDOWN_BUTTON, 1, 6, 106, WH-6-11, WH-6, STR_NEW_GAME, STR_NONE }, // start server button
{ WWT_DROPDOWN_BUTTON, 1, 112, 212, WH-6-11, WH-6, STR_LOAD_GAME, STR_NONE },
{ WIDGETS_END },
};
@ -123,7 +126,8 @@ void window_server_start_open()
(1 << WIDX_MAXPLAYERS_INCREASE) |
(1 << WIDX_MAXPLAYERS_DECREASE) |
(1 << WIDX_ADVERTISE_CHECKBOX) |
(1 << WIDX_START_SERVER)
(1 << WIDX_START_SERVER) |
(1 << WIDX_LOAD_SERVER)
);
window_init_scroll_widgets(window);
window->no_list_items = 0;
@ -146,6 +150,16 @@ static void window_server_start_close(rct_window *w)
}
static void window_server_start_scenarioselect_callback(const utf8 *path)
{
network_set_password(_password);
if (scenario_load_and_play_from_path(path)) {
network_begin_server(gConfigNetwork.default_port);
} else {
title_load();
}
}
static void window_server_start_mouseup(rct_window *w, int widgetIndex)
{
switch (widgetIndex) {
@ -181,6 +195,9 @@ static void window_server_start_mouseup(rct_window *w, int widgetIndex)
window_invalidate(w);
break;
case WIDX_START_SERVER:
window_scenarioselect_open(window_server_start_scenarioselect_callback);
break;
case WIDX_LOAD_SERVER:
network_set_password(_password);
window_loadsave_open(LOADSAVETYPE_LOAD | LOADSAVETYPE_GAME | LOADSAVETYPE_NETWORK, NULL);
break;

View File

@ -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);

View File

@ -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;
}

View File

@ -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);