|
@@ -2182,25 +2182,24 @@ CommandCost CmdBuildAirport(TileIndex ti
|
|
|
cost.AddCost(_price[PR_BUILD_STATION_AIRPORT]);
|
|
|
} while ((++it)->ti.x != -0x80);
|
|
|
|
|
|
if (flags & DC_EXEC) {
|
|
|
/* Always add the noise, so there will be no need to recalculate when option toggles */
|
|
|
nearest->noise_reached += newnoise_level;
|
|
|
|
|
|
st->AddFacility(FACIL_AIRPORT, tile);
|
|
|
st->airport.type = airport_type;
|
|
|
st->airport.layout = layout;
|
|
|
st->airport.flags = 0;
|
|
|
st->airport.rotation = rotation;
|
|
|
st->airport.psa.ResetToZero();
|
|
|
|
|
|
st->rect.BeforeAddRect(tile, w, h, StationRect::ADD_TRY);
|
|
|
|
|
|
it = as->table[layout];
|
|
|
do {
|
|
|
TileIndex cur_tile = tile + ToTileIndexDiff(it->ti);
|
|
|
MakeAirport(cur_tile, st->owner, st->index, it->gfx, WATER_CLASS_INVALID);
|
|
|
SetStationTileRandomBits(cur_tile, GB(Random(), 0, 4));
|
|
|
st->airport.Add(cur_tile);
|
|
|
|
|
|
if (AirportTileSpec::Get(GetTranslatedAirportTileID(it->gfx))->animation.status != ANIM_STATUS_NO_ANIMATION) AddAnimatedTile(cur_tile);
|
|
|
} while ((++it)->ti.x != -0x80);
|
|
@@ -2262,42 +2261,44 @@ static CommandCost RemoveAirport(TileInd
|
|
|
|
|
|
cost.AddCost(_price[PR_CLEAR_STATION_AIRPORT]);
|
|
|
|
|
|
if (flags & DC_EXEC) {
|
|
|
if (IsHangarTile(tile_cur)) OrderBackup::Reset(tile_cur, false);
|
|
|
DeleteAnimatedTile(tile_cur);
|
|
|
DoClearSquare(tile_cur);
|
|
|
DeleteNewGRFInspectWindow(GSF_AIRPORTTILES, tile_cur);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (flags & DC_EXEC) {
|
|
|
/* Clear the persistent storage. */
|
|
|
delete st->airport.psa;
|
|
|
|
|
|
const AirportSpec *as = st->airport.GetSpec();
|
|
|
for (uint i = 0; i < st->airport.GetNumHangars(); ++i) {
|
|
|
DeleteWindowById(
|
|
|
WC_VEHICLE_DEPOT, st->airport.GetHangarTile(i)
|
|
|
);
|
|
|
}
|
|
|
|
|
|
/* The noise level is the noise from the airport and reduce it to account for the distance to the 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, st->airport);
|
|
|
|
|
|
st->airport.Clear();
|
|
|
st->facilities &= ~FACIL_AIRPORT;
|
|
|
st->airport.psa.ResetToZero();
|
|
|
|
|
|
SetWindowWidgetDirty(WC_STATION_VIEW, st->index, SVW_PLANES);
|
|
|
|
|
|
if (_settings_game.economy.station_noise_level) {
|
|
|
SetWindowDirty(WC_TOWN_VIEW, st->town->index);
|
|
|
}
|
|
|
|
|
|
st->UpdateVirtCoord();
|
|
|
st->RecomputeIndustriesNear();
|
|
|
DeleteStationIfEmpty(st);
|
|
|
DeleteNewGRFInspectWindow(GSF_AIRPORTS, st->index);
|
|
|
}
|