From c4118e3f6a7f007086ad210431b0fdb73ae0ce27 Mon Sep 17 00:00:00 2001 From: alberth Date: Sat, 13 Aug 2011 12:44:42 +0000 Subject: [PATCH] (svn r22742) -Add: Add function to query exit direction of hangars at airports. --- src/station_base.h | 42 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/src/station_base.h b/src/station_base.h index 984582c62c..2a7fedbf76 100644 --- a/src/station_base.h +++ b/src/station_base.h @@ -135,20 +135,28 @@ struct Airport : public TileArea { } /** - * Get the hangar number of the hangar on a specific tile. + * Get the exit direction of the hangar at a specific tile. + * @param tile The tile to query. + * @pre IsHangarTile(tile). + * @return The exit direction of the hangar, taking airport rotation into account. + */ + FORCEINLINE Direction GetHangarExitDirection(TileIndex tile) const + { + const AirportSpec *as = this->GetSpec(); + const HangarTileTable *htt = GetHangarDataByTile(tile); + return ChangeDir(htt->dir, DirDifference(this->rotation, as->rotation[0])); + } + + /** + * Get the hangar number of the hangar at a specific tile. * @param tile The tile to query. * @pre IsHangarTile(tile). * @return The hangar number of the hangar at the given tile. */ FORCEINLINE uint GetHangarNum(TileIndex tile) const { - const AirportSpec *as = this->GetSpec(); - for (uint i = 0; i < as->nof_depots; i++) { - if (this->GetRotatedTileFromOffset(as->depot_table[i].ti) == tile) { - return as->depot_table[i].hangar_num; - } - } - NOT_REACHED(); + const HangarTileTable *htt = GetHangarDataByTile(tile); + return htt->hangar_num; } /** Get the number of hangars on this airport. */ @@ -165,6 +173,24 @@ struct Airport : public TileArea { } return num; } + +private: + /** + * Retrieve hangar information of a hangar at a given tile. + * @param tile %Tile containing the hangar. + * @return The requested hangar information. + * @pre The \a tile must be at a hangar tile at an airport. + */ + FORCEINLINE const HangarTileTable *GetHangarDataByTile(TileIndex tile) const + { + const AirportSpec *as = this->GetSpec(); + for (uint i = 0; i < as->nof_depots; i++) { + if (this->GetRotatedTileFromOffset(as->depot_table[i].ti) == tile) { + return as->depot_table + i; + } + } + NOT_REACHED(); + } }; typedef SmallVector IndustryVector;