diff options
author | frosch <frosch@openttd.org> | 2011-04-16 17:06:59 +0000 |
---|---|---|
committer | frosch <frosch@openttd.org> | 2011-04-16 17:06:59 +0000 |
commit | 8dd2f413bd896983df15f7fe1d5cf019cfb0184e (patch) | |
tree | ecc2da367fc4e9fa5f0be121c5e6cde7f90c0798 /src | |
parent | 181fd5e3ab4cf83514f3859bffa4b97f14398c74 (diff) | |
download | openttd-8dd2f413bd896983df15f7fe1d5cf019cfb0184e.tar.xz |
(svn r22331) -Change: When inserting an (automatic) order A in front of an order B, disable modifications of automatic orders for all vehicles currently heading for B as we do not know whether they will reach A or B first. (except for the vehicle causing the insertion of the automatic order itself)
Diffstat (limited to 'src')
-rw-r--r-- | src/order_cmd.cpp | 7 | ||||
-rw-r--r-- | src/vehicle.cpp | 5 |
2 files changed, 12 insertions, 0 deletions
diff --git a/src/order_cmd.cpp b/src/order_cmd.cpp index 0cbb10b78..3adaab218 100644 --- a/src/order_cmd.cpp +++ b/src/order_cmd.cpp @@ -830,6 +830,13 @@ void InsertOrder(Vehicle *v, Order *new_o, VehicleOrderID sel_ord) u->cur_real_order_index = cur; } } + if (sel_ord == u->cur_auto_order_index && u->IsGroundVehicle()) { + /* We are inserting an order just before the current automatic order. + * We do not know whether we will reach current automatic or the newly inserted order first. + * So, disable creation of automatic orders until we are on track again. */ + uint16 &gv_flags = u->GetGroundVehicleFlags(); + SetBit(gv_flags, GVF_SUPPRESS_AUTOMATIC_ORDERS); + } if (sel_ord <= u->cur_auto_order_index) { uint cur = u->cur_auto_order_index + 1; /* Check if we don't go out of bound */ diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 66e858107..8d3aac139 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -1870,6 +1870,11 @@ void Vehicle::BeginLoading() auto_order->MakeAutomatic(this->last_station_visited); InsertOrder(this, auto_order, this->cur_auto_order_index); if (this->cur_auto_order_index > 0) --this->cur_auto_order_index; + + /* InsertOrder disabled creation of automatic orders for all vehicles with the same automatic order. + * Reenable it for this vehicle */ + uint16 &gv_flags = this->GetGroundVehicleFlags(); + ClrBit(gv_flags, GVF_SUPPRESS_AUTOMATIC_ORDERS); } this->current_order.MakeLoading(false); } |