diff options
-rw-r--r-- | src/aircraft_cmd.cpp | 35 | ||||
-rw-r--r-- | src/airport.cpp | 4 | ||||
-rw-r--r-- | src/airport.h | 4 |
3 files changed, 25 insertions, 18 deletions
diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp index 2108cadc3..7c25d417d 100644 --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -74,22 +74,23 @@ static StationID FindNearestHangar(const Vehicle *v) TileIndex vtile = TileVirtXY(v->x_pos, v->y_pos); FOR_ALL_STATIONS(st) { - if (st->owner == v->owner && st->facilities & FACIL_AIRPORT && - GetAirport(st->airport_type)->nof_depots > 0) { - uint distance; - - // don't crash the plane if we know it can't land at the airport - if ((AircraftVehInfo(v->engine_type)->subtype & AIR_FAST) && - (st->airport_type == AT_SMALL || st->airport_type == AT_COMMUTER) && - !_cheats.no_jetcrash.value) - continue; + if (st->owner != v->owner || !(st->facilities & FACIL_AIRPORT)) continue; + + const AirportFTAClass *afc = GetAirport(st->airport_type); + if (afc->nof_depots == 0 || ( + /* don't crash the plane if we know it can't land at the airport */ + afc->flags & AirportFTAClass::SHORT_STRIP && + AircraftVehInfo(v->engine_type)->subtype & AIR_FAST && + !_cheats.no_jetcrash.value + )) { + continue; + } - // v->tile can't be used here, when aircraft is flying v->tile is set to 0 - distance = DistanceSquare(vtile, st->airport_tile); - if (distance < best || index == INVALID_STATION) { - best = distance; - index = st->index; - } + // v->tile can't be used here, when aircraft is flying v->tile is set to 0 + uint distance = DistanceSquare(vtile, st->airport_tile); + if (distance < best || index == INVALID_STATION) { + best = distance; + index = st->index; } } return index; @@ -1368,7 +1369,9 @@ static void MaybeCrashAirplane(Vehicle *v) //FIXME -- MaybeCrashAirplane -> increase crashing chances of very modern airplanes on smaller than AT_METROPOLITAN airports prob = 0x10000 / 1500; - if (((st->airport_type == AT_SMALL) || (st->airport_type == AT_COMMUTER)) && (AircraftVehInfo(v->engine_type)->subtype & AIR_FAST) && !_cheats.no_jetcrash.value) { + if (GetAirport(st->airport_type)->flags & AirportFTAClass::SHORT_STRIP && + AircraftVehInfo(v->engine_type)->subtype & AIR_FAST && + !_cheats.no_jetcrash.value) { prob = 0x10000 / 20; } diff --git a/src/airport.cpp b/src/airport.cpp index 0f299aa35..b020310d2 100644 --- a/src/airport.cpp +++ b/src/airport.cpp @@ -37,7 +37,7 @@ void InitializeAirports(void) _airport_terminal_country, NULL, 16, - AirportFTAClass::ALL, + AirportFTAClass::ALL | AirportFTAClass::SHORT_STRIP, _airport_fta_country, _airport_depots_country, lengthof(_airport_depots_country), @@ -128,7 +128,7 @@ void InitializeAirports(void) _airport_terminal_commuter, _airport_helipad_commuter, 22, - AirportFTAClass::ALL, + AirportFTAClass::ALL | AirportFTAClass::SHORT_STRIP, _airport_fta_commuter, _airport_depots_commuter, lengthof(_airport_depots_commuter), diff --git a/src/airport.h b/src/airport.h index 1d940ddf8..dd5ebabce 100644 --- a/src/airport.h +++ b/src/airport.h @@ -125,6 +125,7 @@ typedef struct AirportFTAClass { PLANES = 0x1, HELICOPTERS = 0x2, ALL = PLANES | HELICOPTERS, + SHORT_STRIP = 0x4 }; AirportFTAClass( @@ -163,6 +164,9 @@ typedef struct AirportFTAClass { byte delta_z; // Z adjustment for helicopter pads } AirportFTAClass; +DECLARE_ENUM_AS_BIT_SET(AirportFTAClass::Flags) + + // internal structure used in openttd - Finite sTate mAchine --> FTA typedef struct AirportFTA { struct AirportFTA *next; // possible extra movement choices from this position |