From d154debb5e8040165c61bc3cc0d8924672c19c28 Mon Sep 17 00:00:00 2001 From: keldorkatarn Date: Wed, 11 Apr 2018 20:45:21 +0200 Subject: [PATCH] FIX: Endless look in vehicle route drawing if conditional orders form a cycle (in the simplest form, a conditional order skipping to itself) (cherry picked from commit 680ddba875208b09160908ad03064b542193df4e) See: #39 --- src/viewport.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/viewport.cpp b/src/viewport.cpp index 429148b175..1ca6fa2032 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -1693,8 +1693,13 @@ static inline TileIndex GetLastValidOrderLocation(const Vehicle *veh) static inline Order *GetFinalOrder(const Vehicle *veh, Order *order) { - while (order->IsType(OT_CONDITIONAL)) + auto original_order = order; + + while (order->IsType(OT_CONDITIONAL)) { order = veh->GetOrder(order->GetConditionSkipToOrder()); + + if (original_order == order) return nullptr; + } return order; } @@ -1709,6 +1714,7 @@ static bool ViewportMapPrepareVehicleRoute(const Vehicle * const veh) Order *order; FOR_VEHICLE_ORDERS(veh, order) { Order *final_order = GetFinalOrder(veh, order); + if (final_order == nullptr) continue; const TileIndex to_tile = final_order->GetLocation(veh, veh->type == VEH_AIRCRAFT); if (to_tile == INVALID_TILE) continue;