summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryexo <yexo@openttd.org>2010-03-01 20:17:21 +0000
committeryexo <yexo@openttd.org>2010-03-01 20:17:21 +0000
commit3cda09170cf9e2560029393f2b688d7afec70cf4 (patch)
tree558aca1ac5a4c117a75da455faf2d972241979b8
parentfe5bb036a063d73b05bd15f5b6797e7c637e11ef (diff)
downloadopenttd-3cda09170cf9e2560029393f2b688d7afec70cf4.tar.xz
(svn r19299) -Codechange: store the most compatible ttd airport type in AirportSpec
-Fix: [NewGRF] return the ttd airport type in station var 0xF1
-rw-r--r--src/newgrf_airport.cpp4
-rw-r--r--src/newgrf_airport.h9
-rw-r--r--src/newgrf_engine.cpp27
-rw-r--r--src/newgrf_station.cpp2
-rw-r--r--src/table/airport_defaults.h31
5 files changed, 30 insertions, 43 deletions
diff --git a/src/newgrf_airport.cpp b/src/newgrf_airport.cpp
index 33fb3ed5d..b2cf3e84e 100644
--- a/src/newgrf_airport.cpp
+++ b/src/newgrf_airport.cpp
@@ -15,8 +15,8 @@
#include "date_func.h"
#include "settings_type.h"
-AirportSpec AirportSpec::dummy = {NULL, NULL, 0, 0, 0, 0, 0, MIN_YEAR, MIN_YEAR};
-AirportSpec AirportSpec::oilrig = {NULL, NULL, 0, 1, 1, 0, 4, MIN_YEAR, MIN_YEAR};
+AirportSpec AirportSpec::dummy = {NULL, NULL, 0, 0, 0, 0, 0, MIN_YEAR, MIN_YEAR, ATP_TTDP_LARGE};
+AirportSpec AirportSpec::oilrig = {NULL, NULL, 0, 1, 1, 0, 4, MIN_YEAR, MIN_YEAR, ATP_TTDP_OILRIG};
/**
* Retrieve airport spec for the given airport
diff --git a/src/newgrf_airport.h b/src/newgrf_airport.h
index c11372620..3404098bd 100644
--- a/src/newgrf_airport.h
+++ b/src/newgrf_airport.h
@@ -23,6 +23,14 @@ struct AirportTileTable {
StationGfx gfx;
};
+/** TTDP airport types. Used to map our types to TTDPatch's */
+enum {
+ ATP_TTDP_SMALL, ///< Same as AT_SMALL
+ ATP_TTDP_LARGE, ///< Same as AT_LARGE
+ ATP_TTDP_HELIPORT, ///< Same as AT_HELIPORT
+ ATP_TTDP_OILRIG, ///< Same as AT_OILRIG
+};
+
/**
* Defines the data structure for an airport.
*/
@@ -36,6 +44,7 @@ struct AirportSpec {
byte catchment; ///< catchment area of this airport
Year min_year; ///< first year the airport is available
Year max_year; ///< last year the airport is available
+ byte ttd_airport_type; ///< ttdpatch airport type (Small/Large/Helipad/Oilrig)
static const AirportSpec *Get(byte type);
diff --git a/src/newgrf_engine.cpp b/src/newgrf_engine.cpp
index 982fcf833..a60602abb 100644
--- a/src/newgrf_engine.cpp
+++ b/src/newgrf_engine.cpp
@@ -366,15 +366,6 @@ static byte MapAircraftMovementAction(const Aircraft *v)
}
-/* TTDP airport types. Used to map our types to TTDPatch's */
-enum {
- ATP_TTDP_SMALL,
- ATP_TTDP_LARGE,
- ATP_TTDP_HELIPORT,
- ATP_TTDP_OILRIG,
-};
-
-
/* Vehicle Resolver Functions */
static inline const Vehicle *GRV(const ResolverObject *object)
{
@@ -608,22 +599,8 @@ static uint32 VehicleGetVariable(const ResolverObject *object, byte variable, by
const Station *st = GetTargetAirportIfValid(Aircraft::From(v));
- if (st != NULL) {
- switch (st->airport_type) {
- /* Note, Helidepot and Helistation are treated as small airports
- * as they are at ground level. */
- case AT_HELIDEPOT:
- case AT_HELISTATION:
- case AT_COMMUTER:
- case AT_SMALL: airporttype = ATP_TTDP_SMALL; break;
- case AT_METROPOLITAN:
- case AT_INTERNATIONAL:
- case AT_INTERCON:
- case AT_LARGE: airporttype = ATP_TTDP_LARGE; break;
- case AT_HELIPORT: airporttype = ATP_TTDP_HELIPORT; break;
- case AT_OILRIG: airporttype = ATP_TTDP_OILRIG; break;
- default: airporttype = ATP_TTDP_LARGE; break;
- }
+ if (st != NULL && st->airport.tile != INVALID_TILE) {
+ airporttype = st->GetAirportSpec()->ttd_airport_type;
}
return (altitude << 8) | airporttype;
diff --git a/src/newgrf_station.cpp b/src/newgrf_station.cpp
index 26361f3fd..8dafa629f 100644
--- a/src/newgrf_station.cpp
+++ b/src/newgrf_station.cpp
@@ -524,7 +524,7 @@ uint32 Station::GetNewGRFVariable(const ResolverObject *object, byte variable, b
}
case 0x8A: return this->had_vehicle_of_type;
- case 0xF1: return this->airport_type;
+ case 0xF1: return (this->airport.tile != INVALID_TILE) ? this->GetAirportSpec()->ttd_airport_type : ATP_TTDP_LARGE;
case 0xF2: return (this->truck_stops != NULL) ? this->truck_stops->status : 0;
case 0xF3: return (this->bus_stops != NULL) ? this->bus_stops->status : 0;
case 0xF6: return this->airport_flags;
diff --git a/src/table/airport_defaults.h b/src/table/airport_defaults.h
index 3bfd73cf3..97870522a 100644
--- a/src/table/airport_defaults.h
+++ b/src/table/airport_defaults.h
@@ -377,27 +377,28 @@ static AirportTileTable *_tile_table_helistation[] = {
#undef MKEND
/** General AirportSpec definition. */
-#define AS_GENERIC(att, depot_tbl, num_depots, size_x, size_y, noise, catchment, min_year, max_year) \
- {att, depot_tbl, num_depots, size_x, size_y, noise, catchment, min_year, max_year}
+#define AS_GENERIC(att, depot_tbl, num_depots, size_x, size_y, noise, catchment, min_year, max_year, ttdpatch_type) \
+ {att, depot_tbl, num_depots, size_x, size_y, noise, catchment, min_year, max_year, ttdpatch_type}
/** AirportSpec definition for airports without any depot. */
-#define AS_ND(ap_name, size_x, size_y, min_year, max_year, catchment, noise) \
- AS_GENERIC(_tile_table_##ap_name, NULL, 0, size_x, size_y, noise, catchment, min_year, max_year)
+#define AS_ND(ap_name, size_x, size_y, min_year, max_year, catchment, noise, ttdpatch_type) \
+ AS_GENERIC(_tile_table_##ap_name, NULL, 0, size_x, size_y, noise, catchment, min_year, max_year, ttdpatch_type)
/** AirportSpec definition for airports with at least one depot. */
-#define AS(ap_name, size_x, size_y, min_year, max_year, catchment, noise) \
- AS_GENERIC(_tile_table_##ap_name, _airport_depots_##ap_name, lengthof(_airport_depots_##ap_name), size_x, size_y, noise, catchment, min_year, max_year)
+#define AS(ap_name, size_x, size_y, min_year, max_year, catchment, noise, ttdpatch_type) \
+ AS_GENERIC(_tile_table_##ap_name, _airport_depots_##ap_name, lengthof(_airport_depots_##ap_name), size_x, size_y, noise, catchment, min_year, max_year, ttdpatch_type)
+/* The helidepot and helistation have ATP_TTDP_SMALL because they are at ground level */
extern const AirportSpec _origin_airport_specs[] = {
- AS(country, 4, 3, 0, 1959, 4, 3),
- AS(city, 6, 6, 1955, MAX_YEAR, 5, 5),
- AS_ND(heliport, 1, 1, 1963, MAX_YEAR, 4, 1),
- AS(metropolitan, 6, 6, 1980, MAX_YEAR, 6, 8),
- AS(international, 7, 7, 1990, MAX_YEAR, 8, 17),
- AS(commuter, 5, 4, 1983, MAX_YEAR, 4, 4),
- AS(helidepot, 2, 2, 1976, MAX_YEAR, 4, 2),
- AS(intercontinental, 9, 11, 2002, MAX_YEAR, 10, 25),
- AS(helistation, 4, 2, 1980, MAX_YEAR, 4, 3),
+ AS(country, 4, 3, 0, 1959, 4, 3, ATP_TTDP_SMALL),
+ AS(city, 6, 6, 1955, MAX_YEAR, 5, 5, ATP_TTDP_LARGE),
+ AS_ND(heliport, 1, 1, 1963, MAX_YEAR, 4, 1, ATP_TTDP_HELIPORT),
+ AS(metropolitan, 6, 6, 1980, MAX_YEAR, 6, 8, ATP_TTDP_LARGE),
+ AS(international, 7, 7, 1990, MAX_YEAR, 8, 17, ATP_TTDP_LARGE),
+ AS(commuter, 5, 4, 1983, MAX_YEAR, 4, 4, ATP_TTDP_SMALL),
+ AS(helidepot, 2, 2, 1976, MAX_YEAR, 4, 2, ATP_TTDP_SMALL),
+ AS(intercontinental, 9, 11, 2002, MAX_YEAR, 10, 25, ATP_TTDP_LARGE),
+ AS(helistation, 4, 2, 1980, MAX_YEAR, 4, 3, ATP_TTDP_SMALL),
};
assert_compile(NUM_AIRPORTS == lengthof(_origin_airport_specs));