00001
00002
00003
00004
00005
00006
00007
00008
00009
00012 #ifndef AIRPORT_H
00013 #define AIRPORT_H
00014
00015 #include "direction_type.h"
00016 #include "map_type.h"
00017 #include "date_type.h"
00018
00020 enum {
00021 MAX_TERMINALS = 10,
00022 MAX_HELIPADS = 4,
00023 MAX_ELEMENTS = 255,
00024 NUM_AIRPORTTILES = 144,
00025 };
00026
00027 enum {
00028 AIRPORTTILE_NOANIM = 0xFF,
00029 };
00030
00032 enum {
00033 AT_SMALL = 0,
00034 AT_LARGE = 1,
00035 AT_HELIPORT = 2,
00036 AT_METROPOLITAN = 3,
00037 AT_INTERNATIONAL = 4,
00038 AT_COMMUTER = 5,
00039 AT_HELIDEPOT = 6,
00040 AT_INTERCON = 7,
00041 AT_HELISTATION = 8,
00042 NUM_AIRPORTS = 9,
00043 AT_OILRIG = 15,
00044 AT_DUMMY = 255
00045 };
00046
00047
00048 typedef byte StationGfx;
00049
00050 struct AirportTileTable {
00051 TileIndexDiffC ti;
00052 StationGfx gfx;
00053 };
00054
00058 struct AirportSpec {
00059 const AirportTileTable * const *table;
00060 const TileIndexDiffC *depot_table;
00061 byte nof_depots;
00062 byte size_x;
00063 byte size_y;
00064 byte noise_level;
00065 byte catchment;
00066 Year min_year;
00067 Year max_year;
00068
00069 static const AirportSpec *Get(byte type);
00070
00071 bool IsAvailable() const;
00072
00073 static AirportSpec dummy;
00074 static AirportSpec oilrig;
00075 };
00076
00077
00081 struct AirportTileSpec {
00082 StationGfx anim_next;
00083 uint8 animation_speed;
00084
00085 static const AirportTileSpec *Get(StationGfx gfx);
00086 };
00087
00088 enum {
00089 AMED_NOSPDCLAMP = 1 << 0,
00090 AMED_TAKEOFF = 1 << 1,
00091 AMED_SLOWTURN = 1 << 2,
00092 AMED_LAND = 1 << 3,
00093 AMED_EXACTPOS = 1 << 4,
00094 AMED_BRAKE = 1 << 5,
00095 AMED_HELI_RAISE = 1 << 6,
00096 AMED_HELI_LOWER = 1 << 7,
00097 AMED_HOLD = 1 << 8
00098 };
00099
00100
00101 enum {
00102 TO_ALL = 0,
00103 HANGAR = 1,
00104 TERM1 = 2,
00105 TERM2 = 3,
00106 TERM3 = 4,
00107 TERM4 = 5,
00108 TERM5 = 6,
00109 TERM6 = 7,
00110 HELIPAD1 = 8,
00111 HELIPAD2 = 9,
00112 TAKEOFF = 10,
00113 STARTTAKEOFF = 11,
00114 ENDTAKEOFF = 12,
00115 HELITAKEOFF = 13,
00116 FLYING = 14,
00117 LANDING = 15,
00118 ENDLANDING = 16,
00119 HELILANDING = 17,
00120 HELIENDLANDING = 18,
00121 TERM7 = 19,
00122 TERM8 = 20,
00123 HELIPAD3 = 21,
00124 HELIPAD4 = 22,
00125 MAX_HEADINGS = 22,
00126 };
00127
00128
00129
00130 static const uint64
00131 TERM1_block = 1ULL << 0,
00132 TERM2_block = 1ULL << 1,
00133 TERM3_block = 1ULL << 2,
00134 TERM4_block = 1ULL << 3,
00135 TERM5_block = 1ULL << 4,
00136 TERM6_block = 1ULL << 5,
00137 HELIPAD1_block = 1ULL << 6,
00138 HELIPAD2_block = 1ULL << 7,
00139 RUNWAY_IN_OUT_block = 1ULL << 8,
00140 RUNWAY_IN_block = 1ULL << 8,
00141 AIRPORT_BUSY_block = 1ULL << 8,
00142 RUNWAY_OUT_block = 1ULL << 9,
00143 TAXIWAY_BUSY_block = 1ULL << 10,
00144 OUT_WAY_block = 1ULL << 11,
00145 IN_WAY_block = 1ULL << 12,
00146 AIRPORT_ENTRANCE_block = 1ULL << 13,
00147 TERM_GROUP1_block = 1ULL << 14,
00148 TERM_GROUP2_block = 1ULL << 15,
00149 HANGAR2_AREA_block = 1ULL << 16,
00150 TERM_GROUP2_ENTER1_block = 1ULL << 17,
00151 TERM_GROUP2_ENTER2_block = 1ULL << 18,
00152 TERM_GROUP2_EXIT1_block = 1ULL << 19,
00153 TERM_GROUP2_EXIT2_block = 1ULL << 20,
00154 PRE_HELIPAD_block = 1ULL << 21,
00155
00156
00157 TERM7_block = 1ULL << 22,
00158 TERM8_block = 1ULL << 23,
00159 TERM9_block = 1ULL << 24,
00160 HELIPAD3_block = 1ULL << 24,
00161 TERM10_block = 1ULL << 25,
00162 HELIPAD4_block = 1ULL << 25,
00163 HANGAR1_AREA_block = 1ULL << 26,
00164 OUT_WAY2_block = 1ULL << 27,
00165 IN_WAY2_block = 1ULL << 28,
00166 RUNWAY_IN2_block = 1ULL << 29,
00167 RUNWAY_OUT2_block = 1ULL << 10,
00168 HELIPAD_GROUP_block = 1ULL << 13,
00169 OUT_WAY_block2 = 1ULL << 31,
00170
00171
00172 NOTHING_block = 1ULL << 30;
00173
00174 struct AirportMovingData {
00175 int16 x;
00176 int16 y;
00177 uint16 flag;
00178 DirectionByte direction;
00179 };
00180
00181 struct AirportFTAbuildup;
00182
00184 struct AirportFTAClass {
00185 public:
00186 enum Flags {
00187 AIRPLANES = 0x1,
00188 HELICOPTERS = 0x2,
00189 ALL = AIRPLANES | HELICOPTERS,
00190 SHORT_STRIP = 0x4
00191 };
00192
00193 AirportFTAClass(
00194 const AirportMovingData *moving_data,
00195 const byte *terminals,
00196 const byte *helipads,
00197 const byte *entry_points,
00198 Flags flags,
00199 const AirportFTAbuildup *apFA,
00200 byte delta_z
00201 );
00202
00203 ~AirportFTAClass();
00204
00205 const AirportMovingData *MovingData(byte position) const
00206 {
00207 assert(position < nofelements);
00208 return &moving_data[position];
00209 }
00210
00211 const AirportMovingData *moving_data;
00212 struct AirportFTA *layout;
00213 const byte *terminals;
00214 const byte *helipads;
00215 Flags flags;
00216 byte nofelements;
00217 const byte *entry_points;
00218 byte delta_z;
00219 };
00220
00221 DECLARE_ENUM_AS_BIT_SET(AirportFTAClass::Flags)
00222
00223
00224
00225 struct AirportFTA {
00226 AirportFTA *next;
00227 uint64 block;
00228 byte position;
00229 byte next_position;
00230 byte heading;
00231 };
00232
00233 void InitializeAirports();
00234 void UnInitializeAirports();
00235 const AirportFTAClass *GetAirport(const byte airport_type);
00236
00237 extern const byte * const _airport_sections[];
00238
00239 #endif