|
@@ -1857,49 +1857,49 @@ CommandCost CmdBuildAirport(TileIndex ti
|
|
|
/**
|
|
|
* Remove an airport
|
|
|
* @param tile TileIndex been queried
|
|
|
* @param flags operation to perform
|
|
|
* @return cost or failure of operation
|
|
|
*/
|
|
|
static CommandCost RemoveAirport(TileIndex tile, DoCommandFlag flags)
|
|
|
{
|
|
|
Station *st = Station::GetByTile(tile);
|
|
|
|
|
|
if (_current_company != OWNER_WATER && !CheckOwnership(st->owner)) {
|
|
|
return CMD_ERROR;
|
|
|
}
|
|
|
|
|
|
tile = st->airport_tile;
|
|
|
|
|
|
const AirportFTAClass *afc = st->Airport();
|
|
|
int w = afc->size_x;
|
|
|
int h = afc->size_y;
|
|
|
|
|
|
CommandCost cost(EXPENSES_CONSTRUCTION, w * h * _price.remove_airport);
|
|
|
|
|
|
const Aircraft *a;
|
|
|
FOR_ALL_AIRCRAFT(a) {
|
|
|
if (!IsNormalAircraft(a)) continue;
|
|
|
if (!a->IsNormalAircraft()) continue;
|
|
|
if (a->targetairport == st->index && a->state != FLYING) return CMD_ERROR;
|
|
|
}
|
|
|
|
|
|
BEGIN_TILE_LOOP(tile_cur, w, h, tile) {
|
|
|
if (!EnsureNoVehicleOnGround(tile_cur)) return CMD_ERROR;
|
|
|
|
|
|
if (flags & DC_EXEC) {
|
|
|
DeleteAnimatedTile(tile_cur);
|
|
|
DoClearSquare(tile_cur);
|
|
|
}
|
|
|
} END_TILE_LOOP(tile_cur, w, h, tile)
|
|
|
|
|
|
if (flags & DC_EXEC) {
|
|
|
for (uint i = 0; i < afc->nof_depots; ++i) {
|
|
|
DeleteWindowById(
|
|
|
WC_VEHICLE_DEPOT, tile + ToTileIndexDiff(afc->airport_depots[i])
|
|
|
);
|
|
|
}
|
|
|
|
|
|
/* Go get the final noise level, that is base noise minus factor from distance to town center.
|
|
|
* And as for construction, always remove it, even if the setting is not set, in order to avoid the
|
|
|
* need of recalculation */
|
|
|
Town *nearest = AirportGetNearestTown(afc, tile);
|
|
|
nearest->noise_reached -= GetAirportNoiseLevelForTown(afc, nearest->xy, tile);
|