Mercurial > hg > openttd
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); /**