mirror of https://github.com/OpenTTD/OpenTTD.git
This commit is contained in:
parent
aff09306de
commit
8f22066b9a
|
@ -187,10 +187,20 @@ struct PATSChunkHandler : ChunkHandler {
|
||||||
|
|
||||||
void Load() const override
|
void Load() const override
|
||||||
{
|
{
|
||||||
/* Copy over default setting since some might not get loaded in
|
const auto settings_table = this->GetSettingTable();
|
||||||
* a networking environment. This ensures for example that the local
|
|
||||||
* currency setting stays when joining a network-server */
|
/* Reset all settings to their default, so any settings missing in the savegame
|
||||||
LoadSettings(this->GetSettingTable(), &_settings_game, _settings_sl_compat);
|
* are their default, and not "value of last game". AfterLoad might still fix
|
||||||
|
* up values to become non-default, depending on the saveload version. */
|
||||||
|
for (auto &desc : settings_table) {
|
||||||
|
const SettingDesc *sd = GetSettingDesc(desc);
|
||||||
|
if (sd->flags & SF_NOT_IN_SAVE) continue;
|
||||||
|
if ((sd->flags & SF_NO_NETWORK_SYNC) && _networking && !_network_server) continue;
|
||||||
|
|
||||||
|
sd->ResetToDefault(&_settings_game);
|
||||||
|
}
|
||||||
|
|
||||||
|
LoadSettings(settings_table, &_settings_game, _settings_sl_compat);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LoadCheck(size_t) const override
|
void LoadCheck(size_t) const override
|
||||||
|
|
|
@ -768,6 +768,11 @@ bool IntSettingDesc::IsDefaultValue(void *object) const
|
||||||
return this->def == object_value;
|
return this->def == object_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void IntSettingDesc::ResetToDefault(void *object) const
|
||||||
|
{
|
||||||
|
this->Write(object, this->def);
|
||||||
|
}
|
||||||
|
|
||||||
std::string StringSettingDesc::FormatValue(const void *object) const
|
std::string StringSettingDesc::FormatValue(const void *object) const
|
||||||
{
|
{
|
||||||
const std::string &str = this->Read(object);
|
const std::string &str = this->Read(object);
|
||||||
|
@ -800,6 +805,11 @@ bool StringSettingDesc::IsDefaultValue(void *object) const
|
||||||
return this->def == str;
|
return this->def == str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void StringSettingDesc::ResetToDefault(void *object) const
|
||||||
|
{
|
||||||
|
this->Write(object, this->def);
|
||||||
|
}
|
||||||
|
|
||||||
bool ListSettingDesc::IsSameValue(const IniItem *, void *) const
|
bool ListSettingDesc::IsSameValue(const IniItem *, void *) const
|
||||||
{
|
{
|
||||||
/* Checking for equality is way more expensive than just writing the value. */
|
/* Checking for equality is way more expensive than just writing the value. */
|
||||||
|
@ -812,6 +822,12 @@ bool ListSettingDesc::IsDefaultValue(void *) const
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ListSettingDesc::ResetToDefault(void *) const
|
||||||
|
{
|
||||||
|
/* Resetting a list to default is not supported. */
|
||||||
|
NOT_REACHED();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads all items from a 'grpname' section into a list
|
* Loads all items from a 'grpname' section into a list
|
||||||
* The list parameter can be a nullptr pointer, in this case nothing will be
|
* The list parameter can be a nullptr pointer, in this case nothing will be
|
||||||
|
|
|
@ -137,6 +137,11 @@ struct SettingDesc {
|
||||||
* @return true iff the value is the default value.
|
* @return true iff the value is the default value.
|
||||||
*/
|
*/
|
||||||
virtual bool IsDefaultValue(void *object) const = 0;
|
virtual bool IsDefaultValue(void *object) const = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reset the setting to its default value.
|
||||||
|
*/
|
||||||
|
virtual void ResetToDefault(void *object) const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Base integer type, including boolean, settings. Only these are shown in the settings UI. */
|
/** Base integer type, including boolean, settings. Only these are shown in the settings UI. */
|
||||||
|
@ -236,6 +241,7 @@ struct IntSettingDesc : SettingDesc {
|
||||||
void ParseValue(const IniItem *item, void *object) const override;
|
void ParseValue(const IniItem *item, void *object) const override;
|
||||||
bool IsSameValue(const IniItem *item, void *object) const override;
|
bool IsSameValue(const IniItem *item, void *object) const override;
|
||||||
bool IsDefaultValue(void *object) const override;
|
bool IsDefaultValue(void *object) const override;
|
||||||
|
void ResetToDefault(void *object) const override;
|
||||||
int32_t Read(const void *object) const;
|
int32_t Read(const void *object) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -332,6 +338,7 @@ struct StringSettingDesc : SettingDesc {
|
||||||
void ParseValue(const IniItem *item, void *object) const override;
|
void ParseValue(const IniItem *item, void *object) const override;
|
||||||
bool IsSameValue(const IniItem *item, void *object) const override;
|
bool IsSameValue(const IniItem *item, void *object) const override;
|
||||||
bool IsDefaultValue(void *object) const override;
|
bool IsDefaultValue(void *object) const override;
|
||||||
|
void ResetToDefault(void *object) const override;
|
||||||
const std::string &Read(const void *object) const;
|
const std::string &Read(const void *object) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -350,6 +357,7 @@ struct ListSettingDesc : SettingDesc {
|
||||||
void ParseValue(const IniItem *item, void *object) const override;
|
void ParseValue(const IniItem *item, void *object) const override;
|
||||||
bool IsSameValue(const IniItem *item, void *object) const override;
|
bool IsSameValue(const IniItem *item, void *object) const override;
|
||||||
bool IsDefaultValue(void *object) const override;
|
bool IsDefaultValue(void *object) const override;
|
||||||
|
void ResetToDefault(void *object) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Placeholder for settings that have been removed, but might still linger in the savegame. */
|
/** Placeholder for settings that have been removed, but might still linger in the savegame. */
|
||||||
|
@ -361,6 +369,7 @@ struct NullSettingDesc : SettingDesc {
|
||||||
void ParseValue(const IniItem *, void *) const override { NOT_REACHED(); }
|
void ParseValue(const IniItem *, void *) const override { NOT_REACHED(); }
|
||||||
bool IsSameValue(const IniItem *, void *) const override { NOT_REACHED(); }
|
bool IsSameValue(const IniItem *, void *) const override { NOT_REACHED(); }
|
||||||
bool IsDefaultValue(void *) const override { NOT_REACHED(); }
|
bool IsDefaultValue(void *) const override { NOT_REACHED(); }
|
||||||
|
void ResetToDefault(void *) const override { NOT_REACHED(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef std::variant<IntSettingDesc, BoolSettingDesc, OneOfManySettingDesc, ManyOfManySettingDesc, StringSettingDesc, ListSettingDesc, NullSettingDesc> SettingVariant;
|
typedef std::variant<IntSettingDesc, BoolSettingDesc, OneOfManySettingDesc, ManyOfManySettingDesc, StringSettingDesc, ListSettingDesc, NullSettingDesc> SettingVariant;
|
||||||
|
|
Loading…
Reference in New Issue