tron@2186: /* $Id$ */ tron@2186: belugas@6451: /** @file depot.cpp */ belugas@6451: truelight@1313: #include "stdafx.h" Darkvater@1891: #include "openttd.h" truelight@1313: #include "depot.h" maedhros@6949: #include "landscape.h" truelight@1313: #include "saveload.h" truelight@1313: #include "order.h" rubidium@8627: #include "window_func.h" truelight@1313: rubidium@8760: #include "table/strings.h" rubidium@8760: rubidium@7885: DEFINE_OLD_POOL_GENERIC(Depot, Depot) truelight@1313: truelight@1313: /** truelight@1313: * Gets a depot from a tile truelight@1313: * truelight@1313: * @return Returns the depot if the tile had a depot, else it returns NULL truelight@1313: */ tron@1977: Depot *GetDepotByTile(TileIndex tile) truelight@1313: { truelight@1313: Depot *depot; truelight@1313: truelight@1313: FOR_ALL_DEPOTS(depot) { tron@4077: if (depot->xy == tile) return depot; truelight@1313: } truelight@1313: truelight@1313: return NULL; truelight@1313: } truelight@1313: truelight@1313: /** truelight@4388: * Clean up a depot truelight@1313: */ rubidium@7885: Depot::~Depot() truelight@1313: { rubidium@7909: if (CleaningPool()) return; rubidium@7909: truelight@1313: /* Clear the depot from all order-lists */ rubidium@7885: RemoveOrderFromAllVehicles(OT_GOTO_DEPOT, this->index); truelight@1313: truelight@1313: /* Delete the depot-window */ rubidium@7885: DeleteWindowById(WC_VEHICLE_DEPOT, this->xy); rubidium@7885: this->xy = 0; truelight@1313: } truelight@1313: rubidium@6573: void InitializeDepots() truelight@1313: { rubidium@7885: _Depot_pool.CleanPool(); rubidium@7885: _Depot_pool.AddBlockToPool(); truelight@1313: } truelight@1313: truelight@1313: Darkvater@1881: static const SaveLoad _depot_desc[] = { rubidium@4344: SLE_CONDVAR(Depot, xy, SLE_FILE_U16 | SLE_VAR_U32, 0, 5), rubidium@4344: SLE_CONDVAR(Depot, xy, SLE_UINT32, 6, SL_MAX_VERSION), rubidium@4344: SLE_VAR(Depot, town_index, SLE_UINT16), truelight@1313: SLE_END() truelight@1313: }; truelight@1313: rubidium@6573: static void Save_DEPT() truelight@1313: { truelight@1313: Depot *depot; truelight@1313: truelight@1313: FOR_ALL_DEPOTS(depot) { truelight@4346: SlSetArrayIndex(depot->index); truelight@4346: SlObject(depot, _depot_desc); truelight@1313: } truelight@1313: } truelight@1313: rubidium@6573: static void Load_DEPT() truelight@1313: { truelight@1313: int index; truelight@1313: truelight@1313: while ((index = SlIterateArray()) != -1) { rubidium@7885: Depot *depot = new (index) Depot(); truelight@1313: SlObject(depot, _depot_desc); truelight@1313: } truelight@1313: } truelight@1313: rubidium@5838: extern const ChunkHandler _depot_chunk_handlers[] = { truelight@1313: { 'DEPT', Save_DEPT, Load_DEPT, CH_ARRAY | CH_LAST}, truelight@1313: };