diff src/train_cmd.cpp @ 10683:4742228a9d1d draft

(svn r14994) -Fix [FS#Aali]: Better handling of OT_LOADING and OT_LEAVESTATION in ChooseTrainTrack.
author frosch <frosch@openttd.org>
date Sun, 11 Jan 2009 16:33:03 +0000
parents 2d192d93d11c
children f76eeab175e5
line wrap: on
line diff
--- a/src/train_cmd.cpp
+++ b/src/train_cmd.cpp
@@ -2847,11 +2847,12 @@
 
 	/**
 	 * Set the current vehicle order to the next order in the order list.
+	 * @param skip_first Shall the first (i.e. active) order be skipped?
 	 * @return True if a suitable next order could be found.
 	 */
-	bool SwitchToNextOrder()
+	bool SwitchToNextOrder(bool skip_first)
 	{
-		++this->index;
+		if (skip_first) ++this->index;
 
 		int conditional_depth = 0;
 
@@ -2951,11 +2952,13 @@
 	 * for a path and no look-ahead is necessary. This also avoids a
 	 * problem with depot orders not part of the order list when the
 	 * order list itself is empty. */
-	if (!v->current_order.IsType(OT_GOTO_DEPOT) && (
+	if (v->current_order.IsType(OT_LEAVESTATION)) {
+		orders.SwitchToNextOrder(false);
+	} else if (v->current_order.IsType(OT_LOADING) || (!v->current_order.IsType(OT_GOTO_DEPOT) && (
 			v->current_order.IsType(OT_GOTO_STATION) ?
 			IsRailwayStationTile(v->tile) && v->current_order.GetDestination() == GetStationIndex(v->tile) :
-			v->tile == v->dest_tile)) {
-		orders.SwitchToNextOrder();
+			v->tile == v->dest_tile))) {
+		orders.SwitchToNextOrder(true);
 	}
 
 	if (res_dest.tile != INVALID_TILE && !res_dest.okay) {
@@ -3032,7 +3035,7 @@
 		}
 
 		/* Get next order with destination. */
-		if (orders.SwitchToNextOrder()) {
+		if (orders.SwitchToNextOrder(true)) {
 			PBSTileInfo cur_dest;
 			DoTrainPathfind(v, next_tile, exitdir, reachable, NULL, true, &cur_dest);
 			if (cur_dest.tile != INVALID_TILE) {