(svn r9507) [NewGRF_ports] -Codechange: Moved airport state definitions into their own separate file to permit better logical grouping of state machine related data & code.
/* $Id$ */
/** @file airport_states.h Defines values used in airport state machines */
/***************************
* This include defines the Movement States, Movement Speeds,
* and Blocks for the airport Finite State Machines.
***************************/
/* Airport movements & speeds */
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,
AMED_HOLD = 1 << 8,
};
/* 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,
TERM9 = 23,
TERM10 = 24,
TERM11 = 25,
TERM12 = 26,
SHORTTAKEOFF = 27, /* Only used in movement command choices. If used as the heading in the first command element, treated as TAKEOFF.
* This is best placed on the TAKEOFF line at the start of the runway. The aircraft will make the acceleration noise,
* and then you give the instruction of where to go to for the SHORTTAKEOFF instruction sequence. eg.:
* { 40, TAKEOFF, RUNWAY_OUT_block, 0 }, { 40, SHORTTAKEOFF, RUNWAY_OUT_block2, 42 }, { 40, 0, RUNWAY_OUT_block2, 41 },
*/
};
/* Movement Blocks on Airports */
// blocks (eg_airport_flags)
static const uint64
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,
HELIPAD3_block = 1 << 24,
HELIPAD4_block = 1 << 25,
HANGAR1_AREA_block = 1 << 26,
OUT_WAY2_block = 1 << 27,
IN_WAY2_block = 1 << 28,
RUNWAY_IN2_block = 1 << 29,
OUT_WAY_block2 = 1ULL << 31,
// re-used names
RUNWAY_OUT2_block = 1 << 10, // re-uses TAXIWAY_BUSY
HELIPAD_GROUP_block = 1 << 13, // re-uses AIRPORT_ENTRANCE
HELIPAD_ENTER_block = 1 << 17, // re-uses TERM_GROUP2_ENTER1_block
TW1_block = 1 << 17, // re-uses TERM_GROUP2_ENTER1_block
TW2_block = 1 << 18, // re-uses TERM_GROUP2_ENTER2_block
TW3_block = 1 << 19, // re-uses TERM_GROUP2_EXIT1_block
TW4_block = 1 << 20, // re-uses TERM_GROUP2_EXIT2_block
RWX_block1 = 1 << 11, // re-uses OUT_WAY_block
RWX_block2 = 1 << 12, // re-uses IN_WAY_block
RWX_block3 = 1 << 27, // re-uses OUT_WAY2_block
RWX_block4 = 1 << 28, // re-uses IN_WAY2_block
// high byte blocks
TERM9_block = 1ULL << 32,
TERM10_block = 1ULL << 33,
TERM11_block = 1ULL << 34,
TERM12_block = 1ULL << 35,
TERM_GROUP3_block = 1ULL << 36,
TERM_GROUP4_block = 1ULL << 37,
RUNWAY_OUT_block2 = 1ULL << 38,
RUNWAY_OUT2_block2 = 1ULL << 39,
TW5_block = 1ULL << 40,
TW6_block = 1ULL << 41,
TW7_block = 1ULL << 42,
TW8_block = 1ULL << 43,
TW9_block = 1ULL << 44,
TW10_block = 1ULL << 45,
TW11_block = 1ULL << 46,
TW12_block = 1ULL << 47,
TW13_block = 1ULL << 48,
RW1_APPROACH = 1ULL << 49,
RW2_APPROACH = 1ULL << 50,
// Special blocks
HOLD = 1ULL << 63,
NOTHING_block = 1 << 30;
static const uint64 NOHOLD = ~HOLD;
/* Cross reference between terminal states and their corresponding reservation blocks.
* Originally OTTD assumed the first 6 states were TERMs 1-6, and HELIs1-2 were 7 & 8.
* After the introduction of the Intercontinental airport, this assumption no longer held.
* This table allows the blocks and states to change independently, so a new TERM state
* can be anywhere in the state list, and its corresponding block can be anywhere in the
* block list.
* (based on _airport_terminal_state[] removed from aircraft_cmd.cpp, with numbers un-magicked)
*/
typedef struct AirportTerminal {
byte state; // the terminal state/target heading
uint64 block; // the block that reserves that terminal
} AirportTerminal;
// currently set for 12 terms, 4 helipads
static const AirportTerminal _airport_terminals[MAX_TERMINALS + MAX_HELIPADS] = {
{ TERM1, TERM1_block },
{ TERM2, TERM2_block },
{ TERM3, TERM3_block },
{ TERM4, TERM4_block },
{ TERM5, TERM5_block },
{ TERM6, TERM6_block },
{ TERM7, TERM7_block },
{ TERM8, TERM8_block },
{ TERM9, TERM9_block },
{ TERM10, TERM10_block },
{ TERM11, TERM11_block },
{ TERM12, TERM12_block },
{ HELIPAD1, HELIPAD1_block },
{ HELIPAD2, HELIPAD2_block },
{ HELIPAD3, HELIPAD3_block },
{ HELIPAD4, HELIPAD4_block },
};