From 8ae90addd6b3a131e730c580d2a3206a88bc0ace Mon Sep 17 00:00:00 2001 From: yexo Date: Sun, 2 Jan 2011 00:34:21 +0000 Subject: [PATCH] (svn r21695) -Codechange: add helper function to get the currently applicable GameSettings object --- src/currency.h | 2 +- src/settings.cpp | 11 +++++------ src/settings_gui.cpp | 8 ++++---- src/settings_type.h | 10 ++++++++++ 4 files changed, 20 insertions(+), 11 deletions(-) diff --git a/src/currency.h b/src/currency.h index 1cc2d95596..60ee5b7869 100644 --- a/src/currency.h +++ b/src/currency.h @@ -44,7 +44,7 @@ extern CurrencySpec _currency_specs[NUM_CURRENCY]; /* XXX small hack, but makes the rest of the code a bit nicer to read */ #define _custom_currency (_currency_specs[CUSTOM_CURRENCY_ID]) -#define _currency ((const CurrencySpec*)&_currency_specs[_game_mode == GM_MENU ? _settings_newgame.locale.currency : _settings_game.locale.currency]) +#define _currency ((const CurrencySpec*)&_currency_specs[GetGameSettings().locale.currency]) uint GetMaskOfAllowedCurrencies(); void CheckSwitchToEuro(); diff --git a/src/settings.cpp b/src/settings.cpp index 82b3a3538f..86cc9b6e70 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -980,7 +980,7 @@ static bool DifficultyReset(int32 level) /* In game / in the scenario editor you can set the difficulty level only to custom. This is * needed by the AI Gui code that sets the difficulty level when you change any AI settings. */ if (_game_mode != GM_MENU && level != 3) return false; - SetDifficultyLevel(level, (_game_mode == GM_MENU) ? &_settings_newgame.difficulty : &_settings_game.difficulty); + SetDifficultyLevel(level, &GetGameSettings().difficulty); return true; } @@ -1020,7 +1020,7 @@ static bool DifficultyNoiseChange(int32 i) static bool MaxNoAIsChange(int32 i) { - if (((_game_mode == GM_MENU) ? _settings_newgame.difficulty : _settings_game.difficulty).max_no_competitors != 0 && + if (GetGameSettings().difficulty.max_no_competitors != 0 && #ifdef ENABLE_AI AI::GetInfoList()->size() == 0 && #endif /* ENABLE_AI */ @@ -1644,8 +1644,7 @@ CommandCost CmdChangeSetting(TileIndex tile, DoCommandFlag flags, uint32 p1, uin } if (flags & DC_EXEC) { - GameSettings *s = (_game_mode == GM_MENU) ? &_settings_newgame : &_settings_game; - void *var = GetVariableAddress(s, &sd->save); + void *var = GetVariableAddress(&GetGameSettings(), &sd->save); int32 oldval = (int32)ReadValue(var, sd->save.conv); int32 newval = (int32)p2; @@ -1724,7 +1723,7 @@ bool SetSettingValue(uint index, int32 value, bool force_newgame) * of settings because changing a company-based setting in a game also * changes its defaults. At least that is the convention we have chosen */ if (sd->save.conv & SLF_NETWORK_NO) { - void *var = GetVariableAddress((_game_mode == GM_MENU) ? &_settings_newgame : &_settings_game, &sd->save); + void *var = GetVariableAddress(&GetGameSettings(), &sd->save); Write_ValidateSetting(var, sd, value); if (_game_mode != GM_MENU) { @@ -1963,7 +1962,7 @@ void IConsoleListSettings(const char *prefilter) if (!SlIsObjectCurrentlyValid(sd->save.version_from, sd->save.version_to)) continue; if (prefilter != NULL && strstr(sd->desc.name, prefilter) == NULL) continue; char value[80]; - const void *ptr = GetVariableAddress((_game_mode == GM_MENU) ? &_settings_newgame : &_settings_game, &sd->save); + const void *ptr = GetVariableAddress(&GetGameSettings(), &sd->save); if (sd->desc.cmd == SDT_BOOLX) { snprintf(value, lengthof(value), (*(bool*)ptr == 1) ? "on" : "off"); diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 76b682e8ff..e0329693ae 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -186,7 +186,7 @@ struct GameOptionsWindow : Window { GameOptionsWindow(const WindowDesc *desc) : Window() { - this->opt = (_game_mode == GM_MENU) ? &_settings_newgame : &_settings_game; + this->opt = &GetGameSettings(); this->reload = false; this->InitNested(desc); @@ -591,7 +591,7 @@ public: /* Copy current settings (ingame or in intro) to temporary holding place * change that when setting stuff, copy back on clicking 'OK' */ - this->opt_mod_temp = (_game_mode == GM_MENU) ? _settings_newgame : _settings_game; + this->opt_mod_temp = GetGameSettings(); /* Setup disabled buttons when creating window * disable all other difficulty buttons during gameplay except for 'custom' */ this->SetWidgetsDisabledState(_game_mode != GM_MENU, @@ -696,7 +696,7 @@ public: break; case GDW_ACCEPT: { // Save button - save changes - GameSettings *opt_ptr = (_game_mode == GM_MENU) ? &_settings_newgame : &_settings_game; + GameSettings *opt_ptr = &GetGameSettings(); uint i; GetSettingFromName("difficulty.diff_level", &i); @@ -1526,7 +1526,7 @@ struct GameSettingsWindow : Window { { static bool first_time = true; - settings_ptr = (_game_mode == GM_MENU) ? &_settings_newgame : &_settings_game; + settings_ptr = &GetGameSettings(); /* Build up the dynamic settings-array only once per OpenTTD session */ if (first_time) { diff --git a/src/settings_type.h b/src/settings_type.h index 2521caa8d9..39a4e1a0f4 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -17,6 +17,7 @@ #include "transport_type.h" #include "network/core/config.h" #include "company_type.h" +#include "openttd.h" /** Settings related to the difficulty of the game */ struct DifficultySettings { @@ -438,4 +439,13 @@ extern GameSettings _settings_game; /** The settings values that are used for new games and/or modified in config file. */ extern GameSettings _settings_newgame; +/** + * Get the settings-object applicable for the current situation: the newgame settings + * when we're in the main menu and otherwise the settings of the current game. + */ +static inline GameSettings &GetGameSettings() +{ + return (_game_mode == GM_MENU) ? _settings_newgame : _settings_game; +} + #endif /* SETTINGS_TYPE_H */