changeset 14305:d6d98b4d1605 draft

(svn r18857) -Codechange: don't rely on the fact that all airports are rectangular
author yexo <yexo@openttd.org>
date Mon, 18 Jan 2010 12:32:50 +0000
parents 53121bfd223f
children 3fea4122564d
files src/station_base.h src/station_cmd.cpp src/station_map.h
diffstat 3 files changed, 20 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/station_base.h
+++ b/src/station_base.h
@@ -121,6 +121,11 @@
 		return IsRailStationTile(tile) && GetStationIndex(tile) == this->index;
 	}
 
+	/* virtual */ FORCEINLINE bool TileBelongsToAirport(TileIndex tile) const
+	{
+		return IsAirportTile(tile) && GetStationIndex(tile) == this->index;
+	}
+
 	/* virtual */ uint32 GetNewGRFVariable(const ResolverObject *object, byte variable, byte parameter, bool *available) const;
 
 	/* virtual */ void GetTileArea(TileArea *ta, StationType type) const;
--- a/src/station_cmd.cpp
+++ b/src/station_cmd.cpp
@@ -2066,7 +2066,7 @@
 	int w = as->size_x;
 	int h = as->size_y;
 
-	CommandCost cost(EXPENSES_CONSTRUCTION, w * h * _price[PR_CLEAR_STATION_AIRPORT]);
+	CommandCost cost(EXPENSES_CONSTRUCTION);
 
 	const Aircraft *a;
 	FOR_ALL_AIRCRAFT(a) {
@@ -2077,6 +2077,10 @@
 	TILE_LOOP(tile_cur, w, h, tile) {
 		if (!EnsureNoVehicleOnGround(tile_cur)) return CMD_ERROR;
 
+		if (!st->TileBelongsToAirport(tile_cur)) continue;
+
+		cost.AddCost(_price[PR_CLEAR_STATION_AIRPORT]);
+
 		if (flags & DC_EXEC) {
 			DeleteAnimatedTile(tile_cur);
 			DoClearSquare(tile_cur);
--- a/src/station_map.h
+++ b/src/station_map.h
@@ -184,6 +184,16 @@
 	return GetStationType(t) == STATION_AIRPORT;
 }
 
+/**
+ * Is this tile a station tile and an airport tile?
+ * @param t the tile to get the information from
+ * @return true if and only if the tile is an airport
+ */
+static inline bool IsAirportTile(TileIndex t)
+{
+	return IsTileType(t, MP_STATION) && IsAirport(t);
+}
+
 bool IsHangar(TileIndex t);
 
 /**