(svn r16663) -Codechange: make removing of railway station tiles faster

pull/155/head
smatz 15 years ago
parent 9d63b88b22
commit 5ca420492f

@ -1151,6 +1151,8 @@ CommandCost CmdRemoveFromRailroadStation(TileIndex tile, DoCommandFlag flags, ui
int size_x = ex - sx + 1;
int size_y = ey - sy + 1;
SmallVector<Station *, 4> affected_stations;
/* Do the action for every tile into the area */
BEGIN_TILE_LOOP(tile2, size_x, size_y, tile) {
/* Make sure the specified tile is a railroad station */
@ -1203,12 +1205,7 @@ CommandCost CmdRemoveFromRailroadStation(TileIndex tile, DoCommandFlag flags, ui
DeallocateSpecFromStation(st, specindex);
/* now we need to make the "spanned" area of the railway station smaller
* if we deleted something at the edges.
* we also need to adjust train_tile. */
MakeRailwayStationAreaSmaller(st);
st->MarkTilesDirty(false);
UpdateStationSignCoord(st);
affected_stations.Include(st);
if (v != NULL) {
/* Restore station reservation. */
@ -1217,18 +1214,29 @@ CommandCost CmdRemoveFromRailroadStation(TileIndex tile, DoCommandFlag flags, ui
for (; v->Next() != NULL; v = v->Next()) ;
if (IsRailwayStationTile(v->tile)) SetRailwayStationPlatformReservation(v->tile, TrackdirToExitdir(ReverseTrackdir(v->GetVehicleTrackdir())), true);
}
}
} END_TILE_LOOP(tile2, size_x, size_y, tile)
/* if we deleted the whole station, delete the train facility. */
if (st->train_tile == INVALID_TILE) {
st->facilities &= ~FACIL_TRAIN;
InvalidateWindowWidget(WC_STATION_VIEW, st->index, SVW_TRAINS);
UpdateStationVirtCoordDirty(st);
DeleteStationIfEmpty(st);
}
for (Station **stp = affected_stations.Begin(); stp != affected_stations.End(); stp++) {
Station *st = *stp;
/* now we need to make the "spanned" area of the railway station smaller
* if we deleted something at the edges.
* we also need to adjust train_tile. */
MakeRailwayStationAreaSmaller(st);
st->MarkTilesDirty(false);
UpdateStationSignCoord(st);
st->RecomputeIndustriesNear();
/* if we deleted the whole station, delete the train facility. */
if (st->train_tile == INVALID_TILE) {
st->facilities &= ~FACIL_TRAIN;
InvalidateWindowWidget(WC_STATION_VIEW, st->index, SVW_TRAINS);
UpdateStationVirtCoordDirty(st);
DeleteStationIfEmpty(st);
}
} END_TILE_LOOP(tile2, size_x, size_y, tile)
st->RecomputeIndustriesNear();
}
/* If we've not removed any tiles, give an error */
if (quantity == 0) return CMD_ERROR;

Loading…
Cancel
Save