mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r16989) -Codechange: unify the code for demolishing (dynamite) stations and waypoints.
This commit is contained in:
parent
959a5e690b
commit
a52cd653d4
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue