From e594042fb71b122776968953106861d61eacb2af Mon Sep 17 00:00:00 2001 From: rubidium Date: Tue, 11 May 2010 14:16:16 +0000 Subject: (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 --- src/train_cmd.cpp | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) (limited to 'src/train_cmd.cpp') diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index a4fd35d80..99098c44f 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -2118,14 +2118,32 @@ static void CheckNextTrainTile(Train *v) /* 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(); -- cgit v1.2.3-54-g00ecf