Changeset - r12541:580051b8b8ef
[Not reviewed]
master
0 3 0
rubidium - 15 years ago 2009-07-29 22:13:12
rubidium@openttd.org
(svn r16989) -Codechange: unify the code for demolishing (dynamite) stations and waypoints.
3 files changed with 43 insertions and 54 deletions:
0 comments (0 inline, 0 general)
src/station_cmd.cpp
Show inline comments
 
@@ -1278,20 +1278,15 @@ CommandCost CmdRemoveTrainWaypoint(TileI
 

	
 

	
 
/**
 
 * 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 @@ static CommandCost RemoveRailroadStation
 

	
 
		InvalidateWindowWidget(WC_STATION_VIEW, st->index, SVW_TRAINS);
 
		st->UpdateVirtCoord();
 
		st->RecomputeIndustriesNear();
 
		DeleteStationIfEmpty(st);
 
	}
 

	
 
@@ -1349,6 +1343,44 @@ static CommandCost RemoveRailroadStation
 
}
 

	
 
/**
 
 * 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*
src/waypoint_cmd.cpp
Show inline comments
 
@@ -210,48 +210,6 @@ CommandCost CmdBuildTrainWaypoint(TileIn
 
	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
src/waypoint_func.h
Show inline comments
 
@@ -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);
0 comments (0 inline, 0 general)