tron@2186: /* $Id$ */ tron@2186: belugas@6443: /** @file airport.h Various declarations for airports */ belugas@6443: truelight@0: #ifndef AIRPORT_H truelight@0: #define AIRPORT_H truelight@0: rubidium@6853: #include "fsmport.h" rubidium@6818: #include rubidium@5838: richk@6856: typedef FSMCommand AirportFTA; rubidium@6853: typedef FSMPortMovingData AirportMovingData; rubidium@6853: richk@6739: enum {MAX_TERMINALS = 36}; richk@6739: enum {MAX_HELIPADS = 24}; peter1138@3701: enum {MAX_ELEMENTS = 255}; richk@6715: enum {MAX_HEADINGS = 30}; truelight@0: truelight@0: // Airport types truelight@0: enum { rubidium@4344: AT_SMALL = 0, rubidium@4344: AT_LARGE = 1, rubidium@4344: AT_HELIPORT = 2, rubidium@4344: AT_METROPOLITAN = 3, rubidium@4344: AT_INTERNATIONAL = 4, rubidium@4344: AT_COMMUTER = 5, rubidium@4344: AT_HELIDEPOT = 6, rubidium@4344: AT_INTERCON = 7, rubidium@4344: AT_HELISTATION = 8, richk@6719: AT_OILRIG = 15, richk@6719: AT_DUMMY = 255 truelight@0: }; truelight@0: rubidium@6837: /* Airport movements & speeds */ rubidium@6837: enum { rubidium@6837: AMED_EXACTPOS = 1 << 0, rubidium@6837: AMED_NOSPDCLAMP = 1 << 4, rubidium@6837: AMED_SLOWTURN = 1 << 5, rubidium@6837: AMED_BRAKE = 1 << 6, rubidium@6837: AMED_HOLD = 1 << 7, rubidium@6837: AMED_LAND = 1 << 8, rubidium@6837: AMED_HELI_RAISE = 1 << 8, rubidium@6837: AMED_TAKEOFF = 1 << 8, rubidium@6837: AMED_HELI_LOWER = 1 << 8, rubidium@6837: }; rubidium@6837: rubidium@6837: /* Movement States on Airports (headings target) */ rubidium@6837: enum { rubidium@6837: TO_ALL = 0x00, rubidium@6837: FIRST_TERMINAL = 0x01, rubidium@6837: LAST_TERMINAL = 0x24, rubidium@6837: FIRST_HELIPAD = 0x25, rubidium@6837: LAST_HELIPAD = 0x3C, rubidium@6837: HANGAR = 0x40, rubidium@6837: TAKEOFF = 0x41, rubidium@6837: STARTTAKEOFF = 0x42, rubidium@6837: ENDTAKEOFF = 0x43, rubidium@6837: LANDING = 0x44, rubidium@6837: ENDLANDING = 0x45, richk@6869: SMALLHANGAR = 0x48, richk@6869: SMALLTAKEOFF = 0x49, /* Only used in movement command choices. If used as the heading in the first command element, treated as TAKEOFF. rubidium@6837: * This is best placed on the TAKEOFF line at the start of the runway. The aircraft will make the acceleration noise, rubidium@6837: * and then you give the instruction of where to go to for the SHORTTAKEOFF instruction sequence. eg.: rubidium@6837: * { 40, TAKEOFF, RUNWAY_OUT_block, 0 }, { 40, SHORTTAKEOFF, RUNWAY_OUT_block2, 42 }, { 40, 0, RUNWAY_OUT_block2, 41 }, rubidium@6837: */ richk@6869: SMALLSTARTTAKEOFF = 0x4A, richk@6869: SMALLENDTAKEOFF = 0x4B, richk@6869: SMALLLANDING = 0x4C, richk@6869: SMALLENDLANDING = 0x4D, rubidium@6837: HELITAKEOFF = 0x51, rubidium@6837: HELIENDTAKEOFF = 0x53, rubidium@6837: HELILANDING = 0x54, rubidium@6837: HELIENDLANDING = 0x55, richk@6845: CHOOSEHELIPAD = 0x7D, richk@6845: CHOOSETERMINAL = 0x7E, rubidium@6837: FLYING = 0x7F, rubidium@6837: }; rubidium@5838: truelight@0: // Finite sTate mAchine --> FTA rubidium@6853: struct AirportFTAClass : FSMPortClass { rubidium@6853: public: rubidium@6854: static AirportFTAClass *oil_rig; ///< "Special" holding pattern used for oil rigs. rubidium@6854: static AirportFTAClass *dummy; ///< A dummy holding pattern to be used when an airport has been removed, but the order to go to the airport has not been removed. rubidium@6854: rubidium@6853: enum Flags { rubidium@6853: AIRPLANES = 0x1, rubidium@6853: HELICOPTERS = 0x2, rubidium@6853: ALL = AIRPLANES | HELICOPTERS, rubidium@6853: SHORT_STRIP = 0x4, rubidium@6853: SEAPLANES = 0x8 rubidium@6853: }; tron@6350: rubidium@6854: AirportFTAClass(FSMportsSpec *spec) : FSMPortClass(spec), terminals(NULL), helipads(NULL), flags((Flags)0), entry_points(NULL) {} tron@6183: rubidium@6853: ~AirportFTAClass(); tron@6183: richk@6737: byte *terminals; richk@6737: byte *helipads; tron@6350: Flags flags; richk@6737: byte *entry_points; ///< when an airplane arrives at this airport, enter it at position entry_point, index depends on direction rubidium@6574: }; truelight@0: tron@6351: DECLARE_ENUM_AS_BIT_SET(AirportFTAClass::Flags) tron@6351: rubidium@6818: /** rubidium@6818: * Get a list of currently available airports. rubidium@6818: * @return the list with available airports. rubidium@6818: * @note return is "class index" << 8 | "index within class" Darkvater@1784: */ rubidium@6818: std::list GetAvailableAirports(); Darkvater@1784: truelight@0: #endif /* AIRPORT_H */