tron@2186: /* $Id$ */ tron@2186: rubidium@9111: /** @file depot.cpp Handling of depots. */ belugas@6125: truelight@1313: #include "stdafx.h" Darkvater@1891: #include "openttd.h" rubidium@8962: #include "depot_base.h" maedhros@6453: #include "landscape.h" truelight@1313: #include "saveload.h" rubidium@8784: #include "order_func.h" rubidium@8131: #include "window_func.h" smatz@8847: #include "oldpool_func.h" truelight@1313: rubidium@8264: #include "table/strings.h" rubidium@8264: rubidium@7389: 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@7389: Depot::~Depot() truelight@1313: { rubidium@7413: if (CleaningPool()) return; rubidium@7413: truelight@1313: /* Clear the depot from all order-lists */ rubidium@7389: RemoveOrderFromAllVehicles(OT_GOTO_DEPOT, this->index); truelight@1313: truelight@1313: /* Delete the depot-window */ rubidium@7389: DeleteWindowById(WC_VEHICLE_DEPOT, this->xy); rubidium@7389: this->xy = 0; truelight@1313: } truelight@1313: rubidium@6247: void InitializeDepots() truelight@1313: { rubidium@7389: _Depot_pool.CleanPool(); rubidium@7389: _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@6247: 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@6247: static void Load_DEPT() truelight@1313: { truelight@1313: int index; truelight@1313: truelight@1313: while ((index = SlIterateArray()) != -1) { rubidium@7389: Depot *depot = new (index) Depot(); truelight@1313: SlObject(depot, _depot_desc); truelight@1313: } truelight@1313: } truelight@1313: rubidium@5587: extern const ChunkHandler _depot_chunk_handlers[] = { truelight@1313: { 'DEPT', Save_DEPT, Load_DEPT, CH_ARRAY | CH_LAST}, truelight@1313: };