src/airport_states.h
branchNewGRF_ports
changeset 6715 ce1614834bc3
child 6716 bbe3f6d2dcaf
equal deleted inserted replaced
6714:42fa878a14fb 6715:ce1614834bc3
       
     1 /* $Id$ */
       
     2 
       
     3 /** @file airport_states.h Defines values used in airport state machines */
       
     4 
       
     5 /***************************
       
     6  * This include defines the Movement States, Movement Speeds,
       
     7  * and Blocks for the airport Finite State Machines.
       
     8  ***************************/
       
     9 
       
    10 /* Airport movements & speeds */
       
    11 enum {
       
    12 	AMED_NOSPDCLAMP = 1 << 0,
       
    13 	AMED_TAKEOFF    = 1 << 1,
       
    14 	AMED_SLOWTURN   = 1 << 2,
       
    15 	AMED_LAND       = 1 << 3,
       
    16 	AMED_EXACTPOS   = 1 << 4,
       
    17 	AMED_BRAKE      = 1 << 5,
       
    18 	AMED_HELI_RAISE = 1 << 6,
       
    19 	AMED_HELI_LOWER = 1 << 7,
       
    20 	AMED_HOLD       = 1 << 8,
       
    21 };
       
    22 
       
    23 /* Movement States on Airports (headings target) */
       
    24 enum {
       
    25 	TO_ALL         =  0,
       
    26 	HANGAR         =  1,
       
    27 	TERM1          =  2,
       
    28 	TERM2          =  3,
       
    29 	TERM3          =  4,
       
    30 	TERM4          =  5,
       
    31 	TERM5          =  6,
       
    32 	TERM6          =  7,
       
    33 	HELIPAD1       =  8,
       
    34 	HELIPAD2       =  9,
       
    35 	TAKEOFF        = 10,
       
    36 	STARTTAKEOFF   = 11,
       
    37 	ENDTAKEOFF     = 12,
       
    38 	HELITAKEOFF    = 13,
       
    39 	FLYING         = 14,
       
    40 	LANDING        = 15,
       
    41 	ENDLANDING     = 16,
       
    42 	HELILANDING    = 17,
       
    43 	HELIENDLANDING = 18,
       
    44 	TERM7          = 19,
       
    45 	TERM8          = 20,
       
    46 	HELIPAD3       = 21,
       
    47 	HELIPAD4       = 22,
       
    48 	TERM9          = 23,
       
    49 	TERM10         = 24,
       
    50 	TERM11         = 25,
       
    51 	TERM12         = 26,
       
    52 	SHORTTAKEOFF   = 27,  /* Only used in movement command choices. If used as the heading in the first command element, treated as TAKEOFF.
       
    53 						   * This is best placed on the TAKEOFF line at the start of the runway. The aircraft will make the acceleration noise,
       
    54 						   * and then you give the instruction of where to go to for the SHORTTAKEOFF instruction sequence. eg.:
       
    55 						   * { 40, TAKEOFF, RUNWAY_OUT_block, 0 }, { 40, SHORTTAKEOFF, RUNWAY_OUT_block2, 42 }, { 40, 0, RUNWAY_OUT_block2, 41 },
       
    56 						   */
       
    57 };
       
    58 
       
    59 /* Movement Blocks on Airports */
       
    60 // blocks (eg_airport_flags)
       
    61 static const uint64
       
    62 	TERM1_block              = 1 <<  0,
       
    63 	TERM2_block              = 1 <<  1,
       
    64 	TERM3_block              = 1 <<  2,
       
    65 	TERM4_block              = 1 <<  3,
       
    66 	TERM5_block              = 1 <<  4,
       
    67 	TERM6_block              = 1 <<  5,
       
    68 	HELIPAD1_block           = 1 <<  6,
       
    69 	HELIPAD2_block           = 1 <<  7,
       
    70 	RUNWAY_IN_OUT_block      = 1 <<  8,
       
    71 	RUNWAY_IN_block          = 1 <<  8,
       
    72 	AIRPORT_BUSY_block       = 1 <<  8,
       
    73 	RUNWAY_OUT_block         = 1 <<  9,
       
    74 	TAXIWAY_BUSY_block       = 1 << 10,
       
    75 	OUT_WAY_block            = 1 << 11,
       
    76 	IN_WAY_block             = 1 << 12,
       
    77 	AIRPORT_ENTRANCE_block   = 1 << 13,
       
    78 	TERM_GROUP1_block        = 1 << 14,
       
    79 	TERM_GROUP2_block        = 1 << 15,
       
    80 	HANGAR2_AREA_block       = 1 << 16,
       
    81 	TERM_GROUP2_ENTER1_block = 1 << 17,
       
    82 	TERM_GROUP2_ENTER2_block = 1 << 18,
       
    83 	TERM_GROUP2_EXIT1_block  = 1 << 19,
       
    84 	TERM_GROUP2_EXIT2_block  = 1 << 20,
       
    85 	PRE_HELIPAD_block        = 1 << 21,
       
    86 
       
    87 // blocks for new airports
       
    88 	TERM7_block              = 1 << 22,
       
    89 	TERM8_block              = 1 << 23,
       
    90 	HELIPAD3_block           = 1 << 24,
       
    91 	HELIPAD4_block           = 1 << 25,
       
    92 	HANGAR1_AREA_block       = 1 << 26,
       
    93 	OUT_WAY2_block           = 1 << 27,
       
    94 	IN_WAY2_block            = 1 << 28,
       
    95 	RUNWAY_IN2_block         = 1 << 29,
       
    96 	OUT_WAY_block2           = 1ULL << 31,
       
    97 
       
    98 // re-used names
       
    99 	RUNWAY_OUT2_block        = 1 << 10,   // re-uses TAXIWAY_BUSY
       
   100 	HELIPAD_GROUP_block      = 1 << 13,   // re-uses AIRPORT_ENTRANCE
       
   101 	HELIPAD_ENTER_block      = 1 << 17,   // re-uses TERM_GROUP2_ENTER1_block
       
   102 	TW1_block                = 1 << 17,   // re-uses TERM_GROUP2_ENTER1_block
       
   103 	TW2_block                = 1 << 18,   // re-uses TERM_GROUP2_ENTER2_block
       
   104 	TW3_block                = 1 << 19,   // re-uses TERM_GROUP2_EXIT1_block
       
   105 	TW4_block                = 1 << 20,   // re-uses TERM_GROUP2_EXIT2_block
       
   106 	RWX_block1               = 1 << 11,   // re-uses OUT_WAY_block
       
   107 	RWX_block2               = 1 << 12,   // re-uses IN_WAY_block
       
   108 	RWX_block3               = 1 << 27,   // re-uses OUT_WAY2_block
       
   109 	RWX_block4               = 1 << 28,   // re-uses IN_WAY2_block
       
   110 
       
   111 // high byte blocks
       
   112 	TERM9_block              = 1ULL << 32,
       
   113 	TERM10_block             = 1ULL << 33,
       
   114 	TERM11_block             = 1ULL << 34,
       
   115 	TERM12_block             = 1ULL << 35,
       
   116 	TERM_GROUP3_block        = 1ULL << 36,
       
   117 	TERM_GROUP4_block        = 1ULL << 37,
       
   118 	RUNWAY_OUT_block2        = 1ULL << 38,
       
   119 	RUNWAY_OUT2_block2       = 1ULL << 39,
       
   120 	TW5_block                = 1ULL << 40,
       
   121 	TW6_block                = 1ULL << 41,
       
   122 	TW7_block                = 1ULL << 42,
       
   123 	TW8_block                = 1ULL << 43,
       
   124 	TW9_block                = 1ULL << 44,
       
   125 	TW10_block               = 1ULL << 45,
       
   126 	TW11_block               = 1ULL << 46,
       
   127 	TW12_block               = 1ULL << 47,
       
   128 	TW13_block               = 1ULL << 48,
       
   129 	RW1_APPROACH             = 1ULL << 49,
       
   130 	RW2_APPROACH             = 1ULL << 50,
       
   131 
       
   132 // Special blocks
       
   133 	HOLD                     = 1ULL << 63,
       
   134 	NOTHING_block            = 1 << 30;
       
   135 
       
   136 static const uint64 NOHOLD = ~HOLD;
       
   137 
       
   138 /* Cross reference between terminal states and their corresponding reservation blocks.
       
   139  * Originally OTTD assumed the first 6 states were TERMs 1-6, and HELIs1-2 were 7 & 8.
       
   140  * After the introduction of the Intercontinental airport, this assumption no longer held.
       
   141  * This table allows the blocks and states to change independently, so a new TERM state
       
   142  * can be anywhere in the state list, and its corresponding block can be anywhere in the
       
   143  * block list.
       
   144  * (based on _airport_terminal_state[] removed from aircraft_cmd.cpp, with numbers un-magicked)
       
   145  */
       
   146 
       
   147 typedef struct AirportTerminal {
       
   148 	byte state;   // the terminal state/target heading
       
   149 	uint64 block; // the block that reserves that terminal
       
   150 } AirportTerminal;
       
   151 
       
   152 // currently set for 12 terms, 4 helipads
       
   153 static const AirportTerminal _airport_terminals[MAX_TERMINALS + MAX_HELIPADS] = {
       
   154 	{ TERM1,     TERM1_block    },
       
   155 	{ TERM2,     TERM2_block    },
       
   156 	{ TERM3,     TERM3_block    },
       
   157 	{ TERM4,     TERM4_block    },
       
   158 	{ TERM5,     TERM5_block    },
       
   159 	{ TERM6,     TERM6_block    },
       
   160 	{ TERM7,     TERM7_block    },
       
   161 	{ TERM8,     TERM8_block    },
       
   162 	{ TERM9,     TERM9_block    },
       
   163 	{ TERM10,    TERM10_block   },
       
   164 	{ TERM11,    TERM11_block   },
       
   165 	{ TERM12,    TERM12_block   },
       
   166 	{ HELIPAD1,  HELIPAD1_block },
       
   167 	{ HELIPAD2,  HELIPAD2_block },
       
   168 	{ HELIPAD3,  HELIPAD3_block },
       
   169 	{ HELIPAD4,  HELIPAD4_block },
       
   170 };