diff options
Diffstat (limited to 'src/airport.h')
-rw-r--r-- | src/airport.h | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/src/airport.h b/src/airport.h new file mode 100644 index 000000000..2dcbd1660 --- /dev/null +++ b/src/airport.h @@ -0,0 +1,163 @@ +/* $Id$ */ + +#ifndef AIRPORT_H +#define AIRPORT_H + +enum {MAX_TERMINALS = 10}; +enum {MAX_HELIPADS = 4}; +enum {MAX_ELEMENTS = 255}; +enum {MAX_HEADINGS = 22}; + +// Airport types +enum { + AT_SMALL = 0, + AT_LARGE = 1, + AT_HELIPORT = 2, + AT_METROPOLITAN = 3, + AT_INTERNATIONAL = 4, + AT_COMMUTER = 5, + AT_HELIDEPOT = 6, + AT_INTERCON = 7, + AT_HELISTATION = 8, + AT_OILRIG = 15 +}; + +// do not change unless you change v->subtype too. This aligns perfectly with its current setting +enum { + AIRCRAFT_ONLY = 0, + ALL = 1, + HELICOPTERS_ONLY = 2, +}; + +enum { + AMED_NOSPDCLAMP = 1 << 0, + AMED_TAKEOFF = 1 << 1, + AMED_SLOWTURN = 1 << 2, + AMED_LAND = 1 << 3, + AMED_EXACTPOS = 1 << 4, + AMED_BRAKE = 1 << 5, + AMED_HELI_RAISE = 1 << 6, + AMED_HELI_LOWER = 1 << 7, +}; + +/* Movement States on Airports (headings target) */ +enum { + TO_ALL = 0, + HANGAR = 1, + TERM1 = 2, + TERM2 = 3, + TERM3 = 4, + TERM4 = 5, + TERM5 = 6, + TERM6 = 7, + HELIPAD1 = 8, + HELIPAD2 = 9, + TAKEOFF = 10, + STARTTAKEOFF = 11, + ENDTAKEOFF = 12, + HELITAKEOFF = 13, + FLYING = 14, + LANDING = 15, + ENDLANDING = 16, + HELILANDING = 17, + HELIENDLANDING = 18, + TERM7 = 19, + TERM8 = 20, + HELIPAD3 = 21, + HELIPAD4 = 22 +}; + +// this maps the terminal to its corresponding state and block flag +// currently set for 10 terms, 4 helipads +static const byte _airport_terminal_state[] = {2, 3, 4, 5, 6, 7, 19, 20, 0, 0, 8, 9, 21, 22}; +static const byte _airport_terminal_flag[] = {0, 1, 2, 3, 4, 5, 22, 23, 0, 0, 6, 7, 24, 25}; + +/* Movement Blocks on Airports */ +// blocks (eg_airport_flags) +enum { + TERM1_block = 1 << 0, + TERM2_block = 1 << 1, + TERM3_block = 1 << 2, + TERM4_block = 1 << 3, + TERM5_block = 1 << 4, + TERM6_block = 1 << 5, + HELIPAD1_block = 1 << 6, + HELIPAD2_block = 1 << 7, + RUNWAY_IN_OUT_block = 1 << 8, + RUNWAY_IN_block = 1 << 8, + AIRPORT_BUSY_block = 1 << 8, + RUNWAY_OUT_block = 1 << 9, + TAXIWAY_BUSY_block = 1 << 10, + OUT_WAY_block = 1 << 11, + IN_WAY_block = 1 << 12, + AIRPORT_ENTRANCE_block = 1 << 13, + TERM_GROUP1_block = 1 << 14, + TERM_GROUP2_block = 1 << 15, + HANGAR2_AREA_block = 1 << 16, + TERM_GROUP2_ENTER1_block = 1 << 17, + TERM_GROUP2_ENTER2_block = 1 << 18, + TERM_GROUP2_EXIT1_block = 1 << 19, + TERM_GROUP2_EXIT2_block = 1 << 20, + PRE_HELIPAD_block = 1 << 21, + +// blocks for new airports + TERM7_block = 1 << 22, + TERM8_block = 1 << 23, + TERM9_block = 1 << 24, + HELIPAD3_block = 1 << 24, + TERM10_block = 1 << 25, + HELIPAD4_block = 1 << 25, + HANGAR1_AREA_block = 1 << 26, + OUT_WAY2_block = 1 << 27, + IN_WAY2_block = 1 << 28, + RUNWAY_IN2_block = 1 << 29, + RUNWAY_OUT2_block = 1 << 10, // note re-uses TAXIWAY_BUSY + HELIPAD_GROUP_block = 1 << 13, // note re-uses AIRPORT_ENTRANCE + OUT_WAY_block2 = 1 << 31, +// end of new blocks + + NOTHING_block = 1 << 30 +}; + +typedef struct AirportMovingData { + int x,y; + byte flag; + byte direction; +} AirportMovingData; + +// Finite sTate mAchine --> FTA +typedef struct AirportFTAClass { + byte nofelements; // number of positions the airport consists of + const byte *terminals; + const byte *helipads; + byte entry_point; // when an airplane arrives at this airport, enter it at position entry_point + byte acc_planes; // accept airplanes or helicopters or both + const TileIndexDiffC *airport_depots; // gives the position of the depots on the airports + byte nof_depots; // number of depots this airport has + struct AirportFTA *layout; // state machine for airport + byte size_x; + byte size_y; +} AirportFTAClass; + +// internal structure used in openttd - Finite sTate mAchine --> FTA +typedef struct AirportFTA { + byte position; // the position that an airplane is at + byte next_position; // next position from this position + uint32 block; // 32 bit blocks (st->airport_flags), should be enough for the most complex airports + byte heading; // heading (current orders), guiding an airplane to its target on an airport + struct AirportFTA *next; // possible extra movement choices from this position +} AirportFTA; + +void InitializeAirports(void); +void UnInitializeAirports(void); +const AirportFTAClass *GetAirport(const byte airport_type); +const AirportMovingData *GetAirportMovingData(byte airport_type, byte position); + +/** Get buildable airport bitmask. + * @return get all buildable airports at this given time, bitmasked. + * Bit 0 means the small airport is buildable, etc. + * @todo set availability of airports by year, instead of airplane + */ +uint32 GetValidAirports(void); + +#endif /* AIRPORT_H */ |