summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/aircraft_cmd.cpp35
-rw-r--r--src/airport.cpp4
-rw-r--r--src/airport.h4
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