mirror of https://github.com/OpenTTD/OpenTTD
Codechange: just pass the SettingDesc to SetSettingValue and remove distinction between (non)company
parent
db54e20825
commit
8ffb4122df
|
@ -2199,9 +2199,7 @@ public:
|
||||||
case WID_CL_SERVER_NAME_EDIT: {
|
case WID_CL_SERVER_NAME_EDIT: {
|
||||||
if (!_network_server) break;
|
if (!_network_server) break;
|
||||||
|
|
||||||
uint index;
|
SetSettingValue(GetSettingFromName("network.server_name"), StrEmpty(str) ? "Unnamed Server" : str);
|
||||||
GetSettingFromName("network.server_name", &index);
|
|
||||||
SetSettingValue(index, StrEmpty(str) ? "Unnamed Server" : str);
|
|
||||||
this->InvalidateData();
|
this->InvalidateData();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -2210,9 +2208,7 @@ public:
|
||||||
std::string client_name(str);
|
std::string client_name(str);
|
||||||
if (!NetworkValidateClientName(client_name)) break;
|
if (!NetworkValidateClientName(client_name)) break;
|
||||||
|
|
||||||
uint index;
|
SetSettingValue(GetSettingFromName("network.client_name"), client_name.c_str());
|
||||||
GetSettingFromName("network.client_name", &index);
|
|
||||||
SetSettingValue(index, client_name.c_str());
|
|
||||||
this->InvalidateData();
|
this->InvalidateData();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -253,8 +253,7 @@ static_assert(lengthof(_news_type_data) == NT_END);
|
||||||
*/
|
*/
|
||||||
NewsDisplay NewsTypeData::GetDisplay() const
|
NewsDisplay NewsTypeData::GetDisplay() const
|
||||||
{
|
{
|
||||||
uint index;
|
const SettingDesc *sd = GetSettingFromName(this->name);
|
||||||
const SettingDesc *sd = GetSettingFromName(this->name, &index);
|
|
||||||
assert(sd != nullptr);
|
assert(sd != nullptr);
|
||||||
void *ptr = GetVariableAddress(nullptr, &sd->save);
|
void *ptr = GetVariableAddress(nullptr, &sd->save);
|
||||||
return (NewsDisplay)ReadValue(ptr, sd->save.conv);
|
return (NewsDisplay)ReadValue(ptr, sd->save.conv);
|
||||||
|
|
|
@ -17,8 +17,7 @@
|
||||||
|
|
||||||
/* static */ bool ScriptGameSettings::IsValid(const char *setting)
|
/* static */ bool ScriptGameSettings::IsValid(const char *setting)
|
||||||
{
|
{
|
||||||
uint i;
|
const SettingDesc *sd = GetSettingFromName(setting);
|
||||||
const SettingDesc *sd = GetSettingFromName(setting, &i);
|
|
||||||
return sd != nullptr && sd->desc.cmd != SDT_STDSTRING;
|
return sd != nullptr && sd->desc.cmd != SDT_STDSTRING;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,8 +25,7 @@
|
||||||
{
|
{
|
||||||
if (!IsValid(setting)) return -1;
|
if (!IsValid(setting)) return -1;
|
||||||
|
|
||||||
uint index;
|
const SettingDesc *sd = GetSettingFromName(setting);
|
||||||
const SettingDesc *sd = GetSettingFromName(setting, &index);
|
|
||||||
|
|
||||||
void *ptr = GetVariableAddress(&_settings_game, &sd->save);
|
void *ptr = GetVariableAddress(&_settings_game, &sd->save);
|
||||||
if (sd->desc.cmd == SDT_BOOLX) return *(bool*)ptr;
|
if (sd->desc.cmd == SDT_BOOLX) return *(bool*)ptr;
|
||||||
|
@ -39,13 +37,12 @@
|
||||||
{
|
{
|
||||||
if (!IsValid(setting)) return false;
|
if (!IsValid(setting)) return false;
|
||||||
|
|
||||||
uint index;
|
const SettingDesc *sd = GetSettingFromName(setting);
|
||||||
const SettingDesc *sd = GetSettingFromName(setting, &index);
|
|
||||||
|
|
||||||
if ((sd->save.conv & SLF_NO_NETWORK_SYNC) != 0) return false;
|
if ((sd->save.conv & SLF_NO_NETWORK_SYNC) != 0) return false;
|
||||||
if (sd->desc.cmd != SDT_BOOLX && sd->desc.cmd != SDT_NUMX) return false;
|
if (sd->desc.cmd != SDT_BOOLX && sd->desc.cmd != SDT_NUMX) return false;
|
||||||
|
|
||||||
return ScriptObject::DoCommand(0, index, value, CMD_CHANGE_SETTING);
|
return ScriptObject::DoCommand(0, GetSettingIndex(sd), value, CMD_CHANGE_SETTING);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ bool ScriptGameSettings::IsDisabledVehicleType(ScriptVehicle::VehicleType vehicle_type)
|
/* static */ bool ScriptGameSettings::IsDisabledVehicleType(ScriptVehicle::VehicleType vehicle_type)
|
||||||
|
|
|
@ -1948,6 +1948,17 @@ CommandCost CmdChangeCompanySetting(TileIndex tile, DoCommandFlag flags, uint32
|
||||||
return CommandCost();
|
return CommandCost();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the index of the setting with this description.
|
||||||
|
* @param sd the setting to get the index for.
|
||||||
|
* @return the index of the setting to be used for CMD_CHANGE_SETTING.
|
||||||
|
*/
|
||||||
|
uint GetSettingIndex(const SettingDesc *sd)
|
||||||
|
{
|
||||||
|
assert((sd->desc.flags & SGF_PER_COMPANY) == 0);
|
||||||
|
return sd - _settings;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Top function to save the new value of an element of the Settings struct
|
* Top function to save the new value of an element of the Settings struct
|
||||||
* @param index offset in the SettingDesc array of the Settings struct which
|
* @param index offset in the SettingDesc array of the Settings struct which
|
||||||
|
@ -1955,9 +1966,19 @@ CommandCost CmdChangeCompanySetting(TileIndex tile, DoCommandFlag flags, uint32
|
||||||
* @param value new value of the setting
|
* @param value new value of the setting
|
||||||
* @param force_newgame force the newgame settings
|
* @param force_newgame force the newgame settings
|
||||||
*/
|
*/
|
||||||
bool SetSettingValue(uint index, int32 value, bool force_newgame)
|
bool SetSettingValue(const SettingDesc *sd, int32 value, bool force_newgame)
|
||||||
{
|
{
|
||||||
const SettingDesc *sd = &_settings[index];
|
if ((sd->desc.flags & SGF_PER_COMPANY) != 0) {
|
||||||
|
if (Company::IsValidID(_local_company) && _game_mode != GM_MENU) {
|
||||||
|
return DoCommandP(0, sd - _company_settings, value, CMD_CHANGE_COMPANY_SETTING);
|
||||||
|
}
|
||||||
|
|
||||||
|
void *var = GetVariableAddress(&_settings_client.company, &sd->save);
|
||||||
|
Write_ValidateSetting(var, sd, value);
|
||||||
|
if (sd->desc.proc != nullptr) sd->desc.proc((int32)ReadValue(var, sd->save.conv));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/* If an item is company-based, we do not send it over the network
|
/* If an item is company-based, we do not send it over the network
|
||||||
* (if any) to change. Also *hack*hack* we update the _newgame version
|
* (if any) to change. Also *hack*hack* we update the _newgame version
|
||||||
* of settings because changing a company-based setting in a game also
|
* of settings because changing a company-based setting in a game also
|
||||||
|
@ -1988,29 +2009,11 @@ bool SetSettingValue(uint index, int32 value, bool force_newgame)
|
||||||
|
|
||||||
/* send non-company-based settings over the network */
|
/* send non-company-based settings over the network */
|
||||||
if (!_networking || (_networking && _network_server)) {
|
if (!_networking || (_networking && _network_server)) {
|
||||||
return DoCommandP(0, index, value, CMD_CHANGE_SETTING);
|
return DoCommandP(0, GetSettingIndex(sd), value, CMD_CHANGE_SETTING);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Top function to save the new value of an element of the Settings struct
|
|
||||||
* @param index offset in the SettingDesc array of the CompanySettings struct
|
|
||||||
* which identifies the setting member we want to change
|
|
||||||
* @param value new value of the setting
|
|
||||||
*/
|
|
||||||
void SetCompanySetting(uint index, int32 value)
|
|
||||||
{
|
|
||||||
const SettingDesc *sd = &_company_settings[index];
|
|
||||||
if (Company::IsValidID(_local_company) && _game_mode != GM_MENU) {
|
|
||||||
DoCommandP(0, index, value, CMD_CHANGE_COMPANY_SETTING);
|
|
||||||
} else {
|
|
||||||
void *var = GetVariableAddress(&_settings_client.company, &sd->save);
|
|
||||||
Write_ValidateSetting(var, sd, value);
|
|
||||||
if (sd->desc.proc != nullptr) sd->desc.proc((int32)ReadValue(var, sd->save.conv));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the company settings for a new company to their default values.
|
* Set the company settings for a new company to their default values.
|
||||||
*/
|
*/
|
||||||
|
@ -2047,23 +2050,20 @@ void SyncCompanySettings()
|
||||||
*/
|
*/
|
||||||
uint GetCompanySettingIndex(const char *name)
|
uint GetCompanySettingIndex(const char *name)
|
||||||
{
|
{
|
||||||
uint i;
|
const SettingDesc *sd = GetSettingFromName(name);
|
||||||
const SettingDesc *sd = GetSettingFromName(name, &i);
|
|
||||||
(void)sd; // Unused without asserts
|
|
||||||
assert(sd != nullptr && (sd->desc.flags & SGF_PER_COMPANY) != 0);
|
assert(sd != nullptr && (sd->desc.flags & SGF_PER_COMPANY) != 0);
|
||||||
return i;
|
return sd - _company_settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set a setting value with a string.
|
* Set a setting value with a string.
|
||||||
* @param index the settings index.
|
* @param sd the setting to change.
|
||||||
* @param value the value to write
|
* @param value the value to write
|
||||||
* @param force_newgame force the newgame settings
|
* @param force_newgame force the newgame settings
|
||||||
* @note Strings WILL NOT be synced over the network
|
* @note Strings WILL NOT be synced over the network
|
||||||
*/
|
*/
|
||||||
bool SetSettingValue(uint index, const char *value, bool force_newgame)
|
bool SetSettingValue(const SettingDesc *sd, const char *value, bool force_newgame)
|
||||||
{
|
{
|
||||||
const SettingDesc *sd = &_settings[index];
|
|
||||||
assert(sd->save.conv & SLF_NO_NETWORK_SYNC);
|
assert(sd->save.conv & SLF_NO_NETWORK_SYNC);
|
||||||
|
|
||||||
if (GetVarMemType(sd->save.conv) == SLE_VAR_STRQ && strcmp(value, "(null)") == 0) {
|
if (GetVarMemType(sd->save.conv) == SLE_VAR_STRQ && strcmp(value, "(null)") == 0) {
|
||||||
|
@ -2085,18 +2085,16 @@ bool SetSettingValue(uint index, const char *value, bool force_newgame)
|
||||||
* @return Pointer to the setting description of setting \a name if it can be found,
|
* @return Pointer to the setting description of setting \a name if it can be found,
|
||||||
* \c nullptr indicates failure to obtain the description
|
* \c nullptr indicates failure to obtain the description
|
||||||
*/
|
*/
|
||||||
const SettingDesc *GetSettingFromName(const char *name, uint *i)
|
const SettingDesc *GetSettingFromName(const char *name)
|
||||||
{
|
{
|
||||||
const SettingDesc *sd;
|
|
||||||
|
|
||||||
/* First check all full names */
|
/* First check all full names */
|
||||||
for (*i = 0, sd = _settings; sd->save.cmd != SL_END; sd++, (*i)++) {
|
for (const SettingDesc *sd = _settings; sd->save.cmd != SL_END; sd++) {
|
||||||
if (!SlIsObjectCurrentlyValid(sd->save.version_from, sd->save.version_to)) continue;
|
if (!SlIsObjectCurrentlyValid(sd->save.version_from, sd->save.version_to)) continue;
|
||||||
if (strcmp(sd->desc.name, name) == 0) return sd;
|
if (strcmp(sd->desc.name, name) == 0) return sd;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Then check the shortcut variant of the name. */
|
/* Then check the shortcut variant of the name. */
|
||||||
for (*i = 0, sd = _settings; sd->save.cmd != SL_END; sd++, (*i)++) {
|
for (const SettingDesc *sd = _settings; sd->save.cmd != SL_END; sd++) {
|
||||||
if (!SlIsObjectCurrentlyValid(sd->save.version_from, sd->save.version_to)) continue;
|
if (!SlIsObjectCurrentlyValid(sd->save.version_from, sd->save.version_to)) continue;
|
||||||
const char *short_name = strchr(sd->desc.name, '.');
|
const char *short_name = strchr(sd->desc.name, '.');
|
||||||
if (short_name != nullptr) {
|
if (short_name != nullptr) {
|
||||||
|
@ -2107,7 +2105,7 @@ const SettingDesc *GetSettingFromName(const char *name, uint *i)
|
||||||
|
|
||||||
if (strncmp(name, "company.", 8) == 0) name += 8;
|
if (strncmp(name, "company.", 8) == 0) name += 8;
|
||||||
/* And finally the company-based settings */
|
/* And finally the company-based settings */
|
||||||
for (*i = 0, sd = _company_settings; sd->save.cmd != SL_END; sd++, (*i)++) {
|
for (const SettingDesc *sd = _company_settings; sd->save.cmd != SL_END; sd++) {
|
||||||
if (!SlIsObjectCurrentlyValid(sd->save.version_from, sd->save.version_to)) continue;
|
if (!SlIsObjectCurrentlyValid(sd->save.version_from, sd->save.version_to)) continue;
|
||||||
if (strcmp(sd->desc.name, name) == 0) return sd;
|
if (strcmp(sd->desc.name, name) == 0) return sd;
|
||||||
}
|
}
|
||||||
|
@ -2119,8 +2117,7 @@ const SettingDesc *GetSettingFromName(const char *name, uint *i)
|
||||||
* and besides, it is also better to keep stuff like this at the same place */
|
* and besides, it is also better to keep stuff like this at the same place */
|
||||||
void IConsoleSetSetting(const char *name, const char *value, bool force_newgame)
|
void IConsoleSetSetting(const char *name, const char *value, bool force_newgame)
|
||||||
{
|
{
|
||||||
uint index;
|
const SettingDesc *sd = GetSettingFromName(name);
|
||||||
const SettingDesc *sd = GetSettingFromName(name, &index);
|
|
||||||
|
|
||||||
if (sd == nullptr) {
|
if (sd == nullptr) {
|
||||||
IConsolePrintF(CC_WARNING, "'%s' is an unknown setting.", name);
|
IConsolePrintF(CC_WARNING, "'%s' is an unknown setting.", name);
|
||||||
|
@ -2129,7 +2126,7 @@ void IConsoleSetSetting(const char *name, const char *value, bool force_newgame)
|
||||||
|
|
||||||
bool success;
|
bool success;
|
||||||
if (sd->desc.cmd == SDT_STDSTRING) {
|
if (sd->desc.cmd == SDT_STDSTRING) {
|
||||||
success = SetSettingValue(index, value, force_newgame);
|
success = SetSettingValue(sd, value, force_newgame);
|
||||||
} else {
|
} else {
|
||||||
uint32 val;
|
uint32 val;
|
||||||
extern bool GetArgumentInteger(uint32 *value, const char *arg);
|
extern bool GetArgumentInteger(uint32 *value, const char *arg);
|
||||||
|
@ -2139,7 +2136,7 @@ void IConsoleSetSetting(const char *name, const char *value, bool force_newgame)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
success = SetSettingValue(index, val, force_newgame);
|
success = SetSettingValue(sd, val, force_newgame);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!success) {
|
if (!success) {
|
||||||
|
@ -2153,11 +2150,9 @@ void IConsoleSetSetting(const char *name, const char *value, bool force_newgame)
|
||||||
|
|
||||||
void IConsoleSetSetting(const char *name, int value)
|
void IConsoleSetSetting(const char *name, int value)
|
||||||
{
|
{
|
||||||
uint index;
|
const SettingDesc *sd = GetSettingFromName(name);
|
||||||
const SettingDesc *sd = GetSettingFromName(name, &index);
|
|
||||||
(void)sd; // Unused without asserts
|
|
||||||
assert(sd != nullptr);
|
assert(sd != nullptr);
|
||||||
SetSettingValue(index, value);
|
SetSettingValue(sd, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -2168,8 +2163,7 @@ void IConsoleSetSetting(const char *name, int value)
|
||||||
void IConsoleGetSetting(const char *name, bool force_newgame)
|
void IConsoleGetSetting(const char *name, bool force_newgame)
|
||||||
{
|
{
|
||||||
char value[20];
|
char value[20];
|
||||||
uint index;
|
const SettingDesc *sd = GetSettingFromName(name);
|
||||||
const SettingDesc *sd = GetSettingFromName(name, &index);
|
|
||||||
const void *ptr;
|
const void *ptr;
|
||||||
|
|
||||||
if (sd == nullptr) {
|
if (sd == nullptr) {
|
||||||
|
|
|
@ -826,7 +826,6 @@ protected:
|
||||||
struct SettingEntry : BaseSettingEntry {
|
struct SettingEntry : BaseSettingEntry {
|
||||||
const char *name; ///< Name of the setting
|
const char *name; ///< Name of the setting
|
||||||
const SettingDesc *setting; ///< Setting description of the setting
|
const SettingDesc *setting; ///< Setting description of the setting
|
||||||
uint index; ///< Index of the setting in the settings table
|
|
||||||
|
|
||||||
SettingEntry(const char *name);
|
SettingEntry(const char *name);
|
||||||
|
|
||||||
|
@ -1021,7 +1020,6 @@ SettingEntry::SettingEntry(const char *name)
|
||||||
{
|
{
|
||||||
this->name = name;
|
this->name = name;
|
||||||
this->setting = nullptr;
|
this->setting = nullptr;
|
||||||
this->index = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1031,7 +1029,7 @@ SettingEntry::SettingEntry(const char *name)
|
||||||
void SettingEntry::Init(byte level)
|
void SettingEntry::Init(byte level)
|
||||||
{
|
{
|
||||||
BaseSettingEntry::Init(level);
|
BaseSettingEntry::Init(level);
|
||||||
this->setting = GetSettingFromName(this->name, &this->index);
|
this->setting = GetSettingFromName(this->name);
|
||||||
assert(this->setting != nullptr);
|
assert(this->setting != nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1039,7 +1037,7 @@ void SettingEntry::Init(byte level)
|
||||||
void SettingEntry::ResetAll()
|
void SettingEntry::ResetAll()
|
||||||
{
|
{
|
||||||
int32 default_value = ReadValue(&this->setting->desc.def, this->setting->save.conv);
|
int32 default_value = ReadValue(&this->setting->desc.def, this->setting->save.conv);
|
||||||
SetSettingValue(this->index, default_value);
|
SetSettingValue(this->setting, default_value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -2288,11 +2286,7 @@ struct GameSettingsWindow : Window {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (value != oldvalue) {
|
if (value != oldvalue) {
|
||||||
if ((sd->desc.flags & SGF_PER_COMPANY) != 0) {
|
SetSettingValue(sd, value);
|
||||||
SetCompanySetting(pe->index, value);
|
|
||||||
} else {
|
|
||||||
SetSettingValue(pe->index, value);
|
|
||||||
}
|
|
||||||
this->SetDirty();
|
this->SetDirty();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -2340,11 +2334,7 @@ struct GameSettingsWindow : Window {
|
||||||
value = (int32)(size_t)sd->desc.def;
|
value = (int32)(size_t)sd->desc.def;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((sd->desc.flags & SGF_PER_COMPANY) != 0) {
|
SetSettingValue(this->valuewindow_entry->setting, value);
|
||||||
SetCompanySetting(this->valuewindow_entry->index, value);
|
|
||||||
} else {
|
|
||||||
SetSettingValue(this->valuewindow_entry->index, value);
|
|
||||||
}
|
|
||||||
this->SetDirty();
|
this->SetDirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2380,12 +2370,7 @@ struct GameSettingsWindow : Window {
|
||||||
const SettingDesc *sd = this->valuedropdown_entry->setting;
|
const SettingDesc *sd = this->valuedropdown_entry->setting;
|
||||||
assert(sd->desc.flags & SGF_MULTISTRING);
|
assert(sd->desc.flags & SGF_MULTISTRING);
|
||||||
|
|
||||||
if ((sd->desc.flags & SGF_PER_COMPANY) != 0) {
|
SetSettingValue(sd, index);
|
||||||
SetCompanySetting(this->valuedropdown_entry->index, index);
|
|
||||||
} else {
|
|
||||||
SetSettingValue(this->valuedropdown_entry->index, index);
|
|
||||||
}
|
|
||||||
|
|
||||||
this->SetDirty();
|
this->SetDirty();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -123,9 +123,9 @@ struct SettingDesc {
|
||||||
* offset in a certain struct */
|
* offset in a certain struct */
|
||||||
typedef SettingDesc SettingDescGlobVarList;
|
typedef SettingDesc SettingDescGlobVarList;
|
||||||
|
|
||||||
const SettingDesc *GetSettingFromName(const char *name, uint *i);
|
const SettingDesc *GetSettingFromName(const char *name);
|
||||||
bool SetSettingValue(uint index, int32 value, bool force_newgame = false);
|
bool SetSettingValue(const SettingDesc *sd, int32 value, bool force_newgame = false);
|
||||||
bool SetSettingValue(uint index, const char *value, bool force_newgame = false);
|
bool SetSettingValue(const SettingDesc *sd, const char *value, bool force_newgame = false);
|
||||||
void SetCompanySetting(uint index, int32 value);
|
uint GetSettingIndex(const SettingDesc *sd);
|
||||||
|
|
||||||
#endif /* SETTINGS_INTERNAL_H */
|
#endif /* SETTINGS_INTERNAL_H */
|
||||||
|
|
Loading…
Reference in New Issue