summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/station_base.h42
1 files changed, 34 insertions, 8 deletions
diff --git a/src/station_base.h b/src/station_base.h
index 984582c62..2a7fedbf7 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<Industry *, 2> IndustryVector;