changeset 15156:46dfa3614ec1 draft

(svn r19785) -Codechange: reorder/rework the checks for CheckNextTrainTile a bit, causing the whole function to be a few percent faster and hopefully better to understand
author rubidium <rubidium@openttd.org>
date Tue, 11 May 2010 14:16:16 +0000
parents e2a29886a19a
children 9aa7ff1c9eea
files src/train_cmd.cpp
diffstat 1 files changed, 24 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/train_cmd.cpp
+++ b/src/train_cmd.cpp
@@ -2118,14 +2118,32 @@
 	/* Don't do any look-ahead if path_backoff_interval is 255. */
 	if (_settings_game.pf.path_backoff_interval == 255) return;
 
-	/* Exit if we reached our destination depot or are inside a depot. */
-	if ((v->tile == v->dest_tile && v->current_order.IsType(OT_GOTO_DEPOT)) || v->track == TRACK_BIT_DEPOT) return;
+	/* Exit if we are inside a depot. */
+	if (v->track == TRACK_BIT_DEPOT) return;
+
+	switch (v->current_order.GetType()) {
+		/* Exit if we reached our destination depot. */
+		case OT_GOTO_DEPOT:
+			if (v->tile == v->dest_tile) return;
+			break;
+
+		case OT_GOTO_WAYPOINT:
+			/* If we reached our waypoint, make sure we see that. */
+			if (IsRailWaypointTile(v->tile) && GetStationIndex(v->tile) == v->current_order.GetDestination()) ProcessOrders(v);
+			break;
+
+		case OT_NOTHING:
+		case OT_LEAVESTATION:
+		case OT_LOADING:
+			/* Exit if the current order doesn't have a destination, but the train has orders. */
+			if (v->GetNumOrders() > 0) return;
+			break;
+
+		default:
+			break;
+	}
 	/* Exit if we are on a station tile and are going to stop. */
 	if (IsRailStationTile(v->tile) && v->current_order.ShouldStopAtStation(v, GetStationIndex(v->tile))) return;
-	/* If we reached our waypoint, make sure we see that. */
-	if (v->current_order.IsType(OT_GOTO_WAYPOINT) && IsRailWaypointTile(v->tile) && GetStationIndex(v->tile) == v->current_order.GetDestination()) ProcessOrders(v);
-	/* Exit if the current order doesn't have a destination, but the train has orders. */
-	if ((v->current_order.IsType(OT_NOTHING) || v->current_order.IsType(OT_LEAVESTATION) || v->current_order.IsType(OT_LOADING)) && v->GetNumOrders() > 0) return;
 
 	Trackdir td = v->GetVehicleTrackdir();