Mercurial > hg > openttd
changeset 2213:12c3f2f7c949 draft
(svn r2731) -Fix [ 1244171 ]: Hangar orders are now properly invalidated as soon as the airport is removed
author | celestar <celestar@openttd.org> |
---|---|
date | Thu, 28 Jul 2005 05:47:54 +0000 |
parents | 80c1a53c081e |
children | 3598e232cc78 |
files | station_cmd.c |
diffstat | 1 files changed, 32 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/station_cmd.c +++ b/station_cmd.c @@ -1,5 +1,8 @@ /* $Id$ */ +/** @file station_cmd.c + */ + #include "stdafx.h" #include "openttd.h" #include "debug.h" @@ -2446,10 +2449,19 @@ 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 @@ 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); }