(svn r16987) -Codechange: simplify the code to loop train station for the station demolish code

This commit is contained in:
rubidium 2009-07-29 21:49:37 +00:00
parent 30a1f1416a
commit e6480d823a
1 changed files with 21 additions and 28 deletions

View File

@ -1252,35 +1252,28 @@ static CommandCost RemoveRailroadStation(TileIndex tile, DoCommandFlag flags)
CommandCost cost(EXPENSES_CONSTRUCTION);
/* clear all areas of the station */
do {
int w_bak = ta.w;
do {
/* for nonuniform stations, only remove tiles that are actually train station tiles */
if (st->TileBelongsToRailStation(ta.tile)) {
if (!EnsureNoVehicleOnGround(ta.tile)) {
return CMD_ERROR;
}
cost.AddCost(_price.remove_rail_station);
if (flags & DC_EXEC) {
/* read variables before the station tile is removed */
Track track = GetRailStationTrack(ta.tile);
Owner owner = GetTileOwner(ta.tile); // _current_company can be OWNER_WATER
Train *v = NULL;
if (HasStationReservation(ta.tile)) {
v = GetTrainForReservation(ta.tile, track);
if (v != NULL) FreeTrainTrackReservation(v);
}
DoClearSquare(ta.tile);
AddTrackToSignalBuffer(ta.tile, track, owner);
YapfNotifyTrackLayoutChange(ta.tile, track);
if (v != NULL) TryPathReserve(v, true);
}
TILE_LOOP(tile, ta.w, ta.h, ta.tile) {
/* for nonuniform stations, only remove tiles that are actually train station tiles */
if (!st->TileBelongsToRailStation(tile)) continue;
if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR;
cost.AddCost(_price.remove_rail_station);
if (flags & DC_EXEC) {
/* read variables before the station tile is removed */
Track track = GetRailStationTrack(tile);
Owner owner = GetTileOwner(tile); // _current_company can be OWNER_WATER
Train *v = NULL;
if (HasStationReservation(tile)) {
v = GetTrainForReservation(tile, track);
if (v != NULL) FreeTrainTrackReservation(v);
}
ta.tile += TileDiffXY(1, 0);
} while (--ta.w);
ta.w = w_bak;
ta.tile += TileDiffXY(-ta.w, 1);
} while (--ta.h);
DoClearSquare(tile);
AddTrackToSignalBuffer(tile, track, owner);
YapfNotifyTrackLayoutChange(tile, track);
if (v != NULL) TryPathReserve(v, true);
}
}
if (flags & DC_EXEC) {
st->rect.AfterRemoveRect(st, st->train_station.tile, st->train_station.w, st->train_station.h);