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