(svn r16989) -Codechange: unify the code for demolishing (dynamite) stations and waypoints.

This commit is contained in:
rubidium 2009-07-29 22:13:12 +00:00
parent 959a5e690b
commit a52cd653d4
3 changed files with 43 additions and 54 deletions

View File

@ -1278,20 +1278,15 @@ CommandCost CmdRemoveTrainWaypoint(TileIndex start, DoCommandFlag flags, uint32
/**
* 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,13 +1336,50 @@ static CommandCost RemoveRailroadStation(TileIndex tile, DoCommandFlag flags)
InvalidateWindowWidget(WC_STATION_VIEW, st->index, SVW_TRAINS);
st->UpdateVirtCoord();
st->RecomputeIndustriesNear();
DeleteStationIfEmpty(st);
}
return cost;
}
/**
* 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

View File

@ -210,48 +210,6 @@ CommandCost CmdBuildTrainWaypoint(TileIndex tile, DoCommandFlag flags, uint32 p1
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

View File

@ -9,7 +9,6 @@
#include "command_type.h"
#include "station_type.h"
CommandCost RemoveTrainWaypoint(TileIndex tile, DoCommandFlag flags);
CommandCost RemoveBuoy(TileIndex tile, DoCommandFlag flags);
void ShowWaypointWindow(const Waypoint *wp);