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);