summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/station_base.h5
-rw-r--r--src/station_cmd.cpp6
-rw-r--r--src/station_map.h10
3 files changed, 20 insertions, 1 deletions
diff --git a/src/station_base.h b/src/station_base.h
index 5de946581..def8c595d 100644
--- a/src/station_base.h
+++ b/src/station_base.h
@@ -121,6 +121,11 @@ public:
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;
diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp
index 2ed623ea6..1e24a70fc 100644
--- a/src/station_cmd.cpp
+++ b/src/station_cmd.cpp
@@ -2066,7 +2066,7 @@ static CommandCost RemoveAirport(TileIndex tile, DoCommandFlag flags)
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 @@ static CommandCost RemoveAirport(TileIndex tile, DoCommandFlag flags)
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);
diff --git a/src/station_map.h b/src/station_map.h
index f4b3b691a..52e72657d 100644
--- a/src/station_map.h
+++ b/src/station_map.h
@@ -184,6 +184,16 @@ static inline bool IsAirport(TileIndex t)
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);
/**