author | belugas |
Sun, 15 Jun 2008 02:48:25 +0000 | |
changeset 10965 | a2b5f6f9be0c |
parent 10775 | 7061477bfbcf |
permissions | -rw-r--r-- |
2186 | 1 |
/* $Id$ */ |
2 |
||
10429
1b99254f9607
(svn r12971) -Documentation: add @file in files that missed them and add something more than whitespace as description of files that don't have a description.
rubidium
parents:
8766
diff
changeset
|
3 |
/** @file airport.cpp Functions related to airports. */ |
6443
b8f06d8eb7be
(svn r8853) -Cleanup: doxygen changes. Correct forgotten c files to cpp files with the @file tag as well as a few general comments style
belugas
parents:
6413
diff
changeset
|
4 |
|
0 | 5 |
#include "stdafx.h" |
1891
92a3b0aa0946
(svn r2397) - CodeChange: rename all "ttd" files to "openttd" files.
Darkvater
parents:
1299
diff
changeset
|
6 |
#include "openttd.h" |
1299
0a6510cc889b
(svn r1803) Move debugging stuff into files of it's own
tron
parents:
1093
diff
changeset
|
7 |
#include "debug.h" |
0 | 8 |
#include "airport.h" |
3701
13911c5df3e7
(svn r4642) - Codechange: reorganise airport.h and airport_movement.h to avoid having 8 copies of the airport FTAs, and make the enums used available elsewhere.
peter1138
parents:
2752
diff
changeset
|
9 |
#include "airport_movement.h" |
8609
8c0c3e9dd6a0
(svn r11674) -Codechange: refactor some functions out of macros.h into more logical locations.
rubidium
parents:
8497
diff
changeset
|
10 |
#include "core/bitmath_func.hpp" |
8626
440dfcd14c4a
(svn r11691) -Codechange: move+rename helpers.hpp and only include it when it is really needed.
rubidium
parents:
8609
diff
changeset
|
11 |
#include "core/alloc_func.hpp" |
8636
2b158acb649c
(svn r11702) -Codechange: move all date related stuff to date*.
rubidium
parents:
8635
diff
changeset
|
12 |
#include "date_func.h" |
8766
c86cfa3a7580
(svn r11834) -Codechange: only include settings_type.h if needed.
rubidium
parents:
8636
diff
changeset
|
13 |
#include "settings_type.h" |
0 | 14 |
|
4843
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
15 |
/* Uncomment this to print out a full report of the airport-structure |
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
16 |
* You should either use |
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
17 |
* - true: full-report, print out every state and choice with string-names |
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
18 |
* OR |
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
19 |
* - false: give a summarized report which only shows current and next position */ |
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
20 |
//#define DEBUG_AIRPORT false |
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
21 |
|
6890
6c53cd7ce903
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6573
diff
changeset
|
22 |
static AirportFTAClass *DummyAirport; |
4171 | 23 |
static AirportFTAClass *CountryAirport; |
24 |
static AirportFTAClass *CityAirport; |
|
25 |
static AirportFTAClass *Oilrig; |
|
26 |
static AirportFTAClass *Heliport; |
|
27 |
static AirportFTAClass *MetropolitanAirport; |
|
28 |
static AirportFTAClass *InternationalAirport; |
|
29 |
static AirportFTAClass *CommuterAirport; |
|
30 |
static AirportFTAClass *HeliDepot; |
|
31 |
static AirportFTAClass *IntercontinentalAirport; |
|
32 |
static AirportFTAClass *HeliStation; |
|
0 | 33 |
|
34 |
||
6573 | 35 |
void InitializeAirports() |
0 | 36 |
{ |
6890
6c53cd7ce903
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6573
diff
changeset
|
37 |
DummyAirport = new AirportFTAClass( |
6c53cd7ce903
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6573
diff
changeset
|
38 |
_airport_moving_data_dummy, |
6c53cd7ce903
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6573
diff
changeset
|
39 |
NULL, |
6c53cd7ce903
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6573
diff
changeset
|
40 |
NULL, |
6c53cd7ce903
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6573
diff
changeset
|
41 |
_airport_entries_dummy, |
6c53cd7ce903
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6573
diff
changeset
|
42 |
AirportFTAClass::ALL, |
6c53cd7ce903
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6573
diff
changeset
|
43 |
_airport_fta_dummy, |
6c53cd7ce903
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6573
diff
changeset
|
44 |
NULL, |
6c53cd7ce903
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6573
diff
changeset
|
45 |
0, |
10682
3b753d908205
(svn r13226) -Feature: Allow to have more than only two airports per town. The number of airports is now controlled by the noise each of them generates, the distance from town's center and how tolerant the town is.
belugas
parents:
10429
diff
changeset
|
46 |
0, 0, 0, |
6890
6c53cd7ce903
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6573
diff
changeset
|
47 |
0, |
6c53cd7ce903
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6573
diff
changeset
|
48 |
0 |
6c53cd7ce903
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6573
diff
changeset
|
49 |
); |
6c53cd7ce903
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6573
diff
changeset
|
50 |
|
6183 | 51 |
CountryAirport = new AirportFTAClass( |
6175 | 52 |
_airport_moving_data_country, |
1019
6363b8a4273e
(svn r1520) Trim 134 (!) lines with trailing whitespace ):
tron
parents:
950
diff
changeset
|
53 |
_airport_terminal_country, |
6363b8a4273e
(svn r1520) Trim 134 (!) lines with trailing whitespace ):
tron
parents:
950
diff
changeset
|
54 |
NULL, |
6362
f4de72f0abea
(svn r8759) -Feature: Allow airports to have up to 4 entry points depending on approach direction. Note: they're not yet used, but will be soon
celestar
parents:
6351
diff
changeset
|
55 |
_airport_entries_country, |
6351 | 56 |
AirportFTAClass::ALL | AirportFTAClass::SHORT_STRIP, |
1019
6363b8a4273e
(svn r1520) Trim 134 (!) lines with trailing whitespace ):
tron
parents:
950
diff
changeset
|
57 |
_airport_fta_country, |
6363b8a4273e
(svn r1520) Trim 134 (!) lines with trailing whitespace ):
tron
parents:
950
diff
changeset
|
58 |
_airport_depots_country, |
3876
c0d426e78b56
(svn r4918) Move the information about the size of airports from an global array into the struct which describes an airport
tron
parents:
3701
diff
changeset
|
59 |
lengthof(_airport_depots_country), |
10682
3b753d908205
(svn r13226) -Feature: Allow to have more than only two airports per town. The number of airports is now controlled by the noise each of them generates, the distance from town's center and how tolerant the town is.
belugas
parents:
10429
diff
changeset
|
60 |
4, 3, 3, |
6367 | 61 |
0, |
62 |
4 |
|
950
1f6546ea35a3
(svn r1440) -Feature: Allows more flexible airport layouts now, as the number of
celestar
parents:
909
diff
changeset
|
63 |
); |
0 | 64 |
|
6183 | 65 |
CityAirport = new AirportFTAClass( |
6175 | 66 |
_airport_moving_data_town, |
1019
6363b8a4273e
(svn r1520) Trim 134 (!) lines with trailing whitespace ):
tron
parents:
950
diff
changeset
|
67 |
_airport_terminal_city, |
6363b8a4273e
(svn r1520) Trim 134 (!) lines with trailing whitespace ):
tron
parents:
950
diff
changeset
|
68 |
NULL, |
6362
f4de72f0abea
(svn r8759) -Feature: Allow airports to have up to 4 entry points depending on approach direction. Note: they're not yet used, but will be soon
celestar
parents:
6351
diff
changeset
|
69 |
_airport_entries_city, |
6350 | 70 |
AirportFTAClass::ALL, |
1019
6363b8a4273e
(svn r1520) Trim 134 (!) lines with trailing whitespace ):
tron
parents:
950
diff
changeset
|
71 |
_airport_fta_city, |
6363b8a4273e
(svn r1520) Trim 134 (!) lines with trailing whitespace ):
tron
parents:
950
diff
changeset
|
72 |
_airport_depots_city, |
3876
c0d426e78b56
(svn r4918) Move the information about the size of airports from an global array into the struct which describes an airport
tron
parents:
3701
diff
changeset
|
73 |
lengthof(_airport_depots_city), |
10682
3b753d908205
(svn r13226) -Feature: Allow to have more than only two airports per town. The number of airports is now controlled by the noise each of them generates, the distance from town's center and how tolerant the town is.
belugas
parents:
10429
diff
changeset
|
74 |
6, 6, 5, |
6367 | 75 |
0, |
76 |
5 |
|
950
1f6546ea35a3
(svn r1440) -Feature: Allows more flexible airport layouts now, as the number of
celestar
parents:
909
diff
changeset
|
77 |
); |
0 | 78 |
|
6183 | 79 |
MetropolitanAirport = new AirportFTAClass( |
6175 | 80 |
_airport_moving_data_metropolitan, |
1019
6363b8a4273e
(svn r1520) Trim 134 (!) lines with trailing whitespace ):
tron
parents:
950
diff
changeset
|
81 |
_airport_terminal_metropolitan, |
6363b8a4273e
(svn r1520) Trim 134 (!) lines with trailing whitespace ):
tron
parents:
950
diff
changeset
|
82 |
NULL, |
6362
f4de72f0abea
(svn r8759) -Feature: Allow airports to have up to 4 entry points depending on approach direction. Note: they're not yet used, but will be soon
celestar
parents:
6351
diff
changeset
|
83 |
_airport_entries_metropolitan, |
6350 | 84 |
AirportFTAClass::ALL, |
1019
6363b8a4273e
(svn r1520) Trim 134 (!) lines with trailing whitespace ):
tron
parents:
950
diff
changeset
|
85 |
_airport_fta_metropolitan, |
6363b8a4273e
(svn r1520) Trim 134 (!) lines with trailing whitespace ):
tron
parents:
950
diff
changeset
|
86 |
_airport_depots_metropolitan, |
3876
c0d426e78b56
(svn r4918) Move the information about the size of airports from an global array into the struct which describes an airport
tron
parents:
3701
diff
changeset
|
87 |
lengthof(_airport_depots_metropolitan), |
10682
3b753d908205
(svn r13226) -Feature: Allow to have more than only two airports per town. The number of airports is now controlled by the noise each of them generates, the distance from town's center and how tolerant the town is.
belugas
parents:
10429
diff
changeset
|
88 |
6, 6, 8, |
6367 | 89 |
0, |
90 |
6 |
|
950
1f6546ea35a3
(svn r1440) -Feature: Allows more flexible airport layouts now, as the number of
celestar
parents:
909
diff
changeset
|
91 |
); |
0 | 92 |
|
6183 | 93 |
InternationalAirport = new AirportFTAClass( |
6175 | 94 |
_airport_moving_data_international, |
1019
6363b8a4273e
(svn r1520) Trim 134 (!) lines with trailing whitespace ):
tron
parents:
950
diff
changeset
|
95 |
_airport_terminal_international, |
6363b8a4273e
(svn r1520) Trim 134 (!) lines with trailing whitespace ):
tron
parents:
950
diff
changeset
|
96 |
_airport_helipad_international, |
6362
f4de72f0abea
(svn r8759) -Feature: Allow airports to have up to 4 entry points depending on approach direction. Note: they're not yet used, but will be soon
celestar
parents:
6351
diff
changeset
|
97 |
_airport_entries_international, |
6350 | 98 |
AirportFTAClass::ALL, |
1019
6363b8a4273e
(svn r1520) Trim 134 (!) lines with trailing whitespace ):
tron
parents:
950
diff
changeset
|
99 |
_airport_fta_international, |
6363b8a4273e
(svn r1520) Trim 134 (!) lines with trailing whitespace ):
tron
parents:
950
diff
changeset
|
100 |
_airport_depots_international, |
3876
c0d426e78b56
(svn r4918) Move the information about the size of airports from an global array into the struct which describes an airport
tron
parents:
3701
diff
changeset
|
101 |
lengthof(_airport_depots_international), |
10682
3b753d908205
(svn r13226) -Feature: Allow to have more than only two airports per town. The number of airports is now controlled by the noise each of them generates, the distance from town's center and how tolerant the town is.
belugas
parents:
10429
diff
changeset
|
102 |
7, 7, 17, |
6367 | 103 |
0, |
104 |
8 |
|
950
1f6546ea35a3
(svn r1440) -Feature: Allows more flexible airport layouts now, as the number of
celestar
parents:
909
diff
changeset
|
105 |
); |
0 | 106 |
|
6183 | 107 |
IntercontinentalAirport = new AirportFTAClass( |
6175 | 108 |
_airport_moving_data_intercontinental, |
4059
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
3876
diff
changeset
|
109 |
_airport_terminal_intercontinental, |
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
3876
diff
changeset
|
110 |
_airport_helipad_intercontinental, |
6362
f4de72f0abea
(svn r8759) -Feature: Allow airports to have up to 4 entry points depending on approach direction. Note: they're not yet used, but will be soon
celestar
parents:
6351
diff
changeset
|
111 |
_airport_entries_intercontinental, |
6350 | 112 |
AirportFTAClass::ALL, |
4059
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
3876
diff
changeset
|
113 |
_airport_fta_intercontinental, |
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
3876
diff
changeset
|
114 |
_airport_depots_intercontinental, |
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
3876
diff
changeset
|
115 |
lengthof(_airport_depots_intercontinental), |
10682
3b753d908205
(svn r13226) -Feature: Allow to have more than only two airports per town. The number of airports is now controlled by the noise each of them generates, the distance from town's center and how tolerant the town is.
belugas
parents:
10429
diff
changeset
|
116 |
9, 11, 25, |
6367 | 117 |
0, |
118 |
10 |
|
4059
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
3876
diff
changeset
|
119 |
); |
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
3876
diff
changeset
|
120 |
|
6183 | 121 |
Heliport = new AirportFTAClass( |
6175 | 122 |
_airport_moving_data_heliport, |
1019
6363b8a4273e
(svn r1520) Trim 134 (!) lines with trailing whitespace ):
tron
parents:
950
diff
changeset
|
123 |
NULL, |
6363b8a4273e
(svn r1520) Trim 134 (!) lines with trailing whitespace ):
tron
parents:
950
diff
changeset
|
124 |
_airport_helipad_heliport_oilrig, |
6362
f4de72f0abea
(svn r8759) -Feature: Allow airports to have up to 4 entry points depending on approach direction. Note: they're not yet used, but will be soon
celestar
parents:
6351
diff
changeset
|
125 |
_airport_entries_heliport_oilrig, |
6350 | 126 |
AirportFTAClass::HELICOPTERS, |
1019
6363b8a4273e
(svn r1520) Trim 134 (!) lines with trailing whitespace ):
tron
parents:
950
diff
changeset
|
127 |
_airport_fta_heliport_oilrig, |
6363b8a4273e
(svn r1520) Trim 134 (!) lines with trailing whitespace ):
tron
parents:
950
diff
changeset
|
128 |
NULL, |
3876
c0d426e78b56
(svn r4918) Move the information about the size of airports from an global array into the struct which describes an airport
tron
parents:
3701
diff
changeset
|
129 |
0, |
10682
3b753d908205
(svn r13226) -Feature: Allow to have more than only two airports per town. The number of airports is now controlled by the noise each of them generates, the distance from town's center and how tolerant the town is.
belugas
parents:
10429
diff
changeset
|
130 |
1, 1, 1, |
6367 | 131 |
60, |
132 |
4 |
|
950
1f6546ea35a3
(svn r1440) -Feature: Allows more flexible airport layouts now, as the number of
celestar
parents:
909
diff
changeset
|
133 |
); |
1019
6363b8a4273e
(svn r1520) Trim 134 (!) lines with trailing whitespace ):
tron
parents:
950
diff
changeset
|
134 |
|
6183 | 135 |
Oilrig = new AirportFTAClass( |
6175 | 136 |
_airport_moving_data_oilrig, |
137 |
NULL, |
|
138 |
_airport_helipad_heliport_oilrig, |
|
6362
f4de72f0abea
(svn r8759) -Feature: Allow airports to have up to 4 entry points depending on approach direction. Note: they're not yet used, but will be soon
celestar
parents:
6351
diff
changeset
|
139 |
_airport_entries_heliport_oilrig, |
6350 | 140 |
AirportFTAClass::HELICOPTERS, |
6175 | 141 |
_airport_fta_heliport_oilrig, |
142 |
NULL, |
|
143 |
0, |
|
10682
3b753d908205
(svn r13226) -Feature: Allow to have more than only two airports per town. The number of airports is now controlled by the noise each of them generates, the distance from town's center and how tolerant the town is.
belugas
parents:
10429
diff
changeset
|
144 |
1, 1, 0, |
6367 | 145 |
54, |
146 |
3 |
|
6175 | 147 |
); |
4059
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
3876
diff
changeset
|
148 |
|
6183 | 149 |
CommuterAirport = new AirportFTAClass( |
6175 | 150 |
_airport_moving_data_commuter, |
4059
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
3876
diff
changeset
|
151 |
_airport_terminal_commuter, |
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
3876
diff
changeset
|
152 |
_airport_helipad_commuter, |
6362
f4de72f0abea
(svn r8759) -Feature: Allow airports to have up to 4 entry points depending on approach direction. Note: they're not yet used, but will be soon
celestar
parents:
6351
diff
changeset
|
153 |
_airport_entries_commuter, |
6351 | 154 |
AirportFTAClass::ALL | AirportFTAClass::SHORT_STRIP, |
4059
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
3876
diff
changeset
|
155 |
_airport_fta_commuter, |
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
3876
diff
changeset
|
156 |
_airport_depots_commuter, |
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
3876
diff
changeset
|
157 |
lengthof(_airport_depots_commuter), |
10682
3b753d908205
(svn r13226) -Feature: Allow to have more than only two airports per town. The number of airports is now controlled by the noise each of them generates, the distance from town's center and how tolerant the town is.
belugas
parents:
10429
diff
changeset
|
158 |
5, 4, 4, |
6367 | 159 |
0, |
160 |
4 |
|
4059
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
3876
diff
changeset
|
161 |
); |
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
3876
diff
changeset
|
162 |
|
6183 | 163 |
HeliDepot = new AirportFTAClass( |
6175 | 164 |
_airport_moving_data_helidepot, |
4059
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
3876
diff
changeset
|
165 |
NULL, |
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
3876
diff
changeset
|
166 |
_airport_helipad_helidepot, |
6362
f4de72f0abea
(svn r8759) -Feature: Allow airports to have up to 4 entry points depending on approach direction. Note: they're not yet used, but will be soon
celestar
parents:
6351
diff
changeset
|
167 |
_airport_entries_helidepot, |
6350 | 168 |
AirportFTAClass::HELICOPTERS, |
4059
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
3876
diff
changeset
|
169 |
_airport_fta_helidepot, |
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
3876
diff
changeset
|
170 |
_airport_depots_helidepot, |
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
3876
diff
changeset
|
171 |
lengthof(_airport_depots_helidepot), |
10682
3b753d908205
(svn r13226) -Feature: Allow to have more than only two airports per town. The number of airports is now controlled by the noise each of them generates, the distance from town's center and how tolerant the town is.
belugas
parents:
10429
diff
changeset
|
172 |
2, 2, 2, |
6367 | 173 |
0, |
174 |
4 |
|
4059
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
3876
diff
changeset
|
175 |
); |
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
3876
diff
changeset
|
176 |
|
6183 | 177 |
HeliStation = new AirportFTAClass( |
6175 | 178 |
_airport_moving_data_helistation, |
4059
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
3876
diff
changeset
|
179 |
NULL, |
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
3876
diff
changeset
|
180 |
_airport_helipad_helistation, |
6362
f4de72f0abea
(svn r8759) -Feature: Allow airports to have up to 4 entry points depending on approach direction. Note: they're not yet used, but will be soon
celestar
parents:
6351
diff
changeset
|
181 |
_airport_entries_helistation, |
6350 | 182 |
AirportFTAClass::HELICOPTERS, |
4059
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
3876
diff
changeset
|
183 |
_airport_fta_helistation, |
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
3876
diff
changeset
|
184 |
_airport_depots_helistation, |
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
3876
diff
changeset
|
185 |
lengthof(_airport_depots_helistation), |
10682
3b753d908205
(svn r13226) -Feature: Allow to have more than only two airports per town. The number of airports is now controlled by the noise each of them generates, the distance from town's center and how tolerant the town is.
belugas
parents:
10429
diff
changeset
|
186 |
4, 2, 3, |
6367 | 187 |
0, |
188 |
4 |
|
4059
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
3876
diff
changeset
|
189 |
); |
0 | 190 |
} |
191 |
||
6573 | 192 |
void UnInitializeAirports() |
0 | 193 |
{ |
8300
da89335c3116
(svn r11354) -Codechange [FS#1379]: one variable wasn't freed whereas all others were. It's not causing any problems as it happens during the shutdown of OpenTTD. So basically it is only for consistency.
rubidium
parents:
6890
diff
changeset
|
194 |
delete DummyAirport; |
6183 | 195 |
delete CountryAirport; |
196 |
delete CityAirport; |
|
197 |
delete Heliport; |
|
198 |
delete MetropolitanAirport; |
|
199 |
delete InternationalAirport; |
|
200 |
delete CommuterAirport; |
|
201 |
delete HeliDepot; |
|
202 |
delete IntercontinentalAirport; |
|
203 |
delete HeliStation; |
|
0 | 204 |
} |
205 |
||
6183 | 206 |
|
207 |
static uint16 AirportGetNofElements(const AirportFTAbuildup *apFA); |
|
208 |
static AirportFTA* AirportBuildAutomata(uint nofelements, const AirportFTAbuildup *apFA); |
|
209 |
static byte AirportGetTerminalCount(const byte *terminals, byte *groups); |
|
210 |
static byte AirportTestFTA(uint nofelements, const AirportFTA *layout, const byte *terminals); |
|
211 |
||
212 |
#ifdef DEBUG_AIRPORT |
|
213 |
static void AirportPrintOut(uint nofelements, const AirportFTA *layout, bool full_report); |
|
214 |
#endif |
|
215 |
||
216 |
||
217 |
AirportFTAClass::AirportFTAClass( |
|
218 |
const AirportMovingData *moving_data_, |
|
219 |
const byte *terminals_, |
|
220 |
const byte *helipads_, |
|
6362
f4de72f0abea
(svn r8759) -Feature: Allow airports to have up to 4 entry points depending on approach direction. Note: they're not yet used, but will be soon
celestar
parents:
6351
diff
changeset
|
221 |
const byte *entry_points_, |
6350 | 222 |
Flags flags_, |
4842
0757e12896c5
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4434
diff
changeset
|
223 |
const AirportFTAbuildup *apFA, |
6183 | 224 |
const TileIndexDiffC *depots_, |
225 |
const byte nof_depots_, |
|
226 |
uint size_x_, |
|
6346 | 227 |
uint size_y_, |
10682
3b753d908205
(svn r13226) -Feature: Allow to have more than only two airports per town. The number of airports is now controlled by the noise each of them generates, the distance from town's center and how tolerant the town is.
belugas
parents:
10429
diff
changeset
|
228 |
byte noise_level_, |
6367 | 229 |
byte delta_z_, |
230 |
byte catchment_ |
|
6183 | 231 |
) : |
232 |
moving_data(moving_data_), |
|
233 |
terminals(terminals_), |
|
234 |
helipads(helipads_), |
|
235 |
airport_depots(depots_), |
|
6350 | 236 |
flags(flags_), |
6183 | 237 |
nof_depots(nof_depots_), |
6189 | 238 |
nofelements(AirportGetNofElements(apFA)), |
6362
f4de72f0abea
(svn r8759) -Feature: Allow airports to have up to 4 entry points depending on approach direction. Note: they're not yet used, but will be soon
celestar
parents:
6351
diff
changeset
|
239 |
entry_points(entry_points_), |
6183 | 240 |
size_x(size_x_), |
6346 | 241 |
size_y(size_y_), |
10682
3b753d908205
(svn r13226) -Feature: Allow to have more than only two airports per town. The number of airports is now controlled by the noise each of them generates, the distance from town's center and how tolerant the town is.
belugas
parents:
10429
diff
changeset
|
242 |
noise_level(noise_level_), |
6367 | 243 |
delta_z(delta_z_), |
244 |
catchment(catchment_) |
|
0 | 245 |
{ |
4843
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
246 |
byte nofterminalgroups, nofhelipadgroups; |
1019
6363b8a4273e
(svn r1520) Trim 134 (!) lines with trailing whitespace ):
tron
parents:
950
diff
changeset
|
247 |
|
4843
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
248 |
/* Set up the terminal and helipad count for an airport. |
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
249 |
* TODO: If there are more than 10 terminals or 4 helipads, internal variables |
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
250 |
* need to be changed, so don't allow that for now */ |
6183 | 251 |
uint nofterminals = AirportGetTerminalCount(terminals, &nofterminalgroups); |
4843
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
252 |
if (nofterminals > MAX_TERMINALS) { |
5568
75f13d7bfaed
(svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents:
4844
diff
changeset
|
253 |
DEBUG(misc, 0, "[Ap] only a maximum of %d terminals are supported (requested %d)", MAX_TERMINALS, nofterminals); |
4843
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
254 |
assert(nofterminals <= MAX_TERMINALS); |
950
1f6546ea35a3
(svn r1440) -Feature: Allows more flexible airport layouts now, as the number of
celestar
parents:
909
diff
changeset
|
255 |
} |
1f6546ea35a3
(svn r1440) -Feature: Allows more flexible airport layouts now, as the number of
celestar
parents:
909
diff
changeset
|
256 |
|
6183 | 257 |
uint nofhelipads = AirportGetTerminalCount(helipads, &nofhelipadgroups); |
4843
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
258 |
if (nofhelipads > MAX_HELIPADS) { |
5568
75f13d7bfaed
(svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents:
4844
diff
changeset
|
259 |
DEBUG(misc, 0, "[Ap] only a maximum of %d helipads are supported (requested %d)", MAX_HELIPADS, nofhelipads); |
4843
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
260 |
assert(nofhelipads <= MAX_HELIPADS); |
950
1f6546ea35a3
(svn r1440) -Feature: Allows more flexible airport layouts now, as the number of
celestar
parents:
909
diff
changeset
|
261 |
} |
1f6546ea35a3
(svn r1440) -Feature: Allows more flexible airport layouts now, as the number of
celestar
parents:
909
diff
changeset
|
262 |
|
4843
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
263 |
/* Get the number of elements from the source table. We also double check this |
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
264 |
* with the entry point which must be within bounds and use this information |
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
265 |
* later on to build and validate the state machine */ |
6362
f4de72f0abea
(svn r8759) -Feature: Allow airports to have up to 4 entry points depending on approach direction. Note: they're not yet used, but will be soon
celestar
parents:
6351
diff
changeset
|
266 |
for (DiagDirection i = DIAGDIR_BEGIN; i < DIAGDIR_END; i++) { |
f4de72f0abea
(svn r8759) -Feature: Allow airports to have up to 4 entry points depending on approach direction. Note: they're not yet used, but will be soon
celestar
parents:
6351
diff
changeset
|
267 |
if (entry_points[i] >= nofelements) { |
f4de72f0abea
(svn r8759) -Feature: Allow airports to have up to 4 entry points depending on approach direction. Note: they're not yet used, but will be soon
celestar
parents:
6351
diff
changeset
|
268 |
DEBUG(misc, 0, "[Ap] entry (%d) must be within the airport (maximum %d)", entry_points[i], nofelements); |
f4de72f0abea
(svn r8759) -Feature: Allow airports to have up to 4 entry points depending on approach direction. Note: they're not yet used, but will be soon
celestar
parents:
6351
diff
changeset
|
269 |
assert(entry_points[i] < nofelements); |
f4de72f0abea
(svn r8759) -Feature: Allow airports to have up to 4 entry points depending on approach direction. Note: they're not yet used, but will be soon
celestar
parents:
6351
diff
changeset
|
270 |
} |
4843
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
271 |
} |
0 | 272 |
|
4843
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
273 |
/* Build the state machine itself */ |
6183 | 274 |
layout = AirportBuildAutomata(nofelements, apFA); |
6362
f4de72f0abea
(svn r8759) -Feature: Allow airports to have up to 4 entry points depending on approach direction. Note: they're not yet used, but will be soon
celestar
parents:
6351
diff
changeset
|
275 |
DEBUG(misc, 2, "[Ap] #count %3d; #term %2d (%dgrp); #helipad %2d (%dgrp); entries %3d, %3d, %3d, %3d", |
f4de72f0abea
(svn r8759) -Feature: Allow airports to have up to 4 entry points depending on approach direction. Note: they're not yet used, but will be soon
celestar
parents:
6351
diff
changeset
|
276 |
nofelements, nofterminals, nofterminalgroups, nofhelipads, nofhelipadgroups, |
f4de72f0abea
(svn r8759) -Feature: Allow airports to have up to 4 entry points depending on approach direction. Note: they're not yet used, but will be soon
celestar
parents:
6351
diff
changeset
|
277 |
entry_points[DIAGDIR_NE], entry_points[DIAGDIR_SE], entry_points[DIAGDIR_SW], entry_points[DIAGDIR_NW]); |
0 | 278 |
|
4843
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
279 |
/* Test if everything went allright. This is only a rude static test checking |
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
280 |
* the symantic correctness. By no means does passing the test mean that the |
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
281 |
* airport is working correctly or will not deadlock for example */ |
6183 | 282 |
uint ret = AirportTestFTA(nofelements, layout, terminals); |
283 |
if (ret != MAX_ELEMENTS) DEBUG(misc, 0, "[Ap] problem with element: %d", ret - 1); |
|
284 |
assert(ret == MAX_ELEMENTS); |
|
4843
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
285 |
|
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
286 |
#ifdef DEBUG_AIRPORT |
6183 | 287 |
AirportPrintOut(nofelements, layout, DEBUG_AIRPORT); |
4077
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4059
diff
changeset
|
288 |
#endif |
0 | 289 |
} |
290 |
||
6183 | 291 |
|
292 |
AirportFTAClass::~AirportFTAClass() |
|
0 | 293 |
{ |
6183 | 294 |
for (uint i = 0; i < nofelements; i++) { |
295 |
AirportFTA *current = layout[i].next; |
|
0 | 296 |
while (current != NULL) { |
6183 | 297 |
AirportFTA *next = current->next; |
0 | 298 |
free(current); |
299 |
current = next; |
|
300 |
}; |
|
301 |
} |
|
6183 | 302 |
free(layout); |
0 | 303 |
} |
304 |
||
4843
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
305 |
/** Get the number of elements of a source Airport state automata |
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
306 |
* Since it is actually just a big array of AirportFTA types, we only |
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
307 |
* know one element from the other by differing 'position' identifiers */ |
4842
0757e12896c5
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4434
diff
changeset
|
308 |
static uint16 AirportGetNofElements(const AirportFTAbuildup *apFA) |
0 | 309 |
{ |
310 |
uint16 nofelements = 0; |
|
4842
0757e12896c5
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4434
diff
changeset
|
311 |
int temp = apFA[0].position; |
2549 | 312 |
|
6413 | 313 |
for (uint i = 0; i < MAX_ELEMENTS; i++) { |
4842
0757e12896c5
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4434
diff
changeset
|
314 |
if (temp != apFA[i].position) { |
0 | 315 |
nofelements++; |
4842
0757e12896c5
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4434
diff
changeset
|
316 |
temp = apFA[i].position; |
0 | 317 |
} |
4842
0757e12896c5
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4434
diff
changeset
|
318 |
if (apFA[i].position == MAX_ELEMENTS) break; |
0 | 319 |
} |
320 |
return nofelements; |
|
321 |
} |
|
322 |
||
4843
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
323 |
/* We calculate the terminal/helipod count based on the data passed to us |
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
324 |
* This data (terminals) contains an index as a first element as to how many |
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
325 |
* groups there are, and then the number of terminals for each group */ |
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
326 |
static byte AirportGetTerminalCount(const byte *terminals, byte *groups) |
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
327 |
{ |
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
328 |
byte nof_terminals = 0; |
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
329 |
*groups = 0; |
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
330 |
|
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
331 |
if (terminals != NULL) { |
6413 | 332 |
uint i = terminals[0]; |
4843
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
333 |
*groups = i; |
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
334 |
while (i-- > 0) { |
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
335 |
terminals++; |
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
336 |
assert(*terminals != 0); // no empty groups please |
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
337 |
nof_terminals += *terminals; |
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
338 |
} |
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
339 |
} |
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
340 |
return nof_terminals; |
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
341 |
} |
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
342 |
|
6183 | 343 |
|
344 |
static AirportFTA* AirportBuildAutomata(uint nofelements, const AirportFTAbuildup *apFA) |
|
0 | 345 |
{ |
6183 | 346 |
AirportFTA *FAutomata = MallocT<AirportFTA>(nofelements); |
4843
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
347 |
uint16 internalcounter = 0; |
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
348 |
|
6183 | 349 |
for (uint i = 0; i < nofelements; i++) { |
6413 | 350 |
AirportFTA *current = &FAutomata[i]; |
4843
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
351 |
current->position = apFA[internalcounter].position; |
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
352 |
current->heading = apFA[internalcounter].heading; |
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
353 |
current->block = apFA[internalcounter].block; |
4842
0757e12896c5
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4434
diff
changeset
|
354 |
current->next_position = apFA[internalcounter].next; |
0 | 355 |
|
356 |
// outgoing nodes from the same position, create linked list |
|
4842
0757e12896c5
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4434
diff
changeset
|
357 |
while (current->position == apFA[internalcounter + 1].position) { |
5860
7fdc9b423ba1
(svn r8066) - Codechange: MallocT(), CallocT(), ReallocT() now return the pointer to allocated memory instead of modifying the pointer given as parameter
KUDr
parents:
5838
diff
changeset
|
358 |
AirportFTA *newNode = MallocT<AirportFTA>(1); |
2549 | 359 |
|
4843
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
360 |
newNode->position = apFA[internalcounter + 1].position; |
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
361 |
newNode->heading = apFA[internalcounter + 1].heading; |
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
362 |
newNode->block = apFA[internalcounter + 1].block; |
4842
0757e12896c5
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4434
diff
changeset
|
363 |
newNode->next_position = apFA[internalcounter + 1].next; |
0 | 364 |
// create link |
4842
0757e12896c5
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4434
diff
changeset
|
365 |
current->next = newNode; |
0757e12896c5
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4434
diff
changeset
|
366 |
current = current->next; |
0 | 367 |
internalcounter++; |
6413 | 368 |
} |
4842
0757e12896c5
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4434
diff
changeset
|
369 |
current->next = NULL; |
0 | 370 |
internalcounter++; |
371 |
} |
|
6183 | 372 |
return FAutomata; |
0 | 373 |
} |
374 |
||
6183 | 375 |
|
376 |
static byte AirportTestFTA(uint nofelements, const AirportFTA *layout, const byte *terminals) |
|
0 | 377 |
{ |
6183 | 378 |
uint next_position = 0; |
0 | 379 |
|
6183 | 380 |
for (uint i = 0; i < nofelements; i++) { |
381 |
uint position = layout[i].position; |
|
4843
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
382 |
if (position != next_position) return i; |
6183 | 383 |
const AirportFTA *first = &layout[i]; |
0 | 384 |
|
6413 | 385 |
for (const AirportFTA *current = first; current != NULL; current = current->next) { |
4844
15faacbff622
(svn r6770) -Codechange: Make the airport checking a bit stricter...fix unnoticed errors:
Darkvater
parents:
4843
diff
changeset
|
386 |
/* A heading must always be valid. The only exceptions are |
15faacbff622
(svn r6770) -Codechange: Make the airport checking a bit stricter...fix unnoticed errors:
Darkvater
parents:
4843
diff
changeset
|
387 |
* - multiple choices as start, identified by a special value of 255 |
15faacbff622
(svn r6770) -Codechange: Make the airport checking a bit stricter...fix unnoticed errors:
Darkvater
parents:
4843
diff
changeset
|
388 |
* - terminal group which is identified by a special value of 255 */ |
15faacbff622
(svn r6770) -Codechange: Make the airport checking a bit stricter...fix unnoticed errors:
Darkvater
parents:
4843
diff
changeset
|
389 |
if (current->heading > MAX_HEADINGS) { |
15faacbff622
(svn r6770) -Codechange: Make the airport checking a bit stricter...fix unnoticed errors:
Darkvater
parents:
4843
diff
changeset
|
390 |
if (current->heading != 255) return i; |
15faacbff622
(svn r6770) -Codechange: Make the airport checking a bit stricter...fix unnoticed errors:
Darkvater
parents:
4843
diff
changeset
|
391 |
if (current == first && current->next == NULL) return i; |
6183 | 392 |
if (current != first && current->next_position > terminals[0]) return i; |
4844
15faacbff622
(svn r6770) -Codechange: Make the airport checking a bit stricter...fix unnoticed errors:
Darkvater
parents:
4843
diff
changeset
|
393 |
} |
15faacbff622
(svn r6770) -Codechange: Make the airport checking a bit stricter...fix unnoticed errors:
Darkvater
parents:
4843
diff
changeset
|
394 |
|
15faacbff622
(svn r6770) -Codechange: Make the airport checking a bit stricter...fix unnoticed errors:
Darkvater
parents:
4843
diff
changeset
|
395 |
/* If there is only one choice, it must be at the end */ |
15faacbff622
(svn r6770) -Codechange: Make the airport checking a bit stricter...fix unnoticed errors:
Darkvater
parents:
4843
diff
changeset
|
396 |
if (current->heading == 0 && current->next != NULL) return i; |
15faacbff622
(svn r6770) -Codechange: Make the airport checking a bit stricter...fix unnoticed errors:
Darkvater
parents:
4843
diff
changeset
|
397 |
/* Obviously the elements of the linked list must have the same identifier */ |
4843
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
398 |
if (position != current->position) return i; |
4844
15faacbff622
(svn r6770) -Codechange: Make the airport checking a bit stricter...fix unnoticed errors:
Darkvater
parents:
4843
diff
changeset
|
399 |
/* A next position must be within bounds */ |
6183 | 400 |
if (current->next_position >= nofelements) return i; |
4844
15faacbff622
(svn r6770) -Codechange: Make the airport checking a bit stricter...fix unnoticed errors:
Darkvater
parents:
4843
diff
changeset
|
401 |
} |
4843
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
402 |
next_position++; |
0 | 403 |
} |
404 |
return MAX_ELEMENTS; |
|
405 |
} |
|
406 |
||
4843
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
407 |
#ifdef DEBUG_AIRPORT |
2549 | 408 |
static const char* const _airport_heading_strings[] = { |
0 | 409 |
"TO_ALL", |
410 |
"HANGAR", |
|
411 |
"TERM1", |
|
412 |
"TERM2", |
|
413 |
"TERM3", |
|
414 |
"TERM4", |
|
415 |
"TERM5", |
|
416 |
"TERM6", |
|
417 |
"HELIPAD1", |
|
418 |
"HELIPAD2", |
|
419 |
"TAKEOFF", |
|
420 |
"STARTTAKEOFF", |
|
421 |
"ENDTAKEOFF", |
|
422 |
"HELITAKEOFF", |
|
423 |
"FLYING", |
|
424 |
"LANDING", |
|
425 |
"ENDLANDING", |
|
426 |
"HELILANDING", |
|
427 |
"HELIENDLANDING", |
|
4059
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
3876
diff
changeset
|
428 |
"TERM7", |
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
3876
diff
changeset
|
429 |
"TERM8", |
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
3876
diff
changeset
|
430 |
"HELIPAD3", |
f1442dfe1c8a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
3876
diff
changeset
|
431 |
"HELIPAD4", |
4434
4175805666a5
(svn r6204) -Cleanup: replace non-indentation with spaces; like '}<TAB>else {' -> '} else {', tabs between code and comment, etc.
rubidium
parents:
4294
diff
changeset
|
432 |
"DUMMY" // extra heading for 255 |
0 | 433 |
}; |
434 |
||
6183 | 435 |
static void AirportPrintOut(uint nofelements, const AirportFTA *layout, bool full_report) |
0 | 436 |
{ |
4843
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
437 |
if (!full_report) printf("(P = Current Position; NP = Next Position)\n"); |
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
438 |
|
6183 | 439 |
for (uint i = 0; i < nofelements; i++) { |
6413 | 440 |
for (const AirportFTA *current = &layout[i]; current != NULL; current = current->next) { |
0 | 441 |
if (full_report) { |
4843
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
442 |
byte heading = (current->heading == 255) ? MAX_HEADINGS + 1 : current->heading; |
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
443 |
printf("\tPos:%2d NPos:%2d Heading:%15s Block:%2d\n", current->position, |
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
444 |
current->next_position, _airport_heading_strings[heading], |
8497
c2efcb54d556
(svn r11560) -Codechange: replace 'custom' version of FindLastBit with the generic.
rubidium
parents:
8427
diff
changeset
|
445 |
FindLastBit(current->block)); |
2549 | 446 |
} else { |
4843
724322df355a
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
447 |
printf("P:%2d NP:%2d", current->position, current->next_position); |
0 | 448 |
} |
449 |
} |
|
450 |
printf("\n"); |
|
451 |
} |
|
452 |
} |
|
2549 | 453 |
#endif |
0 | 454 |
|
4171 | 455 |
const AirportFTAClass *GetAirport(const byte airport_type) |
0 | 456 |
{ |
457 |
//FIXME -- AircraftNextAirportPos_and_Order -> Needs something nicer, don't like this code |
|
458 |
// needs constant change if more airports are added |
|
459 |
switch (airport_type) { |
|
4077
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4059
diff
changeset
|
460 |
default: NOT_REACHED(); |
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4059
diff
changeset
|
461 |
case AT_SMALL: return CountryAirport; |
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4059
diff
changeset
|
462 |
case AT_LARGE: return CityAirport; |
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4059
diff
changeset
|
463 |
case AT_METROPOLITAN: return MetropolitanAirport; |
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4059
diff
changeset
|
464 |
case AT_HELIPORT: return Heliport; |
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4059
diff
changeset
|
465 |
case AT_OILRIG: return Oilrig; |
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4059
diff
changeset
|
466 |
case AT_INTERNATIONAL: return InternationalAirport; |
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4059
diff
changeset
|
467 |
case AT_COMMUTER: return CommuterAirport; |
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4059
diff
changeset
|
468 |
case AT_HELIDEPOT: return HeliDepot; |
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4059
diff
changeset
|
469 |
case AT_INTERCON: return IntercontinentalAirport; |
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4059
diff
changeset
|
470 |
case AT_HELISTATION: return HeliStation; |
6890
6c53cd7ce903
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6573
diff
changeset
|
471 |
case AT_DUMMY: return DummyAirport; |
0 | 472 |
} |
473 |
} |
|
2159
3b634157c3b2
(svn r2669) Shuffle some more stuff around to reduce dependencies
tron
parents:
1891
diff
changeset
|
474 |
|
3701
13911c5df3e7
(svn r4642) - Codechange: reorganise airport.h and airport_movement.h to avoid having 8 copies of the airport FTAs, and make the enums used available elsewhere.
peter1138
parents:
2752
diff
changeset
|
475 |
|
6573 | 476 |
uint32 GetValidAirports() |
2159
3b634157c3b2
(svn r2669) Shuffle some more stuff around to reduce dependencies
tron
parents:
1891
diff
changeset
|
477 |
{ |
6222 | 478 |
uint32 mask = 0; |
2159
3b634157c3b2
(svn r2669) Shuffle some more stuff around to reduce dependencies
tron
parents:
1891
diff
changeset
|
479 |
|
10775
7061477bfbcf
(svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents:
10703
diff
changeset
|
480 |
if (_cur_year < 1960 || _settings_game.station.always_small_airport) SetBit(mask, 0); // small airport |
8427
143b0be22af1
(svn r11484) -Codechange: Remove the doubled function SetBitT and rename the remaining to fit with the naming style
skidd13
parents:
8300
diff
changeset
|
481 |
if (_cur_year >= 1955) SetBit(mask, 1); // city airport |
143b0be22af1
(svn r11484) -Codechange: Remove the doubled function SetBitT and rename the remaining to fit with the naming style
skidd13
parents:
8300
diff
changeset
|
482 |
if (_cur_year >= 1963) SetBit(mask, 2); // heliport |
143b0be22af1
(svn r11484) -Codechange: Remove the doubled function SetBitT and rename the remaining to fit with the naming style
skidd13
parents:
8300
diff
changeset
|
483 |
if (_cur_year >= 1980) SetBit(mask, 3); // metropolitan airport |
143b0be22af1
(svn r11484) -Codechange: Remove the doubled function SetBitT and rename the remaining to fit with the naming style
skidd13
parents:
8300
diff
changeset
|
484 |
if (_cur_year >= 1990) SetBit(mask, 4); // international airport |
143b0be22af1
(svn r11484) -Codechange: Remove the doubled function SetBitT and rename the remaining to fit with the naming style
skidd13
parents:
8300
diff
changeset
|
485 |
if (_cur_year >= 1983) SetBit(mask, 5); // commuter airport |
143b0be22af1
(svn r11484) -Codechange: Remove the doubled function SetBitT and rename the remaining to fit with the naming style
skidd13
parents:
8300
diff
changeset
|
486 |
if (_cur_year >= 1976) SetBit(mask, 6); // helidepot |
143b0be22af1
(svn r11484) -Codechange: Remove the doubled function SetBitT and rename the remaining to fit with the naming style
skidd13
parents:
8300
diff
changeset
|
487 |
if (_cur_year >= 2002) SetBit(mask, 7); // intercontinental airport |
143b0be22af1
(svn r11484) -Codechange: Remove the doubled function SetBitT and rename the remaining to fit with the naming style
skidd13
parents:
8300
diff
changeset
|
488 |
if (_cur_year >= 1980) SetBit(mask, 8); // helistation |
6222 | 489 |
return mask; |
2159
3b634157c3b2
(svn r2669) Shuffle some more stuff around to reduce dependencies
tron
parents:
1891
diff
changeset
|
490 |
} |