(svn r2731) -Fix [ 1244171 ]: Hangar orders are now properly invalidated as soon as the airport is removed

pull/155/head
celestar 19 years ago
parent 25f72e40cc
commit 692b226bb6

@ -1,5 +1,8 @@
/* $Id$ */
/** @file station_cmd.c
*/
#include "stdafx.h"
#include "openttd.h"
#include "debug.h"
@ -2446,10 +2449,19 @@ static uint32 VehicleEnter_Station(Vehicle *v, TileIndex tile, int x, int y)
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);
}

Loading…
Cancel
Save