summaryrefslogtreecommitdiff
path: root/src/order_cmd.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/order_cmd.cpp')
-rw-r--r--src/order_cmd.cpp51
1 files changed, 23 insertions, 28 deletions
diff --git a/src/order_cmd.cpp b/src/order_cmd.cpp
index 7bb16f2bd..0fb5087c0 100644
--- a/src/order_cmd.cpp
+++ b/src/order_cmd.cpp
@@ -1640,10 +1640,12 @@ VehicleOrderID ProcessConditionalOrder(const Order *order, const Vehicle *v)
*/
bool UpdateOrderDest(Vehicle *v, const Order *order, int conditional_depth)
{
+ if (conditional_depth > v->GetNumOrders()) return false;
+
switch (order->GetType()) {
case OT_GOTO_STATION:
v->dest_tile = v->GetOrderStationLocation(order->GetDestination());
- break;
+ return true;
case OT_GOTO_DEPOT:
if (v->current_order.GetDepotActionType() & ODATFB_NEAREST_DEPOT) {
@@ -1667,19 +1669,19 @@ bool UpdateOrderDest(Vehicle *v, const Order *order, int conditional_depth)
AircraftNextAirportPos_and_Order(a);
}
}
- } else {
- if (conditional_depth > v->GetNumOrders()) return false;
-
- UpdateVehicleTimetable(v, true);
- v->IncrementOrderIndex();
+ return true;
+ }
- /* Get the current order */
- const Order *order = v->GetOrder(v->cur_order_index);
- v->current_order = *order;
- return UpdateOrderDest(v, order, conditional_depth + 1);
+ UpdateVehicleTimetable(v, true);
+ v->IncrementOrderIndex();
+ } else if ((order->GetDepotOrderType() & ODTFB_SERVICE) && !v->NeedsServicing()) {
+ UpdateVehicleTimetable(v, true);
+ v->IncrementOrderIndex();
+ } else {
+ if (v->type != VEH_AIRCRAFT) {
+ v->dest_tile = Depot::Get(order->GetDestination())->xy;
}
- } else if (v->type != VEH_AIRCRAFT) {
- v->dest_tile = Depot::Get(order->GetDestination())->xy;
+ return true;
}
break;
@@ -1689,11 +1691,9 @@ bool UpdateOrderDest(Vehicle *v, const Order *order, int conditional_depth)
} else {
v->dest_tile = Station::Get(order->GetDestination())->xy;
}
- break;
+ return true;
case OT_CONDITIONAL: {
- if (conditional_depth > v->GetNumOrders()) return false;
-
VehicleOrderID next_order = ProcessConditionalOrder(order, v);
if (next_order != INVALID_VEH_ORDER_ID) {
UpdateVehicleTimetable(v, false);
@@ -1703,20 +1703,20 @@ bool UpdateOrderDest(Vehicle *v, const Order *order, int conditional_depth)
UpdateVehicleTimetable(v, true);
v->IncrementOrderIndex();
}
-
- assert(v->cur_order_index < v->GetNumOrders());
-
- /* Get the current order */
- const Order *order = v->GetOrder(v->cur_order_index);
- v->current_order = *order;
- return UpdateOrderDest(v, order, conditional_depth + 1);
+ break;
}
default:
v->dest_tile = 0;
return false;
}
- return true;
+
+ assert(v->cur_order_index < v->GetNumOrders());
+
+ /* Get the current order */
+ order = v->GetOrder(v->cur_order_index);
+ v->current_order = *order;
+ return UpdateOrderDest(v, order, conditional_depth + 1);
}
/**
@@ -1732,11 +1732,6 @@ bool ProcessOrders(Vehicle *v)
case OT_GOTO_DEPOT:
/* Let a depot order in the orderlist interrupt. */
if (!(v->current_order.GetDepotOrderType() & ODTFB_PART_OF_ORDERS)) return false;
-
- if ((v->current_order.GetDepotOrderType() & ODTFB_SERVICE) && !v->NeedsServicing()) {
- UpdateVehicleTimetable(v, true);
- v->IncrementOrderIndex();
- }
break;
case OT_LOADING: