Changeset - r17557:93c06b0d1431
[Not reviewed]
master
0 2 0
frosch - 13 years ago 2011-04-16 17:06:59
frosch@openttd.org
(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)
2 files changed with 12 insertions and 0 deletions:
0 comments (0 inline, 0 general)
src/order_cmd.cpp
Show inline comments
 
@@ -830,6 +830,13 @@ void InsertOrder(Vehicle *v, Order *new_
 
				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 */
src/vehicle.cpp
Show inline comments
 
@@ -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);
 
	}
0 comments (0 inline, 0 general)