Improve handling of conditional order waiting loops

Do not leave station/depot/waypoint at all if conditional order
loop would result in re-starting waiting/loading

Only actually leave and update timetable at end of loop

Rate-limit loop checks regardless of timetabled wait time
This commit is contained in:
Jonathan G Rennison
2022-01-19 00:09:55 +00:00
parent 904ff6757d
commit beb6d01fe8
5 changed files with 146 additions and 11 deletions

View File

@@ -21,7 +21,16 @@ void CheckOrders(const Vehicle*);
void DeleteVehicleOrders(Vehicle *v, bool keep_orderlist = false, bool reset_order_indices = true);
bool ProcessOrders(Vehicle *v);
bool UpdateOrderDest(Vehicle *v, const Order *order, int conditional_depth = 0, bool pbs_look_ahead = false);
VehicleOrderID ProcessConditionalOrder(const Order *order, const Vehicle *v, bool dry_run = false);
enum ProcessConditionalOrderMode {
PCO_EXEC,
PCO_DRY_RUN,
PCO_DEFERRED,
};
VehicleOrderID ProcessConditionalOrder(const Order *order, const Vehicle *v, ProcessConditionalOrderMode mode = PCO_EXEC);
VehicleOrderID AdvanceOrderIndexDeferred(const Vehicle *v, VehicleOrderID index);
void FlushAdvanceOrderIndexDeferred(const Vehicle *v, bool apply);
uint GetOrderDistance(const Order *prev, const Order *cur, const Vehicle *v, int conditional_depth = 0);
void DrawOrderString(const Vehicle *v, const Order *order, int order_index, int y, bool selected, bool timetable, int left, int middle, int right);