1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-16 11:33:03 +01:00
This commit is contained in:
IntelOrca
2015-11-02 20:43:55 +00:00
parent 4c72710e02
commit 45bfdad4e3
3 changed files with 43 additions and 6 deletions

View File

@@ -485,8 +485,16 @@ enum {
LOADSAVETYPE_NETWORK = 1 << 4,
};
extern bool gLoadSaveTitleSequenceSave;
enum {
MODAL_RESULT_FAIL = -1,
MODAL_RESULT_CANCEL,
MODAL_RESULT_OK
};
typedef void (*modal_callback)(int result);
extern bool gLoadSaveTitleSequenceSave;
extern modal_callback gLoadSaveCallback;
// rct2: 0x01420078
extern rct_window* g_window_list;

View File

@@ -124,6 +124,8 @@ typedef struct {
uint8 type;
} loadsave_list_item;
modal_callback gLoadSaveCallback;
int _listItemsCount = 0;
loadsave_list_item *_listItems = NULL;
char _directory[MAX_PATH];
@@ -145,6 +147,7 @@ static rct_window *window_overwrite_prompt_open(const char *name, const char *pa
rct_window *window_loadsave_open(int type, char *defaultName)
{
gLoadSaveCallback = NULL;
gLoadSaveTitleSequenceSave = false;
char path[MAX_PATH], *ch;
int includeNewItem;
@@ -731,6 +734,13 @@ static void window_loadsave_populate_list(int includeNewItem, bool browsable, co
window_loadsave_sort_list(sortStartIndex, _listItemsCount - 1);
}
static void window_loadsave_invoke_callback(int result)
{
if (gLoadSaveCallback != NULL) {
gLoadSaveCallback(result);
}
}
static void window_loadsave_select(rct_window *w, const char *path)
{
SDL_RWops* rw;
@@ -750,6 +760,7 @@ static void window_loadsave_select(rct_window *w, const char *path)
title_sequence_add_save(gCurrentTitleSequence, path, newName);
window_close(w);
}
window_loadsave_invoke_callback(MODAL_RESULT_OK);
}
else if (game_load_save(path)) {
if (_loadsaveType & LOADSAVETYPE_NETWORK) {
@@ -762,11 +773,13 @@ static void window_loadsave_select(rct_window *w, const char *path)
window_close(w);
gfx_invalidate_screen();
window_loadsave_invoke_callback(MODAL_RESULT_OK);
rct2_endupdate();
}
else {
// 1050, not the best message...
window_error_open(STR_LOAD_GAME, 1050);
window_loadsave_invoke_callback(MODAL_RESULT_FAIL);
}
break;
case (LOADSAVETYPE_SAVE | LOADSAVETYPE_GAME) :
@@ -783,22 +796,28 @@ static void window_loadsave_select(rct_window *w, const char *path)
window_close_by_class(WC_LOADSAVE);
game_do_command(0, 1047, 0, -1, GAME_COMMAND_SET_RIDE_APPEARANCE, 0, 0);
gfx_invalidate_screen();
window_loadsave_invoke_callback(MODAL_RESULT_OK);
} else {
window_error_open(STR_SAVE_GAME, 1047);
window_loadsave_invoke_callback(MODAL_RESULT_FAIL);
}
} else {
window_error_open(STR_SAVE_GAME, 1047);
window_loadsave_invoke_callback(MODAL_RESULT_FAIL);
}
break;
case (LOADSAVETYPE_LOAD | LOADSAVETYPE_LANDSCAPE) :
editor_load_landscape(path);
if (1) {
gfx_invalidate_screen();
window_loadsave_invoke_callback(MODAL_RESULT_OK);
rct2_endupdate();
}
else {
// 1050, not the best message...
window_error_open(STR_LOAD_LANDSCAPE, 1050);
window_loadsave_invoke_callback(MODAL_RESULT_FAIL);
}
break;
case (LOADSAVETYPE_SAVE | LOADSAVETYPE_LANDSCAPE) :
@@ -810,11 +829,14 @@ static void window_loadsave_select(rct_window *w, const char *path)
if (success) {
window_close_by_class(WC_LOADSAVE);
gfx_invalidate_screen();
window_loadsave_invoke_callback(MODAL_RESULT_OK);
} else {
window_error_open(STR_SAVE_LANDSCAPE, 1049);
window_loadsave_invoke_callback(MODAL_RESULT_FAIL);
}
} else {
window_error_open(STR_SAVE_LANDSCAPE, 1049);
window_loadsave_invoke_callback(MODAL_RESULT_FAIL);
}
break;
case (LOADSAVETYPE_SAVE | LOADSAVETYPE_SCENARIO) :
@@ -834,16 +856,19 @@ static void window_loadsave_select(rct_window *w, const char *path)
if (success) {
window_close_by_class(WC_LOADSAVE);
window_loadsave_invoke_callback(MODAL_RESULT_OK);
title_load();
} else {
window_error_open(STR_SAVE_SCENARIO, STR_SCENARIO_SAVE_FAILED);
s6Info->editor_step = EDITOR_STEP_OBJECTIVE_SELECTION;
window_loadsave_invoke_callback(MODAL_RESULT_FAIL);
}
break;
}
case (LOADSAVETYPE_LOAD | LOADSAVETYPE_TRACK) :
window_install_track_open(path);
window_close_by_class(WC_LOADSAVE);
window_loadsave_invoke_callback(MODAL_RESULT_OK);
break;
}
}

View File

@@ -72,6 +72,7 @@ static void window_save_prompt_close(rct_window *w);
static void window_save_prompt_mouseup(rct_window *w, int widgetIndex);
static void window_save_prompt_invalidate(rct_window *w);
static void window_save_prompt_paint(rct_window *w, rct_drawpixelinfo *dpi);
static void window_save_prompt_callback(int result);
static rct_window_event_list window_save_prompt_events = {
window_save_prompt_close,
@@ -237,6 +238,7 @@ static void window_save_prompt_mouseup(rct_window *w, int widgetIndex)
case WIDX_SAVE:
save_game_as();
window_close(w);
gLoadSaveCallback = window_save_prompt_callback;
break;
case WIDX_DONT_SAVE:
game_load_or_quit_no_save_prompt();
@@ -259,11 +261,6 @@ static void window_save_prompt_mouseup(rct_window *w, int widgetIndex)
return;
}
}
if (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_AGE, uint16) < 3840) {
game_load_or_quit_no_save_prompt();
return;
}
}
static void window_save_prompt_invalidate(rct_window *w)
@@ -274,4 +271,11 @@ static void window_save_prompt_invalidate(rct_window *w)
static void window_save_prompt_paint(rct_window *w, rct_drawpixelinfo *dpi)
{
window_draw_widgets(w, dpi);
}
static void window_save_prompt_callback(int result)
{
if (result == MODAL_RESULT_OK) {
game_load_or_quit_no_save_prompt();
}
}