164 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			164 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* $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_in_chain; // 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 */
 |