depot.cpp
Go to the documentation of this file.00001
00002
00005 #include "stdafx.h"
00006 #include "openttd.h"
00007 #include "depot.h"
00008 #include "landscape.h"
00009 #include "saveload.h"
00010 #include "order.h"
00011 #include "window_func.h"
00012
00013 #include "table/strings.h"
00014
00015 DEFINE_OLD_POOL_GENERIC(Depot, Depot)
00016
00017
00022 Depot *GetDepotByTile(TileIndex tile)
00023 {
00024 Depot *depot;
00025
00026 FOR_ALL_DEPOTS(depot) {
00027 if (depot->xy == tile) return depot;
00028 }
00029
00030 return NULL;
00031 }
00032
00036 Depot::~Depot()
00037 {
00038 if (CleaningPool()) return;
00039
00040
00041 RemoveOrderFromAllVehicles(OT_GOTO_DEPOT, this->index);
00042
00043
00044 DeleteWindowById(WC_VEHICLE_DEPOT, this->xy);
00045 this->xy = 0;
00046 }
00047
00048 void InitializeDepots()
00049 {
00050 _Depot_pool.CleanPool();
00051 _Depot_pool.AddBlockToPool();
00052 }
00053
00054
00055 static const SaveLoad _depot_desc[] = {
00056 SLE_CONDVAR(Depot, xy, SLE_FILE_U16 | SLE_VAR_U32, 0, 5),
00057 SLE_CONDVAR(Depot, xy, SLE_UINT32, 6, SL_MAX_VERSION),
00058 SLE_VAR(Depot, town_index, SLE_UINT16),
00059 SLE_END()
00060 };
00061
00062 static void Save_DEPT()
00063 {
00064 Depot *depot;
00065
00066 FOR_ALL_DEPOTS(depot) {
00067 SlSetArrayIndex(depot->index);
00068 SlObject(depot, _depot_desc);
00069 }
00070 }
00071
00072 static void Load_DEPT()
00073 {
00074 int index;
00075
00076 while ((index = SlIterateArray()) != -1) {
00077 Depot *depot = new (index) Depot();
00078 SlObject(depot, _depot_desc);
00079 }
00080 }
00081
00082 extern const ChunkHandler _depot_chunk_handlers[] = {
00083 { 'DEPT', Save_DEPT, Load_DEPT, CH_ARRAY | CH_LAST},
00084 };