Mercurial > hg > openttd
changeset 12551:ddf004b08b53 draft
(svn r16989) -Codechange: unify the code for demolishing (dynamite) stations and waypoints.
author | rubidium <rubidium@openttd.org> |
---|---|
date | Wed, 29 Jul 2009 22:13:12 +0000 |
parents | 89fd4fa155d5 |
children | 92b34b5e5b00 |
files | src/station_cmd.cpp src/waypoint_cmd.cpp src/waypoint_func.h |
diffstat | 3 files changed, 43 insertions(+), 54 deletions(-) [+] |
line wrap: on
line diff
--- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -1278,20 +1278,15 @@ /** - * Remove a rail road station - * @param tile TileIndex been queried + * Remove a rail road station/waypoint + * @param st The station/waypoint to remove the rail part from * @param flags operation to perform + * @param T the type of station to remove * @return cost or failure of operation */ -static CommandCost RemoveRailroadStation(TileIndex tile, DoCommandFlag flags) +template <class T> +CommandCost RemoveRailStation(T *st, DoCommandFlag flags) { - /* if there is flooding and non-uniform stations are enabled, remove platforms tile by tile */ - if (_current_company == OWNER_WATER && _settings_game.station.nonuniform_stations) { - return DoCommand(tile, 0, 0, DC_EXEC, CMD_REMOVE_FROM_RAILROAD_STATION); - } - - Station *st = Station::GetByTile(tile); - /* Current company owns the station? */ if (_current_company != OWNER_WATER && !CheckOwnership(st->owner)) return CMD_ERROR; @@ -1341,7 +1336,6 @@ InvalidateWindowWidget(WC_STATION_VIEW, st->index, SVW_TRAINS); st->UpdateVirtCoord(); - st->RecomputeIndustriesNear(); DeleteStationIfEmpty(st); } @@ -1349,6 +1343,44 @@ } /** + * Remove a rail road station + * @param tile TileIndex been queried + * @param flags operation to perform + * @return cost or failure of operation + */ +static CommandCost RemoveRailroadStation(TileIndex tile, DoCommandFlag flags) +{ + /* if there is flooding and non-uniform stations are enabled, remove platforms tile by tile */ + if (_current_company == OWNER_WATER && _settings_game.station.nonuniform_stations) { + return DoCommand(tile, 0, 0, DC_EXEC, CMD_REMOVE_FROM_RAILROAD_STATION); + } + + Station *st = Station::GetByTile(tile); + CommandCost cost = RemoveRailStation(st, flags); + + if (flags & DC_EXEC) st->RecomputeIndustriesNear(); + + return cost; +} + +/** + * Remove a rail waypoint + * @param tile TileIndex been queried + * @param flags operation to perform + * @return cost or failure of operation + */ +static CommandCost RemoveTrainWaypoint(TileIndex tile, DoCommandFlag flags) +{ + /* if there is flooding and non-uniform stations are enabled, remove waypoints tile by tile */ + if (_current_company == OWNER_WATER && _settings_game.station.nonuniform_stations) { + return DoCommand(tile, 0, 0, DC_EXEC, CMD_REMOVE_TRAIN_WAYPOINT); + } + + return RemoveRailStation(Waypoint::GetByTile(tile), flags); +} + + +/** * @param truck_station Determines whether a stop is ROADSTOP_BUS or ROADSTOP_TRUCK * @param st The Station to do the whole procedure for * @return a pointer to where to link a new RoadStop*
--- a/src/waypoint_cmd.cpp +++ b/src/waypoint_cmd.cpp @@ -210,48 +210,6 @@ return CommandCost(EXPENSES_CONSTRUCTION, _price.build_train_depot); } -/** - * Remove a waypoint - * @param tile from which to remove waypoint - * @param flags type of operation - * @param justremove will indicate if it is removed from rail or if rails are removed too - * @pre IsRailWaypointTile(tile) - * @return cost of operation or error - */ -CommandCost RemoveTrainWaypoint(TileIndex tile, DoCommandFlag flags) -{ - /* Make sure it's a waypoint */ - if (!IsRailWaypointTile(tile) || - (!CheckTileOwnership(tile) && _current_company != OWNER_WATER) || - !EnsureNoVehicleOnGround(tile)) { - return CMD_ERROR; - } - - if (flags & DC_EXEC) { - Track track = GetRailStationTrack(tile); - Waypoint *wp = Waypoint::GetByTile(tile); - - wp->sign.MarkDirty(); - wp->facilities &= ~FACIL_TRAIN; - - Train *v = NULL; - uint specindex = GetCustomStationSpecIndex(tile); - if (HasStationReservation(tile)) { - v = GetTrainForReservation(tile, track); - if (v != NULL) FreeTrainTrackReservation(v); - } - DoClearSquare(tile); - AddTrackToSignalBuffer(tile, track, wp->owner); - YapfNotifyTrackLayoutChange(tile, track); - if (v != NULL) TryPathReserve(v, true); - - DeallocateSpecFromStation(wp, specindex); - wp->rect.AfterRemoveTile(wp, tile); - } - - return CommandCost(EXPENSES_CONSTRUCTION, _price.remove_train_depot); -} - /** Build a buoy. * @param tile tile where to place the bouy * @param flags operation to perform