Files @ r4381:c965d1f3016a
Branch filter:

Location: cpp/openttd-patchpack/source/airport.h - annotation

belugas
(svn r6131) -Codechange : Complete all missing _ttdpatch_flags entries
-Feature : both unifiedmaglevmode are now set.
Maglev and monorail are not allowed to run on each other tracks and will not be.
Setting those flags will allow grfsets as the Norvegian one to be loaded
-Codechange : link the TTDPatch's irregularstations with OTTD's nonuniform_stations
-Codechange : Reformat the whole array (thanks Rubidium, it sure looks better now)
r2186:5ee653b1b5e1
r2186:5ee653b1b5e1
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r3701:4907476dec3f
r4344:bff007ae1fd1
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4059:35d2ee7000b3
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r3697:ba67faa5279d
r3697:ba67faa5279d
r3697:ba67faa5279d
r0:d63b455452f6
r0:d63b455452f6
r3701:4907476dec3f
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r3701:4907476dec3f
r3701:4907476dec3f
r3701:4907476dec3f
r3701:4907476dec3f
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4059:35d2ee7000b3
r4059:35d2ee7000b3
r4059:35d2ee7000b3
r4059:35d2ee7000b3
r4059:35d2ee7000b3
r4059:35d2ee7000b3
r4059:35d2ee7000b3
r4059:35d2ee7000b3
r4059:35d2ee7000b3
r4059:35d2ee7000b3
r4059:35d2ee7000b3
r4059:35d2ee7000b3
r4059:35d2ee7000b3
r3701:4907476dec3f
r3701:4907476dec3f
r4059:35d2ee7000b3
r4059:35d2ee7000b3
r4059:35d2ee7000b3
r4059:35d2ee7000b3
r4059:35d2ee7000b3
r3701:4907476dec3f
r3701:4907476dec3f
r3701:4907476dec3f
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r3701:4907476dec3f
r3701:4907476dec3f
r3701:4907476dec3f
r3701:4907476dec3f
r3701:4907476dec3f
r3701:4907476dec3f
r3701:4907476dec3f
r3701:4907476dec3f
r3701:4907476dec3f
r3701:4907476dec3f
r3701:4907476dec3f
r3701:4907476dec3f
r4059:35d2ee7000b3
r4059:35d2ee7000b3
r4059:35d2ee7000b3
r4059:35d2ee7000b3
r4059:35d2ee7000b3
r4059:35d2ee7000b3
r4059:35d2ee7000b3
r4059:35d2ee7000b3
r4059:35d2ee7000b3
r4059:35d2ee7000b3
r4059:35d2ee7000b3
r4059:35d2ee7000b3
r4059:35d2ee7000b3
r4059:35d2ee7000b3
r4059:35d2ee7000b3
r4059:35d2ee7000b3
r4059:35d2ee7000b3
r4059:35d2ee7000b3
r3701:4907476dec3f
r3701:4907476dec3f
r3701:4907476dec3f
r3701:4907476dec3f
r3701:4907476dec3f
r3701:4907476dec3f
r3701:4907476dec3f
r3701:4907476dec3f
r0:d63b455452f6
r0:d63b455452f6
r3697:ba67faa5279d
r950:cf7c106c0568
r950:cf7c106c0568
r3697:ba67faa5279d
r3697:ba67faa5279d
r3697:ba67faa5279d
r3697:ba67faa5279d
r3697:ba67faa5279d
r3876:7e1a3ac6cbb4
r3876:7e1a3ac6cbb4
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r3697:ba67faa5279d
r3697:ba67faa5279d
r3697:ba67faa5279d
r3697:ba67faa5279d
r3697:ba67faa5279d
r0:d63b455452f6
r0:d63b455452f6
r1093:18f56ef2d029
r1093:18f56ef2d029
r4171:bf306290d87e
r3701:4907476dec3f
r0:d63b455452f6
r1784:15b805156766
r1784:15b805156766
r1784:15b805156766
r1784:15b805156766
r1784:15b805156766
r2159:2c706fe6b0a7
r1784:15b805156766
r0:d63b455452f6
/* $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 */