tron@2186: /* $Id$ */ tron@2186: truelight@0: #ifndef AIRPORT_H truelight@0: #define AIRPORT_H truelight@0: truelight@0: enum {MAX_TERMINALS = 6}; truelight@0: enum {MAX_HELIPADS = 2}; peter1138@3701: enum {MAX_ELEMENTS = 255}; peter1138@3701: enum {MAX_HEADINGS = 18}; truelight@0: truelight@0: // Airport types truelight@0: enum { peter1138@3697: AT_SMALL = 0, peter1138@3697: AT_LARGE = 1, peter1138@3697: AT_HELIPORT = 2, peter1138@3697: AT_METROPOLITAN = 3, truelight@0: AT_INTERNATIONAL = 4, peter1138@3697: AT_OILRIG = 15, truelight@0: }; truelight@0: truelight@0: // do not change unless you change v->subtype too. This aligns perfectly with its current setting truelight@0: enum { peter1138@3697: AIRCRAFT_ONLY = 0, peter1138@3697: ALL = 1, peter1138@3697: HELICOPTERS_ONLY = 2, truelight@0: }; truelight@0: peter1138@3701: enum { peter1138@3701: AMED_NOSPDCLAMP = 1<<0, peter1138@3701: AMED_TAKEOFF = 1<<1, peter1138@3701: AMED_SLOWTURN = 1<<2, peter1138@3701: AMED_LAND = 1<<3, peter1138@3701: AMED_EXACTPOS = 1<<4, peter1138@3701: AMED_BRAKE = 1<<5, peter1138@3701: AMED_HELI_RAISE = 1<<6, peter1138@3701: AMED_HELI_LOWER = 1<<7, peter1138@3701: }; peter1138@3701: peter1138@3701: /* Movement States on Airports (headings target) */ peter1138@3701: enum { peter1138@3701: TO_ALL, peter1138@3701: HANGAR, peter1138@3701: TERM1, peter1138@3701: TERM2, peter1138@3701: TERM3, peter1138@3701: TERM4, peter1138@3701: TERM5, peter1138@3701: TERM6, peter1138@3701: HELIPAD1, peter1138@3701: HELIPAD2, peter1138@3701: TAKEOFF, peter1138@3701: STARTTAKEOFF, peter1138@3701: ENDTAKEOFF, peter1138@3701: HELITAKEOFF, peter1138@3701: FLYING, peter1138@3701: LANDING, peter1138@3701: ENDLANDING, peter1138@3701: HELILANDING, peter1138@3701: HELIENDLANDING, peter1138@3701: }; peter1138@3701: peter1138@3701: /* Movement Blocks on Airports */ peter1138@3701: // blocks (eg_airport_flags) peter1138@3701: enum { peter1138@3701: TERM1_block = 1 << 0, peter1138@3701: TERM2_block = 1 << 1, peter1138@3701: TERM3_block = 1 << 2, peter1138@3701: TERM4_block = 1 << 3, peter1138@3701: TERM5_block = 1 << 4, peter1138@3701: TERM6_block = 1 << 5, peter1138@3701: HELIPAD1_block = 1 << 6, peter1138@3701: HELIPAD2_block = 1 << 7, peter1138@3701: RUNWAY_IN_OUT_block = 1 << 8, peter1138@3701: RUNWAY_IN_block = 1 << 8, peter1138@3701: AIRPORT_BUSY_block = 1 << 8, peter1138@3701: RUNWAY_OUT_block = 1 << 9, peter1138@3701: TAXIWAY_BUSY_block = 1 << 10, peter1138@3701: OUT_WAY_block = 1 << 11, peter1138@3701: IN_WAY_block = 1 << 12, peter1138@3701: AIRPORT_ENTRANCE_block = 1 << 13, peter1138@3701: TERM_GROUP1_block = 1 << 14, peter1138@3701: TERM_GROUP2_block = 1 << 15, peter1138@3701: HANGAR2_AREA_block = 1 << 16, peter1138@3701: TERM_GROUP2_ENTER1_block = 1 << 17, peter1138@3701: TERM_GROUP2_ENTER2_block = 1 << 18, peter1138@3701: TERM_GROUP2_EXIT1_block = 1 << 19, peter1138@3701: TERM_GROUP2_EXIT2_block = 1 << 20, peter1138@3701: PRE_HELIPAD_block = 1 << 21, peter1138@3701: NOTHING_block = 1 << 30, peter1138@3701: }; peter1138@3701: peter1138@3701: typedef struct AirportMovingData { peter1138@3701: int x,y; peter1138@3701: byte flag; peter1138@3701: byte direction; peter1138@3701: } AirportMovingData; peter1138@3701: truelight@0: // Finite sTate mAchine --> FTA truelight@0: typedef struct AirportFTAClass { peter1138@3697: byte nofelements; // number of positions the airport consists of celestar@950: const byte *terminals; celestar@950: const byte *helipads; peter1138@3697: byte entry_point; // when an airplane arrives at this airport, enter it at position entry_point peter1138@3697: byte acc_planes; // accept airplanes or helicopters or both peter1138@3697: const TileIndexDiffC *airport_depots; // gives the position of the depots on the airports peter1138@3697: byte nof_depots; // number of depots this airport has peter1138@3697: struct AirportFTA *layout; // state machine for airport tron@3876: byte size_x; tron@3876: byte size_y; truelight@0: } AirportFTAClass; truelight@0: truelight@0: // internal structure used in openttd - Finite sTate mAchine --> FTA truelight@0: typedef struct AirportFTA { peter1138@3697: byte position; // the position that an airplane is at peter1138@3697: byte next_position; // next position from this position peter1138@3697: uint32 block; // 32 bit blocks (st->airport_flags), should be enough for the most complex airports peter1138@3697: byte heading; // heading (current orders), guiding an airplane to its target on an airport peter1138@3697: struct AirportFTA *next_in_chain; // possible extra movement choices from this position truelight@0: } AirportFTA; truelight@0: tron@1093: void InitializeAirports(void); tron@1093: void UnInitializeAirports(void); truelight@0: const AirportFTAClass* GetAirport(const byte airport_type); peter1138@3701: const AirportMovingData *GetAirportMovingData(byte airport_type, byte position); truelight@0: Darkvater@1784: /** Get buildable airport bitmask. Darkvater@1784: * @return get all buildable airports at this given time, bitmasked. Darkvater@1784: * Bit 0 means the small airport is buildable, etc. Darkvater@1784: * @todo set availability of airports by year, instead of airplane Darkvater@1784: */ tron@2159: uint32 GetValidAirports(void); Darkvater@1784: truelight@0: #endif /* AIRPORT_H */