mirror of https://github.com/OpenTTD/OpenTTD
Codechange: move SLF_NO_NETWORK_SYNC into settings
It is a settings-only flag, so don't pollute SaveLoad code with it.pull/9335/head
parent
414e12d26b
commit
264991dfa5
|
@ -584,7 +584,7 @@ static inline uint SlGetArrayLength(size_t length)
|
||||||
* @param conv VarType type of variable that is used for calculating the size
|
* @param conv VarType type of variable that is used for calculating the size
|
||||||
* @return Return the size of this type in bytes
|
* @return Return the size of this type in bytes
|
||||||
*/
|
*/
|
||||||
static inline uint SlCalcConvMemLen(VarType conv)
|
uint SlCalcConvMemLen(VarType conv)
|
||||||
{
|
{
|
||||||
static const byte conv_mem_size[] = {1, 1, 1, 2, 2, 4, 4, 8, 8, 0};
|
static const byte conv_mem_size[] = {1, 1, 1, 2, 2, 4, 4, 8, 8, 0};
|
||||||
byte length = GB(conv, 4, 4);
|
byte length = GB(conv, 4, 4);
|
||||||
|
@ -1411,21 +1411,6 @@ static inline bool SlIsObjectValidInSavegame(const SaveLoad &sld)
|
||||||
return (_sl_version >= sld.version_from && _sl_version < sld.version_to);
|
return (_sl_version >= sld.version_from && _sl_version < sld.version_to);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Are we going to load this variable when loading a savegame or not?
|
|
||||||
* @note If the variable is skipped it is skipped in the savegame
|
|
||||||
* bytestream itself as well, so there is no need to skip it somewhere else
|
|
||||||
*/
|
|
||||||
static inline bool SlSkipVariableOnLoad(const SaveLoad &sld)
|
|
||||||
{
|
|
||||||
if ((sld.conv & SLF_NO_NETWORK_SYNC) && _sl.action != SLA_SAVE && _networking && !_network_server) {
|
|
||||||
SlSkipBytes(SlCalcConvMemLen(sld.conv) * sld.length);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calculate the size of an object.
|
* Calculate the size of an object.
|
||||||
* @param object to be measured.
|
* @param object to be measured.
|
||||||
|
@ -1538,7 +1523,6 @@ bool SlObjectMember(void *ptr, const SaveLoad &sld)
|
||||||
case SL_STDSTR:
|
case SL_STDSTR:
|
||||||
/* CONDITIONAL saveload types depend on the savegame version */
|
/* CONDITIONAL saveload types depend on the savegame version */
|
||||||
if (!SlIsObjectValidInSavegame(sld)) return false;
|
if (!SlIsObjectValidInSavegame(sld)) return false;
|
||||||
if (SlSkipVariableOnLoad(sld)) return false;
|
|
||||||
|
|
||||||
switch (sld.cmd) {
|
switch (sld.cmd) {
|
||||||
case SL_VAR: SlSaveLoadConv(ptr, conv); break;
|
case SL_VAR: SlSaveLoadConv(ptr, conv); break;
|
||||||
|
|
|
@ -896,6 +896,7 @@ void WriteValue(void *ptr, VarType conv, int64 val);
|
||||||
void SlSetArrayIndex(uint index);
|
void SlSetArrayIndex(uint index);
|
||||||
int SlIterateArray();
|
int SlIterateArray();
|
||||||
|
|
||||||
|
uint SlCalcConvMemLen(VarType conv);
|
||||||
void SlAutolength(AutolengthProc *proc, void *arg);
|
void SlAutolength(AutolengthProc *proc, void *arg);
|
||||||
size_t SlGetFieldLength();
|
size_t SlGetFieldLength();
|
||||||
void SlSetLength(size_t length);
|
void SlSetLength(size_t length);
|
||||||
|
|
|
@ -2025,9 +2025,15 @@ static void LoadSettings(const SettingTable &settings, void *object)
|
||||||
for (auto &osd : settings) {
|
for (auto &osd : settings) {
|
||||||
if (osd->save.conv & SLF_NOT_IN_SAVE) continue;
|
if (osd->save.conv & SLF_NOT_IN_SAVE) continue;
|
||||||
|
|
||||||
void *ptr = GetVariableAddress(object, osd->save);
|
SaveLoad sl = osd->save;
|
||||||
|
if ((osd->save.conv & SLF_NO_NETWORK_SYNC) && _networking && !_network_server) {
|
||||||
|
/* We don't want to read this setting, so we do need to skip over it. */
|
||||||
|
sl = SLE_NULL(static_cast<uint16>(SlCalcConvMemLen(osd->save.conv) * osd->save.length));
|
||||||
|
}
|
||||||
|
|
||||||
|
void *ptr = GetVariableAddress(object, sl);
|
||||||
|
if (!SlObjectMember(ptr, sl)) continue;
|
||||||
|
|
||||||
if (!SlObjectMember(ptr, osd->save)) continue;
|
|
||||||
if (osd->IsIntSetting()) {
|
if (osd->IsIntSetting()) {
|
||||||
const IntSettingDesc *int_setting = osd->AsIntSetting();
|
const IntSettingDesc *int_setting = osd->AsIntSetting();
|
||||||
int_setting->MakeValueValidAndWrite(object, int_setting->Read(object));
|
int_setting->MakeValueValidAndWrite(object, int_setting->Read(object));
|
||||||
|
|
Loading…
Reference in New Issue