OpenTTD
airport.h
Go to the documentation of this file.
1 /* $Id: airport.h 25841 2013-10-12 16:34:59Z frosch $ */
2 
3 /*
4  * This file is part of OpenTTD.
5  * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
6  * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
7  * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
8  */
9 
12 #ifndef AIRPORT_H
13 #define AIRPORT_H
14 
15 #include "direction_type.h"
16 #include "tile_type.h"
17 
19 static const uint MAX_TERMINALS = 8;
20 static const uint MAX_HELIPADS = 3;
21 static const uint MAX_ELEMENTS = 255;
22 
23 static const uint NUM_AIRPORTTILES_PER_GRF = 255;
24 
25 static const uint NUM_AIRPORTTILES = 256;
26 static const uint NEW_AIRPORTTILE_OFFSET = 74;
28 
31  AT_SMALL = 0,
32  AT_LARGE = 1,
40  AT_OILRIG = 9,
43  NUM_AIRPORTS = 128,
44  AT_INVALID = 254,
45  AT_DUMMY = 255,
46 };
47 
50  AMED_NOSPDCLAMP = 1 << 0,
51  AMED_TAKEOFF = 1 << 1,
52  AMED_SLOWTURN = 1 << 2,
53  AMED_LAND = 1 << 3,
54  AMED_EXACTPOS = 1 << 4,
55  AMED_BRAKE = 1 << 5,
56  AMED_HELI_RAISE = 1 << 6,
57  AMED_HELI_LOWER = 1 << 7,
58  AMED_HOLD = 1 << 8,
59 };
60 
63  TO_ALL = 0,
64  HANGAR = 1,
65  TERM1 = 2,
66  TERM2 = 3,
67  TERM3 = 4,
68  TERM4 = 5,
69  TERM5 = 6,
70  TERM6 = 7,
71  HELIPAD1 = 8,
72  HELIPAD2 = 9,
73  TAKEOFF = 10,
74  STARTTAKEOFF = 11,
75  ENDTAKEOFF = 12,
76  HELITAKEOFF = 13,
77  FLYING = 14,
78  LANDING = 15,
79  ENDLANDING = 16,
80  HELILANDING = 17,
82  TERM7 = 19,
83  TERM8 = 20,
84  HELIPAD3 = 21,
85  MAX_HEADINGS = 21,
86 };
87 
89 static const uint64
90  TERM1_block = 1ULL << 0,
91  TERM2_block = 1ULL << 1,
92  TERM3_block = 1ULL << 2,
93  TERM4_block = 1ULL << 3,
94  TERM5_block = 1ULL << 4,
95  TERM6_block = 1ULL << 5,
96  HELIPAD1_block = 1ULL << 6,
97  HELIPAD2_block = 1ULL << 7,
98  RUNWAY_IN_OUT_block = 1ULL << 8,
99  RUNWAY_IN_block = 1ULL << 8,
100  AIRPORT_BUSY_block = 1ULL << 8,
101  RUNWAY_OUT_block = 1ULL << 9,
102  TAXIWAY_BUSY_block = 1ULL << 10,
103  OUT_WAY_block = 1ULL << 11,
104  IN_WAY_block = 1ULL << 12,
105  AIRPORT_ENTRANCE_block = 1ULL << 13,
106  TERM_GROUP1_block = 1ULL << 14,
107  TERM_GROUP2_block = 1ULL << 15,
108  HANGAR2_AREA_block = 1ULL << 16,
109  TERM_GROUP2_ENTER1_block = 1ULL << 17,
110  TERM_GROUP2_ENTER2_block = 1ULL << 18,
111  TERM_GROUP2_EXIT1_block = 1ULL << 19,
112  TERM_GROUP2_EXIT2_block = 1ULL << 20,
113  PRE_HELIPAD_block = 1ULL << 21,
114 
115  /* blocks for new airports */
116  TERM7_block = 1ULL << 22,
117  TERM8_block = 1ULL << 23,
118  HELIPAD3_block = 1ULL << 24,
119  HANGAR1_AREA_block = 1ULL << 26,
120  OUT_WAY2_block = 1ULL << 27,
121  IN_WAY2_block = 1ULL << 28,
122  RUNWAY_IN2_block = 1ULL << 29,
123  RUNWAY_OUT2_block = 1ULL << 10,
124  HELIPAD_GROUP_block = 1ULL << 13,
125  OUT_WAY_block2 = 1ULL << 31,
126  /* end of new blocks */
127 
128  NOTHING_block = 1ULL << 30,
129  AIRPORT_CLOSED_block = 1ULL << 63;
130 
133  int16 x;
134  int16 y;
135  uint16 flag;
137 };
138 
139 AirportMovingData RotateAirportMovingData(const AirportMovingData *orig, Direction rotation, uint num_tiles_x, uint num_tiles_y);
140 
141 struct AirportFTAbuildup;
142 
145 public:
147  enum Flags {
148  AIRPLANES = 0x1,
149  HELICOPTERS = 0x2,
151  SHORT_STRIP = 0x4,
152  };
153 
156  const byte *terminals,
157  const byte num_helipads,
158  const byte *entry_points,
159  Flags flags,
160  const AirportFTAbuildup *apFA,
161  byte delta_z
162  );
163 
164  ~AirportFTAClass();
165 
171  const AirportMovingData *MovingData(byte position) const
172  {
173  assert(position < nofelements);
174  return &moving_data[position];
175  }
176 
178  struct AirportFTA *layout;
179  const byte *terminals;
180  const byte num_helipads;
182  byte nofelements;
183  const byte *entry_points;
184  byte delta_z;
185 };
186 
188 
189 
190 
191 struct AirportFTA {
192  AirportFTA *next;
193  uint64 block;
194  byte position;
196  byte heading;
197 };
198 
199 const AirportFTAClass *GetAirport(const byte airport_type);
200 byte GetVehiclePosOnBuild(TileIndex hangar_tile);
201 
202 #endif /* AIRPORT_H */