changeset 17937:a49cf37111ac draft

(svn r22742) -Add: Add function to query exit direction of hangars at airports.
author alberth <alberth@openttd.org>
date Sat, 13 Aug 2011 12:44:42 +0000
parents 7dc99d42de4e
children cc75c5d84f65
files src/station_base.h
diffstat 1 files changed, 34 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/station_base.h
+++ b/src/station_base.h
@@ -135,20 +135,28 @@
 	}
 
 	/**
-	 * 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 @@
 		}
 		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;