Changeset - r17558:e215b17d8fbf
[Not reviewed]
master
0 1 0
frosch - 13 years ago 2011-04-16 17:18:04
frosch@openttd.org
(svn r22332) -Fix: When inserting automatic orders, do not create consecutive duplicate orders.
1 file changed with 20 insertions and 12 deletions:
0 comments (0 inline, 0 general)
src/vehicle.cpp
Show inline comments
 
@@ -1861,20 +1861,28 @@ void Vehicle::BeginLoading()
 
		 * to show that we are stopping here, but only do that if the order
 
		 * list isn't empty. */
 
		Order *in_list = this->GetOrder(this->cur_auto_order_index);
 
		if (in_list != NULL && this->orders.list->GetNumOrders() < MAX_VEH_ORDER_ID &&
 
		if (in_list != NULL &&
 
				(!in_list->IsType(OT_AUTOMATIC) ||
 
				in_list->GetDestination() != this->last_station_visited) &&
 
				!suppress_automatic_orders &&
 
				Order::CanAllocateItem()) {
 
			Order *auto_order = new Order();
 
			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;
 
				in_list->GetDestination() != this->last_station_visited)) {
 
			/* Do not create consecutive duplicates of automatic orders */
 
			Order *prev_order = this->cur_auto_order_index > 0 ? this->GetOrder(this->cur_auto_order_index - 1) : NULL;
 
			if (prev_order == NULL ||
 
					(!prev_order->IsType(OT_AUTOMATIC) && !prev_order->IsType(OT_GOTO_STATION)) ||
 
					prev_order->GetDestination() != this->last_station_visited) {
 

	
 
			/* 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);
 
				if (!suppress_automatic_orders && this->orders.list->GetNumOrders() < MAX_VEH_ORDER_ID && Order::CanAllocateItem()) {
 
					/* Insert new automatic order */
 
					Order *auto_order = new Order();
 
					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)