Mercurial > hg > openttd
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) {