|
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 }; |