|
@@ -2226,53 +2226,50 @@ static CommandCost RemoveAirport(TileInd
|
|
|
if (_current_company != OWNER_WATER && !CheckOwnership(st->owner)) {
|
|
|
return CMD_ERROR;
|
|
|
}
|
|
|
|
|
|
tile = st->airport.tile;
|
|
|
|
|
|
const AirportSpec *as = st->GetAirportSpec();
|
|
|
int w = as->size_x;
|
|
|
int h = as->size_y;
|
|
|
|
|
|
CommandCost cost(EXPENSES_CONSTRUCTION);
|
|
|
|
|
|
const Aircraft *a;
|
|
|
FOR_ALL_AIRCRAFT(a) {
|
|
|
if (!a->IsNormalAircraft()) continue;
|
|
|
if (a->targetairport == st->index && a->state != FLYING) return CMD_ERROR;
|
|
|
}
|
|
|
|
|
|
TILE_AREA_LOOP(tile_cur, st->airport) {
|
|
|
if (!st->TileBelongsToAirport(tile_cur)) continue;
|
|
|
|
|
|
CommandCost ret = EnsureNoVehicleOnGround(tile);
|
|
|
CommandCost ret = EnsureNoVehicleOnGround(tile_cur);
|
|
|
ret.SetGlobalErrorMessage();
|
|
|
if (ret.Failed()) return ret;
|
|
|
|
|
|
cost.AddCost(_price[PR_CLEAR_STATION_AIRPORT]);
|
|
|
|
|
|
if (flags & DC_EXEC) {
|
|
|
DeleteAnimatedTile(tile_cur);
|
|
|
DoClearSquare(tile_cur);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (flags & DC_EXEC) {
|
|
|
const AirportSpec *as = st->GetAirportSpec();
|
|
|
for (uint i = 0; i < as->nof_depots; ++i) {
|
|
|
DeleteWindowById(
|
|
|
WC_VEHICLE_DEPOT, st->GetHangarTile(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(as, tile);
|
|
|
nearest->noise_reached -= GetAirportNoiseLevelForTown(as, nearest->xy, tile);
|
|
|
|
|
|
st->rect.AfterRemoveRect(st, tile, w, h);
|
|
|
st->rect.AfterRemoveRect(st, tile, st->airport.w, st->airport.h);
|
|
|
|
|
|
st->airport.Clear();
|
|
|
st->facilities &= ~FACIL_AIRPORT;
|
|
|
|
|
|
SetWindowWidgetDirty(WC_STATION_VIEW, st->index, SVW_PLANES);
|
|
|
|