diff --git a/projects/openttd_vs100.vcxproj b/projects/openttd_vs100.vcxproj --- a/projects/openttd_vs100.vcxproj +++ b/projects/openttd_vs100.vcxproj @@ -724,6 +724,7 @@ + diff --git a/projects/openttd_vs100.vcxproj.filters b/projects/openttd_vs100.vcxproj.filters --- a/projects/openttd_vs100.vcxproj.filters +++ b/projects/openttd_vs100.vcxproj.filters @@ -1375,6 +1375,9 @@ Save/Load handlers + + Save/Load handlers + Save/Load handlers diff --git a/projects/openttd_vs80.vcproj b/projects/openttd_vs80.vcproj --- a/projects/openttd_vs80.vcproj +++ b/projects/openttd_vs80.vcproj @@ -2184,6 +2184,10 @@ > + + diff --git a/projects/openttd_vs90.vcproj b/projects/openttd_vs90.vcproj --- a/projects/openttd_vs90.vcproj +++ b/projects/openttd_vs90.vcproj @@ -2181,6 +2181,10 @@ > + + diff --git a/source.list b/source.list --- a/source.list +++ b/source.list @@ -475,6 +475,7 @@ saveload/labelmaps_sl.cpp saveload/map_sl.cpp saveload/misc_sl.cpp saveload/newgrf_sl.cpp +saveload/newgrf_sl.h saveload/oldloader.cpp saveload/oldloader.h saveload/oldloader_sl.cpp diff --git a/src/saveload/airport_sl.cpp b/src/saveload/airport_sl.cpp --- a/src/saveload/airport_sl.cpp +++ b/src/saveload/airport_sl.cpp @@ -10,45 +10,18 @@ /** @file airport_sl.cpp Code handling saving and loading airport ids */ #include "../stdafx.h" -#include "../newgrf_commons.h" #include "saveload.h" - -/** - * Save and load the mapping between the airport id in the AirportSpec array - * and the grf file it came from. - */ -static const SaveLoad _airport_id_mapping_desc[] = { - SLE_VAR(EntityIDMapping, grfid, SLE_UINT32), - SLE_VAR(EntityIDMapping, entity_id, SLE_UINT8), - SLE_VAR(EntityIDMapping, substitute_id, SLE_UINT8), - SLE_END() -}; +#include "newgrf_sl.h" static void Save_APID() { - uint i; - uint j = _airport_mngr.GetMaxMapping(); - - for (i = 0; i < j; i++) { - SlSetArrayIndex(i); - SlObject(&_airport_mngr.mapping_ID[i], _airport_id_mapping_desc); - } + Save_NewGRFMapping(_airport_mngr); } static void Load_APID() { - /* clear the current mapping stored. - * This will create the manager if ever it is not yet done */ - _airport_mngr.ResetMapping(); - - uint max_id = _airport_mngr.GetMaxMapping(); - - int index; - while ((index = SlIterateArray()) != -1) { - if ((uint)index >= max_id) break; - SlObject(&_airport_mngr.mapping_ID[index], _airport_id_mapping_desc); - } + Load_NewGRFMapping(_airport_mngr); } extern const ChunkHandler _airport_chunk_handlers[] = { diff --git a/src/saveload/industry_sl.cpp b/src/saveload/industry_sl.cpp --- a/src/saveload/industry_sl.cpp +++ b/src/saveload/industry_sl.cpp @@ -11,9 +11,9 @@ #include "../stdafx.h" #include "../industry.h" -#include "../newgrf_commons.h" #include "saveload.h" +#include "newgrf_sl.h" static const SaveLoad _industry_desc[] = { SLE_CONDVAR(Industry, location.tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 5), @@ -71,35 +71,14 @@ static void Save_INDY() } } -/* Save and load the mapping between the industry/tile id on the map, and the grf file - * it came from. */ -static const SaveLoad _industries_id_mapping_desc[] = { - SLE_VAR(EntityIDMapping, grfid, SLE_UINT32), - SLE_VAR(EntityIDMapping, entity_id, SLE_UINT8), - SLE_VAR(EntityIDMapping, substitute_id, SLE_UINT8), - SLE_END() -}; - static void Save_IIDS() { - uint i; - uint j = _industry_mngr.GetMaxMapping(); - - for (i = 0; i < j; i++) { - SlSetArrayIndex(i); - SlObject(&_industry_mngr.mapping_ID[i], _industries_id_mapping_desc); - } + Save_NewGRFMapping(_industry_mngr); } static void Save_TIDS() { - uint i; - uint j = _industile_mngr.GetMaxMapping(); - - for (i = 0; i < j; i++) { - SlSetArrayIndex(i); - SlObject(&_industile_mngr.mapping_ID[i], _industries_id_mapping_desc); - } + Save_NewGRFMapping(_industile_mngr); } static void Load_INDY() @@ -117,38 +96,12 @@ static void Load_INDY() static void Load_IIDS() { - int index; - uint max_id; - - /* clear the current mapping stored. - * This will create the manager if ever it is not yet done */ - _industry_mngr.ResetMapping(); - - /* get boundary for the temporary map loader NUM_INDUSTRYTYPES? */ - max_id = _industry_mngr.GetMaxMapping(); - - while ((index = SlIterateArray()) != -1) { - if ((uint)index >= max_id) break; - SlObject(&_industry_mngr.mapping_ID[index], _industries_id_mapping_desc); - } + Load_NewGRFMapping(_industry_mngr); } static void Load_TIDS() { - int index; - uint max_id; - - /* clear the current mapping stored. - * This will create the manager if ever it is not yet done */ - _industile_mngr.ResetMapping(); - - /* get boundary for the temporary map loader NUM_INDUSTILES? */ - max_id = _industile_mngr.GetMaxMapping(); - - while ((index = SlIterateArray()) != -1) { - if ((uint)index >= max_id) break; - SlObject(&_industile_mngr.mapping_ID[index], _industries_id_mapping_desc); - } + Load_NewGRFMapping(_industile_mngr); } static void Ptrs_INDY() diff --git a/src/saveload/newgrf_sl.cpp b/src/saveload/newgrf_sl.cpp --- a/src/saveload/newgrf_sl.cpp +++ b/src/saveload/newgrf_sl.cpp @@ -17,6 +17,39 @@ #include "../fios.h" #include "saveload.h" +#include "newgrf_sl.h" + +/** Save and load the mapping between a spec and the NewGRF it came from. */ +static const SaveLoad _newgrf_mapping_desc[] = { + SLE_VAR(EntityIDMapping, grfid, SLE_UINT32), + SLE_VAR(EntityIDMapping, entity_id, SLE_UINT8), + SLE_VAR(EntityIDMapping, substitute_id, SLE_UINT8), + SLE_END() +}; + +void Save_NewGRFMapping(const OverrideManagerBase &mapping) +{ + for (uint i = 0; i < mapping.GetMaxMapping(); i++) { + SlSetArrayIndex(i); + SlObject(&mapping.mapping_ID[i], _newgrf_mapping_desc); + } +} + +void Load_NewGRFMapping(OverrideManagerBase &mapping) +{ + /* Clear the current mapping stored. + * This will create the manager if ever it is not yet done */ + mapping.ResetMapping(); + + uint max_id = mapping.GetMaxMapping(); + + int index; + while ((index = SlIterateArray()) != -1) { + if ((uint)index >= max_id) break; + SlObject(&mapping.mapping_ID[index], _newgrf_mapping_desc); + } +} + static const SaveLoad _grfconfig_desc[] = { SLE_STR(GRFConfig, filename, SLE_STR, 0x40), diff --git a/src/saveload/newgrf_sl.h b/src/saveload/newgrf_sl.h new file mode 100644 --- /dev/null +++ b/src/saveload/newgrf_sl.h @@ -0,0 +1,29 @@ +/* $Id$ */ + +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file newgrf_sl.h Code handling saving and loading of NewGRF mappings. */ + +#ifndef SAVELOAD_NEWGRF_SL_H +#define SAVELOAD_NEWGRF_SL_H + +#include "../newgrf_commons.h" + +/** + * Save a GRF ID + local id -> OpenTTD's id mapping. + * @param mapping The mapping to save. + */ +void Save_NewGRFMapping(const OverrideManagerBase &mapping); + +/** + * Load a GRF ID + local id -> OpenTTD's id mapping. + * @param mapping The mapping to load. + */ +void Load_NewGRFMapping(OverrideManagerBase &mapping); + +#endif /* SAVELOAD_NEWGRF_SL_H */ diff --git a/src/saveload/town_sl.cpp b/src/saveload/town_sl.cpp --- a/src/saveload/town_sl.cpp +++ b/src/saveload/town_sl.cpp @@ -11,10 +11,10 @@ #include "../stdafx.h" #include "../newgrf_house.h" -#include "../newgrf_commons.h" #include "../town.h" #include "saveload.h" +#include "newgrf_sl.h" /** * Check and update town and house values. @@ -139,36 +139,14 @@ static const SaveLoad _town_desc[] = { SLE_END() }; -/* Save and load the mapping between the house id on the map, and the grf file - * it came from. */ -static const SaveLoad _house_id_mapping_desc[] = { - SLE_VAR(EntityIDMapping, grfid, SLE_UINT32), - SLE_VAR(EntityIDMapping, entity_id, SLE_UINT8), - SLE_VAR(EntityIDMapping, substitute_id, SLE_UINT8), - SLE_END() -}; - -static void Save_HOUSEIDS() +static void Save_HIDS() { - uint j = _house_mngr.GetMaxMapping(); - - for (uint i = 0; i < j; i++) { - SlSetArrayIndex(i); - SlObject(&_house_mngr.mapping_ID[i], _house_id_mapping_desc); - } + Save_NewGRFMapping(_house_mngr); } -static void Load_HOUSEIDS() +static void Load_HIDS() { - int index; - - _house_mngr.ResetMapping(); - uint max_id = _house_mngr.GetMaxMapping(); - - while ((index = SlIterateArray()) != -1) { - if ((uint)index >= max_id) break; - SlObject(&_house_mngr.mapping_ID[index], _house_id_mapping_desc); - } + Load_NewGRFMapping(_house_mngr); } static void Save_TOWN() @@ -192,6 +170,6 @@ static void Load_TOWN() } extern const ChunkHandler _town_chunk_handlers[] = { - { 'HIDS', Save_HOUSEIDS, Load_HOUSEIDS, NULL, NULL, CH_ARRAY }, - { 'CITY', Save_TOWN, Load_TOWN, NULL, NULL, CH_ARRAY | CH_LAST}, + { 'HIDS', Save_HIDS, Load_HIDS, NULL, NULL, CH_ARRAY }, + { 'CITY', Save_TOWN, Load_TOWN, NULL, NULL, CH_ARRAY | CH_LAST}, };