Mercurial > hg > openttd
changeset 12549:093cab6ec4c8 draft
(svn r16987) -Codechange: simplify the code to loop train station for the station demolish code
author | rubidium <rubidium@openttd.org> |
---|---|
date | Wed, 29 Jul 2009 21:49:37 +0000 |
parents | 5f4aa917387f |
children | 89fd4fa155d5 |
files | src/station_cmd.cpp |
diffstat | 1 files changed, 21 insertions(+), 28 deletions(-) [+] |
line wrap: on
line diff
--- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -1252,35 +1252,28 @@ 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);