1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2025-12-24 00:03:11 +01:00

improve reading and saving of configuration

This commit is contained in:
IntelOrca
2015-02-16 22:47:11 +00:00
parent 136936cdb2
commit 7f0ed995b5
21 changed files with 791 additions and 845 deletions

View File

@@ -293,8 +293,8 @@ static void window_options_mouseup()
window_shortcut_keys_open();
break;
case WIDX_SCREEN_EDGE_SCROLLING:
gGeneral_config.edge_scrolling ^= 1;
config_save();
gConfigGeneral.edge_scrolling ^= 1;
config_save_default();
window_invalidate(w);
break;
case WIDX_REAL_NAME_CHECKBOX:
@@ -302,30 +302,30 @@ static void window_options_mouseup()
RCT2_CALLPROC_X(0x0069C52F, RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_SHOW_REAL_GUEST_NAMES ? 0 : 1, 0, 0, 0, 0, 0, 0);
break;
case WIDX_TILE_SMOOTHING_CHECKBOX:
gGeneral_config.landscape_smoothing ^= 1;
config_save();
gConfigGeneral.landscape_smoothing ^= 1;
config_save_default();
gfx_invalidate_screen();
break;
case WIDX_GRIDLINES_CHECKBOX:
gGeneral_config.always_show_gridlines ^= 1;
config_save();
gConfigGeneral.always_show_gridlines ^= 1;
config_save_default();
gfx_invalidate_screen();
if ((w = window_get_main()) != NULL) {
if (gGeneral_config.always_show_gridlines)
if (gConfigGeneral.always_show_gridlines)
w->viewport->flags |= VIEWPORT_FLAG_GRIDLINES;
else
w->viewport->flags &= ~VIEWPORT_FLAG_GRIDLINES;
}
break;
case WIDX_SAVE_PLUGIN_DATA_CHECKBOX:
gGeneral_config.save_plugin_data ^= 1;
config_save();
gConfigGeneral.save_plugin_data ^= 1;
config_save_default();
window_invalidate(w);
break;
case WIDX_SOUND_SW_BUFFER_CHECKBOX:
pause_sounds();
gSound_config.forced_software_buffering ^= 1;
config_save();
gConfigSound.forced_software_buffering ^= 1;
config_save_default();
unpause_sounds();
window_invalidate(w);
break;
@@ -369,7 +369,7 @@ static void window_options_mousedown(int widgetIndex, rct_window*w, rct_widget*
window_options_show_dropdown(w, widget, 2);
gDropdownItemsChecked = gGeneral_config.show_height_as_units ? 1 : 2;
gDropdownItemsChecked = gConfigGeneral.show_height_as_units ? 1 : 2;
break;
case WIDX_MUSIC_DROPDOWN:
gDropdownItemsFormat[0] = 1142;
@@ -391,7 +391,7 @@ static void window_options_mousedown(int widgetIndex, rct_window*w, rct_widget*
window_options_show_dropdown(w, widget, num_items);
gDropdownItemsChecked = 1 << gSound_config.sound_quality;
gDropdownItemsChecked = 1 << gConfigSound.sound_quality;
break;
case WIDX_TITLE_MUSIC_DROPDOWN:
num_items = 3;
@@ -403,7 +403,7 @@ static void window_options_mousedown(int widgetIndex, rct_window*w, rct_widget*
window_options_show_dropdown(w, widget, num_items);
gDropdownItemsChecked = 1 << gGeneral_config.title_music;
gDropdownItemsChecked = 1 << gConfigSound.title_music;
break;
case WIDX_CURRENCY_DROPDOWN:
num_items = 10;
@@ -415,7 +415,7 @@ static void window_options_mousedown(int widgetIndex, rct_window*w, rct_widget*
window_options_show_dropdown(w, widget, num_items);
gDropdownItemsChecked = 1 << gGeneral_config.currency_format;
gDropdownItemsChecked = 1 << gConfigGeneral.currency_format;
break;
case WIDX_DISTANCE_DROPDOWN:
gDropdownItemsFormat[0] = 1142;
@@ -425,7 +425,7 @@ static void window_options_mousedown(int widgetIndex, rct_window*w, rct_widget*
window_options_show_dropdown(w, widget, 2);
gDropdownItemsChecked = 1 << gGeneral_config.measurement_format;
gDropdownItemsChecked = 1 << gConfigGeneral.measurement_format;
break;
case WIDX_RESOLUTION_DROPDOWN:
{
@@ -442,7 +442,7 @@ static void window_options_mousedown(int widgetIndex, rct_window*w, rct_widget*
args[1] = resolution->width;
args[2] = resolution->height;
if (resolution->width == gGeneral_config.fullscreen_width && resolution->height == gGeneral_config.fullscreen_height)
if (resolution->width == gConfigGeneral.fullscreen_width && resolution->height == gConfigGeneral.fullscreen_height)
selectedResolution = i;
}
@@ -463,7 +463,7 @@ static void window_options_mousedown(int widgetIndex, rct_window*w, rct_widget*
window_options_show_dropdown(w, widget, 3);
gDropdownItemsChecked = 1 << gGeneral_config.fullscreen_mode;
gDropdownItemsChecked = 1 << gConfigGeneral.fullscreen_mode;
break;
case WIDX_TEMPERATURE_DROPDOWN:
gDropdownItemsFormat[0] = 1142;
@@ -473,7 +473,7 @@ static void window_options_mousedown(int widgetIndex, rct_window*w, rct_widget*
window_options_show_dropdown(w, widget, 2);
gDropdownItemsChecked = 1 << gGeneral_config.temperature_format;
gDropdownItemsChecked = 1 << gConfigGeneral.temperature_format;
break;
case WIDX_CONSTRUCTION_MARKER_DROPDOWN:
gDropdownItemsFormat[0] = 1142;
@@ -483,7 +483,7 @@ static void window_options_mousedown(int widgetIndex, rct_window*w, rct_widget*
window_options_show_dropdown(w, widget, 2);
gDropdownItemsChecked = 1 << gGeneral_config.construction_marker_colour;
gDropdownItemsChecked = 1 << gConfigGeneral.construction_marker_colour;
break;
case WIDX_LANGUAGE_DROPDOWN:
for (i = 1; i < LANGUAGE_COUNT; i++) {
@@ -536,64 +536,64 @@ static void window_options_dropdown()
case WIDX_HEIGHT_LABELS_DROPDOWN:
// reset flag and set it to 1 if height as units is selected
RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_FLAGS, uint8) &= ~CONFIG_FLAG_SHOW_HEIGHT_AS_UNITS;
gGeneral_config.show_height_as_units = 0;
gConfigGeneral.show_height_as_units = 0;
if (dropdownIndex == 0) {
RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_FLAGS, uint8) |= CONFIG_FLAG_SHOW_HEIGHT_AS_UNITS;
gGeneral_config.show_height_as_units = 1;
gConfigGeneral.show_height_as_units = 1;
}
window_options_update_height_markers();
break;
case WIDX_MUSIC_DROPDOWN:
RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_MUSIC, uint8) = (uint8)dropdownIndex;
config_save();
config_save_default();
stop_ride_music();//RCT2_CALLPROC_EBPSAFE(0x006BCA9F);
window_invalidate(w);
break;
case WIDX_SOUND_QUALITY_DROPDOWN:
RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_MAX_VEHICLE_SOUNDS, uint8) = RCT2_GLOBAL(0x009AF601 + dropdownIndex, uint8);
RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_MAX_NO_SOUNDS, uint8) = RCT2_GLOBAL(0x009AF604 + dropdownIndex, uint8);
gSound_config.sound_quality = (sint8)dropdownIndex;
config_save();
gConfigSound.sound_quality = (sint8)dropdownIndex;
config_save_default();
window_invalidate(w);
break;
case WIDX_TITLE_MUSIC_DROPDOWN:
if (dropdownIndex == 1 && !platform_file_exists(get_file_path(PATH_ID_CSS50))) {
window_error_open(2742, 2743);
} else {
gGeneral_config.title_music = (sint8)dropdownIndex;
config_save();
gConfigSound.title_music = (sint8)dropdownIndex;
config_save_default();
window_invalidate(w);
}
break;
case WIDX_CURRENCY_DROPDOWN:
gGeneral_config.currency_format = (sint8)dropdownIndex;
config_save();
gConfigGeneral.currency_format = (sint8)dropdownIndex;
config_save_default();
gfx_invalidate_screen();
break;
case WIDX_DISTANCE_DROPDOWN:
gGeneral_config.measurement_format = (sint8)dropdownIndex;
config_save();
gConfigGeneral.measurement_format = (sint8)dropdownIndex;
config_save_default();
window_options_update_height_markers();
break;
case WIDX_RESOLUTION_DROPDOWN:
{
resolution *resolution = &gResolutions[dropdownIndex];
if (resolution->width != gGeneral_config.fullscreen_width || resolution->height != gGeneral_config.fullscreen_height) {
gGeneral_config.fullscreen_width = resolution->width;
gGeneral_config.fullscreen_height = resolution->height;
if (resolution->width != gConfigGeneral.fullscreen_width || resolution->height != gConfigGeneral.fullscreen_height) {
gConfigGeneral.fullscreen_width = resolution->width;
gConfigGeneral.fullscreen_height = resolution->height;
if (gGeneral_config.fullscreen_mode == SDL_WINDOW_FULLSCREEN)
if (gConfigGeneral.fullscreen_mode == SDL_WINDOW_FULLSCREEN)
platform_set_fullscreen_mode(SDL_WINDOW_FULLSCREEN);
config_save();
config_save_default();
gfx_invalidate_screen();
}
}
break;
case WIDX_FULLSCREEN_DROPDOWN:
if (dropdownIndex != gGeneral_config.fullscreen_mode){
if (dropdownIndex != gConfigGeneral.fullscreen_mode){
if (dropdownIndex == 2){
w->disabled_widgets |= (1 << WIDX_RESOLUTION_DROPDOWN);
w->disabled_widgets |= (1 << WIDX_RESOLUTION);
@@ -603,29 +603,29 @@ static void window_options_dropdown()
}
platform_set_fullscreen_mode(dropdownIndex);
gGeneral_config.fullscreen_mode = (uint8)dropdownIndex;
config_save();
gConfigGeneral.fullscreen_mode = (uint8)dropdownIndex;
config_save_default();
}
break;
case WIDX_TEMPERATURE_DROPDOWN:
if (dropdownIndex != gGeneral_config.temperature_format) {
gGeneral_config.temperature_format = (sint8)dropdownIndex;
config_save();
if (dropdownIndex != gConfigGeneral.temperature_format) {
gConfigGeneral.temperature_format = (sint8)dropdownIndex;
config_save_default();
gfx_invalidate_screen();
}
break;
case WIDX_CONSTRUCTION_MARKER_DROPDOWN:
if (dropdownIndex != gGeneral_config.construction_marker_colour) {
gGeneral_config.construction_marker_colour = (uint8)dropdownIndex;
config_save();
if (dropdownIndex != gConfigGeneral.construction_marker_colour) {
gConfigGeneral.construction_marker_colour = (uint8)dropdownIndex;
config_save_default();
gfx_invalidate_screen();
}
break;
case WIDX_LANGUAGE_DROPDOWN:
if (dropdownIndex != gCurrentLanguage - 1) {
language_open(dropdownIndex + 1);
gGeneral_config.language = dropdownIndex + 1;
config_save();
gConfigGeneral.language = dropdownIndex + 1;
config_save_default();
gfx_invalidate_screen();
}
break;
@@ -652,9 +652,9 @@ static void window_options_invalidate()
switch (w->page) {
case WINDOW_OPTIONS_PAGE_DISPLAY:
// resolution
RCT2_GLOBAL(0x013CE952 + 16, uint16) = gGeneral_config.fullscreen_width;
RCT2_GLOBAL(0x013CE952 + 18, uint16) = gGeneral_config.fullscreen_height;
RCT2_GLOBAL(0x013CE952 + 12, uint16) = 2773 + gGeneral_config.fullscreen_mode;
RCT2_GLOBAL(0x013CE952 + 16, uint16) = (uint16)gConfigGeneral.fullscreen_width;
RCT2_GLOBAL(0x013CE952 + 18, uint16) = (uint16)gConfigGeneral.fullscreen_height;
RCT2_GLOBAL(0x013CE952 + 12, uint16) = 2773 + gConfigGeneral.fullscreen_mode;
// landscape tile smoothing checkbox
if ((RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_FLAGS, uint8) & CONFIG_FLAG_DISABLE_SMOOTH_LANDSCAPE))
@@ -682,16 +682,16 @@ static void window_options_invalidate()
break;
case WINDOW_OPTIONS_PAGE_CULTURE:
// currency: pounds, dollars, etc. (10 total)
RCT2_GLOBAL(0x013CE952 + 12, uint16) = STR_POUNDS + gGeneral_config.currency_format;
RCT2_GLOBAL(0x013CE952 + 12, uint16) = STR_POUNDS + gConfigGeneral.currency_format;
// distance: metric/imperial
RCT2_GLOBAL(0x013CE952 + 14, uint16) = STR_IMPERIAL + gGeneral_config.measurement_format;
RCT2_GLOBAL(0x013CE952 + 14, uint16) = STR_IMPERIAL + gConfigGeneral.measurement_format;
// temperature: celsius/fahrenheit
RCT2_GLOBAL(0x013CE952 + 20, uint16) = STR_CELSIUS + gGeneral_config.temperature_format;
RCT2_GLOBAL(0x013CE952 + 20, uint16) = STR_CELSIUS + gConfigGeneral.temperature_format;
// height: units/real values
RCT2_GLOBAL(0x013CE952 + 6, uint16) = gGeneral_config.show_height_as_units ? STR_UNITS : STR_REAL_VALUES;
RCT2_GLOBAL(0x013CE952 + 6, uint16) = gConfigGeneral.show_height_as_units ? STR_UNITS : STR_REAL_VALUES;
window_options_widgets[WIDX_LANGUAGE].type = WWT_DROPDOWN;
window_options_widgets[WIDX_LANGUAGE_DROPDOWN].type = WWT_DROPDOWN_BUTTON;
@@ -719,7 +719,7 @@ static void window_options_invalidate()
RCT2_GLOBAL(0x013CE952 + 8, uint16) = STR_OFF + RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_MUSIC, uint8);
// sound quality: low/medium/high
RCT2_GLOBAL(0x013CE952 + 10, uint16) = STR_SOUND_LOW + gSound_config.sound_quality;
RCT2_GLOBAL(0x013CE952 + 10, uint16) = STR_SOUND_LOW + gConfigSound.sound_quality;
//Sound pause checkbox
if (!g_sounds_disabled)
@@ -728,7 +728,7 @@ static void window_options_invalidate()
w->pressed_widgets &= ~(1ULL << WIDX_SOUND_PAUSED_CHECKBOX);
// sound software mixing buffer checkbox
if (gSound_config.forced_software_buffering)
if (gConfigSound.forced_software_buffering)
w->pressed_widgets |= (1ULL << WIDX_SOUND_SW_BUFFER_CHECKBOX);
else
w->pressed_widgets &= ~(1ULL << WIDX_SOUND_SW_BUFFER_CHECKBOX);
@@ -746,7 +746,7 @@ static void window_options_invalidate()
break;
case WINDOW_OPTIONS_PAGE_INPUT:
// screen edge scrolling checkbox
if (gGeneral_config.edge_scrolling)
if (gConfigGeneral.edge_scrolling)
w->pressed_widgets |= (1ULL << WIDX_SCREEN_EDGE_SCROLLING);
else
w->pressed_widgets &= ~(1ULL << WIDX_SCREEN_EDGE_SCROLLING);
@@ -762,7 +762,7 @@ static void window_options_invalidate()
w->pressed_widgets &= ~(1ULL << WIDX_REAL_NAME_CHECKBOX);
// save plugin data checkbox
if (gGeneral_config.save_plugin_data)
if (gConfigGeneral.save_plugin_data)
w->pressed_widgets |= (1ULL << WIDX_SAVE_PLUGIN_DATA_CHECKBOX);
else
w->pressed_widgets &= ~(1ULL << WIDX_SAVE_PLUGIN_DATA_CHECKBOX);
@@ -835,7 +835,7 @@ static void window_options_paint()
gfx_draw_string_left(dpi, 2738, w, 12, w->x + 10, w->y + window_options_widgets[WIDX_TITLE_MUSIC].top + 1);
gfx_draw_string_left(
dpi,
2739 + gGeneral_config.title_music,
2739 + gConfigSound.title_music,
NULL,
12,
w->x + window_options_widgets[WIDX_TITLE_MUSIC].left + 1,
@@ -861,9 +861,9 @@ static void window_options_show_dropdown(rct_window *w, rct_widget *widget, int
static void window_options_update_height_markers()
{
RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_HEIGHT_MARKERS, uint16) = gGeneral_config.show_height_as_units ?
0 : (gGeneral_config.measurement_format + 1) * 256;
config_save();
RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_HEIGHT_MARKERS, uint16) = gConfigGeneral.show_height_as_units ?
0 : (gConfigGeneral.measurement_format + 1) * 256;
config_save_default();
gfx_invalidate_screen();
}