changeset 14782:5bc9dd1e5d14 draft

(svn r19370) -Codechange: EnsureNoTrainOnTrack() returns a CommandCost.
author alberth <alberth@openttd.org>
date Sun, 07 Mar 2010 18:29:53 +0000
parents 7550a3af1a05
children 8f64d565fc90
files src/rail_cmd.cpp
diffstat 1 files changed, 16 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/src/rail_cmd.cpp
+++ b/src/rail_cmd.cpp
@@ -150,14 +150,12 @@
  *
  * @param tile The tile.
  * @param track The track.
- * @return \c true if no train that interacts, is found. \c false if a train is found.
+ * @return Succeeded command (no train found), or a failed command (a train was found).
  */
-static bool EnsureNoTrainOnTrack(TileIndex tile, Track track)
+static CommandCost EnsureNoTrainOnTrack(TileIndex tile, Track track)
 {
 	TrackBits rail_bits = TrackToTrackBits(track);
-	CommandCost ret = EnsureNoTrainOnTrackBits(tile, rail_bits);
-	ret.SetGlobalErrorMessage();
-	return ret.Succeeded();
+	return EnsureNoTrainOnTrackBits(tile, rail_bits);
 }
 
 /** Check that the new track bits may be built.
@@ -375,11 +373,10 @@
 			if (!IsCompatibleRail(GetRailType(tile), railtype)) return_cmd_error(STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION);
 
 			CommandCost ret = CheckTrackCombination(tile, trackbit, flags);
+			if (ret.Succeeded()) ret = EnsureNoTrainOnTrack(tile, track);
 			ret.SetGlobalErrorMessage();
 			if (ret.Failed()) return ret;
 
-			if (!EnsureNoTrainOnTrack(tile, track)) return CMD_ERROR;
-
 			ret = CheckRailSlope(tileh, trackbit, GetTrackBits(tile), tile);
 			if (ret.Failed()) return ret;
 			cost.AddCost(ret);
@@ -542,11 +539,11 @@
 		case MP_RAILWAY: {
 			TrackBits present;
 
-			if (!IsPlainRail(tile) ||
-					(_current_company != OWNER_WATER && !CheckTileOwnership(tile)) ||
-					!EnsureNoTrainOnTrack(tile, track)) {
-				return CMD_ERROR;
-			}
+			if (!IsPlainRail(tile) || (_current_company != OWNER_WATER && !CheckTileOwnership(tile))) return CMD_ERROR;
+
+			CommandCost ret = EnsureNoTrainOnTrack(tile, track);
+			ret.SetGlobalErrorMessage();
+			if (ret.Failed()) return ret;
 
 			present = GetTrackBits(tile);
 			if ((present & trackbit) == 0) return CMD_ERROR;
@@ -899,9 +896,12 @@
 
 	/* You can only build signals on plain rail tiles, and the selected track must exist */
 	if (!ValParamTrackOrientation(track) || !IsPlainRailTile(tile) ||
-			!HasTrack(tile, track) || !EnsureNoTrainOnTrack(tile, track)) {
+			!HasTrack(tile, track)) {
 		return CMD_ERROR;
 	}
+	CommandCost ret = EnsureNoTrainOnTrack(tile, track);
+	ret.SetGlobalErrorMessage();
+	if (ret.Failed()) return ret;
 
 	/* Protect against invalid signal copying */
 	if (p2 != 0 && (p2 & SignalOnTrack(track)) == 0) return CMD_ERROR;
@@ -1257,10 +1257,12 @@
 	if (!ValParamTrackOrientation(track) ||
 			!IsPlainRailTile(tile) ||
 			!HasTrack(tile, track) ||
-			!EnsureNoTrainOnTrack(tile, track) ||
 			!HasSignalOnTrack(tile, track)) {
 		return CMD_ERROR;
 	}
+	CommandCost ret = EnsureNoTrainOnTrack(tile, track);
+	ret.SetGlobalErrorMessage();
+	if (ret.Failed()) return ret;
 
 	/* Only water can remove signals from anyone */
 	if (_current_company != OWNER_WATER && !CheckTileOwnership(tile)) return CMD_ERROR;