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 "tile_type.h"
00017
00019 static const uint MAX_TERMINALS = 8;
00020 static const uint MAX_HELIPADS = 3;
00021 static const uint MAX_ELEMENTS = 255;
00022
00023 static const uint NUM_AIRPORTTILES = 256;
00024 static const uint NEW_AIRPORTTILE_OFFSET = 74;
00025 static const uint INVALID_AIRPORTTILE = NUM_AIRPORTTILES;
00026
00028 enum AirportTypes {
00029 AT_SMALL = 0,
00030 AT_LARGE = 1,
00031 AT_HELIPORT = 2,
00032 AT_METROPOLITAN = 3,
00033 AT_INTERNATIONAL = 4,
00034 AT_COMMUTER = 5,
00035 AT_HELIDEPOT = 6,
00036 AT_INTERCON = 7,
00037 AT_HELISTATION = 8,
00038 AT_OILRIG = 9,
00039 NEW_AIRPORT_OFFSET = 10,
00040 NUM_AIRPORTS = 128,
00041 AT_INVALID = 254,
00042 AT_DUMMY = 255,
00043 };
00044
00046 enum AirportMovingDataFlags {
00047 AMED_NOSPDCLAMP = 1 << 0,
00048 AMED_TAKEOFF = 1 << 1,
00049 AMED_SLOWTURN = 1 << 2,
00050 AMED_LAND = 1 << 3,
00051 AMED_EXACTPOS = 1 << 4,
00052 AMED_BRAKE = 1 << 5,
00053 AMED_HELI_RAISE = 1 << 6,
00054 AMED_HELI_LOWER = 1 << 7,
00055 AMED_HOLD = 1 << 8
00056 };
00057
00059 enum AirportMovementStates {
00060 TO_ALL = 0,
00061 HANGAR = 1,
00062 TERM1 = 2,
00063 TERM2 = 3,
00064 TERM3 = 4,
00065 TERM4 = 5,
00066 TERM5 = 6,
00067 TERM6 = 7,
00068 HELIPAD1 = 8,
00069 HELIPAD2 = 9,
00070 TAKEOFF = 10,
00071 STARTTAKEOFF = 11,
00072 ENDTAKEOFF = 12,
00073 HELITAKEOFF = 13,
00074 FLYING = 14,
00075 LANDING = 15,
00076 ENDLANDING = 16,
00077 HELILANDING = 17,
00078 HELIENDLANDING = 18,
00079 TERM7 = 19,
00080 TERM8 = 20,
00081 HELIPAD3 = 21,
00082 MAX_HEADINGS = 21,
00083 };
00084
00086 static const uint64
00087 TERM1_block = 1ULL << 0,
00088 TERM2_block = 1ULL << 1,
00089 TERM3_block = 1ULL << 2,
00090 TERM4_block = 1ULL << 3,
00091 TERM5_block = 1ULL << 4,
00092 TERM6_block = 1ULL << 5,
00093 HELIPAD1_block = 1ULL << 6,
00094 HELIPAD2_block = 1ULL << 7,
00095 RUNWAY_IN_OUT_block = 1ULL << 8,
00096 RUNWAY_IN_block = 1ULL << 8,
00097 AIRPORT_BUSY_block = 1ULL << 8,
00098 RUNWAY_OUT_block = 1ULL << 9,
00099 TAXIWAY_BUSY_block = 1ULL << 10,
00100 OUT_WAY_block = 1ULL << 11,
00101 IN_WAY_block = 1ULL << 12,
00102 AIRPORT_ENTRANCE_block = 1ULL << 13,
00103 TERM_GROUP1_block = 1ULL << 14,
00104 TERM_GROUP2_block = 1ULL << 15,
00105 HANGAR2_AREA_block = 1ULL << 16,
00106 TERM_GROUP2_ENTER1_block = 1ULL << 17,
00107 TERM_GROUP2_ENTER2_block = 1ULL << 18,
00108 TERM_GROUP2_EXIT1_block = 1ULL << 19,
00109 TERM_GROUP2_EXIT2_block = 1ULL << 20,
00110 PRE_HELIPAD_block = 1ULL << 21,
00111
00112
00113 TERM7_block = 1ULL << 22,
00114 TERM8_block = 1ULL << 23,
00115 HELIPAD3_block = 1ULL << 24,
00116 HANGAR1_AREA_block = 1ULL << 26,
00117 OUT_WAY2_block = 1ULL << 27,
00118 IN_WAY2_block = 1ULL << 28,
00119 RUNWAY_IN2_block = 1ULL << 29,
00120 RUNWAY_OUT2_block = 1ULL << 10,
00121 HELIPAD_GROUP_block = 1ULL << 13,
00122 OUT_WAY_block2 = 1ULL << 31,
00123
00124
00125 NOTHING_block = 1ULL << 30;
00126
00128 struct AirportMovingData {
00129 int16 x;
00130 int16 y;
00131 uint16 flag;
00132 DirectionByte direction;
00133 };
00134
00135 AirportMovingData RotateAirportMovingData(const AirportMovingData *orig, Direction rotation, uint num_tiles_x, uint num_tiles_y);
00136
00137 struct AirportFTAbuildup;
00138
00140 struct AirportFTAClass {
00141 public:
00143 enum Flags {
00144 AIRPLANES = 0x1,
00145 HELICOPTERS = 0x2,
00146 ALL = AIRPLANES | HELICOPTERS,
00147 SHORT_STRIP = 0x4
00148 };
00149
00150 AirportFTAClass(
00151 const AirportMovingData *moving_data,
00152 const byte *terminals,
00153 const byte num_helipads,
00154 const byte *entry_points,
00155 Flags flags,
00156 const AirportFTAbuildup *apFA,
00157 byte delta_z
00158 );
00159
00160 ~AirportFTAClass();
00161
00167 const AirportMovingData *MovingData(byte position) const
00168 {
00169 assert(position < nofelements);
00170 return &moving_data[position];
00171 }
00172
00173 const AirportMovingData *moving_data;
00174 struct AirportFTA *layout;
00175 const byte *terminals;
00176 const byte num_helipads;
00177 Flags flags;
00178 byte nofelements;
00179 const byte *entry_points;
00180 byte delta_z;
00181 };
00182
00183 DECLARE_ENUM_AS_BIT_SET(AirportFTAClass::Flags)
00184
00185
00186
00187 struct AirportFTA {
00188 AirportFTA *next;
00189 uint64 block;
00190 byte position;
00191 byte next_position;
00192 byte heading;
00193 };
00194
00195 const AirportFTAClass *GetAirport(const byte airport_type);
00196 byte GetVehiclePosOnBuild(TileIndex hangar_tile);
00197
00198 #endif