Changeset - r2213:6582b22231a1
[Not reviewed]
master
0 1 0
celestar - 19 years ago 2005-07-28 05:47:54
celestar@openttd.org
(svn r2731) -Fix [ 1244171 ]: Hangar orders are now properly invalidated as soon as the airport is removed
1 file changed with 32 insertions and 0 deletions:
0 comments (0 inline, 0 general)
station_cmd.c
Show inline comments
 
/* $Id$ */
 

	
 
/** @file station_cmd.c
 
  */
 

	
 
#include "stdafx.h"
 
#include "openttd.h"
 
#include "debug.h"
 
@@ -2446,10 +2449,19 @@ static uint32 VehicleEnter_Station(Vehic
 
	return 0;
 
}
 

	
 
/** Removes a station from the list.
 
  * This is done by setting the .xy property to 0,
 
  * and doing some maintenance, especially clearing vehicle orders.
 
  * Aircraft-Hangar orders need special treatment here, as the hangars are
 
  * actually part of a station (tiletype is STATION), but the order type
 
  * is OT_GOTO_DEPOT.
 
  * @param st Station to be deleted
 
  */
 
static void DeleteStation(Station *st)
 
{
 
	Order order;
 
	StationID index;
 
	Vehicle *v;
 
	st->xy = 0;
 

	
 
	DeleteName(st->string_id);
 
@@ -2460,10 +2472,30 @@ static void DeleteStation(Station *st)
 
	index = st->index;
 
	DeleteWindowById(WC_STATION_VIEW, index);
 

	
 
	//Now delete all orders that go to the station
 
	order.type = OT_GOTO_STATION;
 
	order.station = index;
 
	DeleteDestinationFromVehicleOrder(order);
 

	
 
	//And do the same with aircraft that have the station as a hangar-stop
 
	FOR_ALL_VEHICLES(v) {
 
		bool invalidate = false;
 
		if (v->type == VEH_Aircraft) {
 
			Order *order;
 
			FOR_VEHICLE_ORDERS(v, order) {
 
				if (order->type == OT_GOTO_DEPOT && order->station == index) {
 
					order->type = OT_DUMMY;
 
					order->flags = 0;
 
					invalidate = true;
 
				}
 
			}
 
		}
 
		//Orders for the vehicle have been changed, invalidate the window
 
		if (invalidate)
 
			InvalidateWindow(WC_VEHICLE_ORDERS, v->index);
 
	}
 

	
 
	//Subsidies need removal as well
 
	DeleteSubsidyWithStation(index);
 
}
 

	
0 comments (0 inline, 0 general)