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 AIRPORT_CLOSED_block = 1ULL << 63;
00127
00129 struct AirportMovingData {
00130 int16 x;
00131 int16 y;
00132 uint16 flag;
00133 DirectionByte direction;
00134 };
00135
00136 AirportMovingData RotateAirportMovingData(const AirportMovingData *orig, Direction rotation, uint num_tiles_x, uint num_tiles_y);
00137
00138 struct AirportFTAbuildup;
00139
00141 struct AirportFTAClass {
00142 public:
00144 enum Flags {
00145 AIRPLANES = 0x1,
00146 HELICOPTERS = 0x2,
00147 ALL = AIRPLANES | HELICOPTERS,
00148 SHORT_STRIP = 0x4,
00149 };
00150
00151 AirportFTAClass(
00152 const AirportMovingData *moving_data,
00153 const byte *terminals,
00154 const byte num_helipads,
00155 const byte *entry_points,
00156 Flags flags,
00157 const AirportFTAbuildup *apFA,
00158 byte delta_z
00159 );
00160
00161 ~AirportFTAClass();
00162
00168 const AirportMovingData *MovingData(byte position) const
00169 {
00170 assert(position < nofelements);
00171 return &moving_data[position];
00172 }
00173
00174 const AirportMovingData *moving_data;
00175 struct AirportFTA *layout;
00176 const byte *terminals;
00177 const byte num_helipads;
00178 Flags flags;
00179 byte nofelements;
00180 const byte *entry_points;
00181 byte delta_z;
00182 };
00183
00184 DECLARE_ENUM_AS_BIT_SET(AirportFTAClass::Flags)
00185
00186
00187
00188 struct AirportFTA {
00189 AirportFTA *next;
00190 uint64 block;
00191 byte position;
00192 byte next_position;
00193 byte heading;
00194 };
00195
00196 const AirportFTAClass *GetAirport(const byte airport_type);
00197 byte GetVehiclePosOnBuild(TileIndex hangar_tile);
00198
00199 #endif