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
--- a/src/waypoint_func.h
+++ b/src/waypoint_func.h
@@ -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);