changeset 16959:55b2bec60c52 draft

(svn r21695) -Codechange: add helper function to get the currently applicable GameSettings object
author yexo <yexo@openttd.org>
date Sun, 02 Jan 2011 00:34:21 +0000
parents e5c819640141
children 1c1095abcc11
files src/currency.h src/settings.cpp src/settings_gui.cpp src/settings_type.h
diffstat 4 files changed, 20 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/src/currency.h
+++ b/src/currency.h
@@ -44,7 +44,7 @@
 
 /* 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();
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -980,7 +980,7 @@
 	/* 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 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 @@
 	}
 
 	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 @@
 	 * 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 @@
 		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");
--- a/src/settings_gui.cpp
+++ b/src/settings_gui.cpp
@@ -186,7 +186,7 @@
 
 	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 @@
 
 		/* 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 @@
 				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 @@
 	{
 		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) {
--- 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 @@
 /** 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 */