2005-07-24 16:12:37 +02:00
|
|
|
/* $Id$ */
|
|
|
|
|
2009-08-21 22:21:05 +02:00
|
|
|
/*
|
|
|
|
* This file is part of OpenTTD.
|
|
|
|
* 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.
|
|
|
|
* 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.
|
|
|
|
* 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/>.
|
|
|
|
*/
|
|
|
|
|
2007-02-23 02:48:53 +01:00
|
|
|
/** @file airport.h Various declarations for airports */
|
|
|
|
|
2004-08-09 19:04:08 +02:00
|
|
|
#ifndef AIRPORT_H
|
|
|
|
#define AIRPORT_H
|
|
|
|
|
2007-12-18 20:52:14 +01:00
|
|
|
#include "direction_type.h"
|
2007-12-26 12:45:43 +01:00
|
|
|
#include "map_type.h"
|
2008-05-24 04:54:47 +02:00
|
|
|
#include "tile_type.h"
|
2009-06-21 15:26:30 +02:00
|
|
|
#include "date_type.h"
|
2007-01-10 19:56:51 +01:00
|
|
|
|
2009-05-28 23:54:03 +02:00
|
|
|
/** Current limits for airports */
|
|
|
|
enum {
|
|
|
|
MAX_TERMINALS = 10, ///< maximum number of terminals per airport
|
|
|
|
MAX_HELIPADS = 4, ///< maximum number of helipads per airport
|
|
|
|
MAX_ELEMENTS = 255, ///< maximum number of aircraft positions at airport
|
|
|
|
};
|
2004-08-09 19:04:08 +02:00
|
|
|
|
2009-05-28 23:54:03 +02:00
|
|
|
/** Airport types */
|
2004-08-09 19:04:08 +02:00
|
|
|
enum {
|
2007-03-29 15:52:34 +02:00
|
|
|
AT_SMALL = 0,
|
|
|
|
AT_LARGE = 1,
|
|
|
|
AT_HELIPORT = 2,
|
|
|
|
AT_METROPOLITAN = 3,
|
|
|
|
AT_INTERNATIONAL = 4,
|
|
|
|
AT_COMMUTER = 5,
|
|
|
|
AT_HELIDEPOT = 6,
|
|
|
|
AT_INTERCON = 7,
|
|
|
|
AT_HELISTATION = 8,
|
2009-06-12 16:53:57 +02:00
|
|
|
NUM_AIRPORTS = 9,
|
2007-03-29 15:52:34 +02:00
|
|
|
AT_OILRIG = 15,
|
|
|
|
AT_DUMMY = 255
|
2004-08-09 19:04:08 +02:00
|
|
|
};
|
|
|
|
|
2007-01-10 19:56:51 +01:00
|
|
|
|
2006-05-01 13:27:39 +02:00
|
|
|
enum {
|
2006-08-22 16:38:37 +02:00
|
|
|
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,
|
2007-03-02 13:01:24 +01:00
|
|
|
AMED_HOLD = 1 << 8
|
2006-05-01 13:27:39 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
/* Movement States on Airports (headings target) */
|
|
|
|
enum {
|
2006-08-22 16:38:37 +02:00
|
|
|
TO_ALL = 0,
|
|
|
|
HANGAR = 1,
|
|
|
|
TERM1 = 2,
|
|
|
|
TERM2 = 3,
|
|
|
|
TERM3 = 4,
|
|
|
|
TERM4 = 5,
|
|
|
|
TERM5 = 6,
|
|
|
|
TERM6 = 7,
|
|
|
|
HELIPAD1 = 8,
|
|
|
|
HELIPAD2 = 9,
|
2006-06-24 00:05:40 +02:00
|
|
|
TAKEOFF = 10,
|
|
|
|
STARTTAKEOFF = 11,
|
|
|
|
ENDTAKEOFF = 12,
|
|
|
|
HELITAKEOFF = 13,
|
|
|
|
FLYING = 14,
|
|
|
|
LANDING = 15,
|
|
|
|
ENDLANDING = 16,
|
|
|
|
HELILANDING = 17,
|
|
|
|
HELIENDLANDING = 18,
|
|
|
|
TERM7 = 19,
|
|
|
|
TERM8 = 20,
|
|
|
|
HELIPAD3 = 21,
|
2009-05-28 23:54:03 +02:00
|
|
|
HELIPAD4 = 22,
|
|
|
|
MAX_HEADINGS = 22,
|
2006-05-01 13:27:39 +02:00
|
|
|
};
|
|
|
|
|
2009-03-15 01:32:18 +01:00
|
|
|
/* Movement Blocks on Airports
|
|
|
|
* blocks (eg_airport_flags) */
|
2007-02-13 13:34:54 +01:00
|
|
|
static const uint64
|
2007-07-04 01:23:38 +02:00
|
|
|
TERM1_block = 1ULL << 0,
|
|
|
|
TERM2_block = 1ULL << 1,
|
|
|
|
TERM3_block = 1ULL << 2,
|
|
|
|
TERM4_block = 1ULL << 3,
|
|
|
|
TERM5_block = 1ULL << 4,
|
|
|
|
TERM6_block = 1ULL << 5,
|
|
|
|
HELIPAD1_block = 1ULL << 6,
|
|
|
|
HELIPAD2_block = 1ULL << 7,
|
|
|
|
RUNWAY_IN_OUT_block = 1ULL << 8,
|
|
|
|
RUNWAY_IN_block = 1ULL << 8,
|
|
|
|
AIRPORT_BUSY_block = 1ULL << 8,
|
|
|
|
RUNWAY_OUT_block = 1ULL << 9,
|
|
|
|
TAXIWAY_BUSY_block = 1ULL << 10,
|
|
|
|
OUT_WAY_block = 1ULL << 11,
|
|
|
|
IN_WAY_block = 1ULL << 12,
|
|
|
|
AIRPORT_ENTRANCE_block = 1ULL << 13,
|
|
|
|
TERM_GROUP1_block = 1ULL << 14,
|
|
|
|
TERM_GROUP2_block = 1ULL << 15,
|
|
|
|
HANGAR2_AREA_block = 1ULL << 16,
|
|
|
|
TERM_GROUP2_ENTER1_block = 1ULL << 17,
|
|
|
|
TERM_GROUP2_ENTER2_block = 1ULL << 18,
|
|
|
|
TERM_GROUP2_EXIT1_block = 1ULL << 19,
|
|
|
|
TERM_GROUP2_EXIT2_block = 1ULL << 20,
|
|
|
|
PRE_HELIPAD_block = 1ULL << 21,
|
2006-06-24 00:05:40 +02:00
|
|
|
|
2009-06-21 22:57:01 +02:00
|
|
|
/* blocks for new airports */
|
2007-07-04 01:23:38 +02:00
|
|
|
TERM7_block = 1ULL << 22,
|
|
|
|
TERM8_block = 1ULL << 23,
|
|
|
|
TERM9_block = 1ULL << 24,
|
|
|
|
HELIPAD3_block = 1ULL << 24,
|
|
|
|
TERM10_block = 1ULL << 25,
|
|
|
|
HELIPAD4_block = 1ULL << 25,
|
|
|
|
HANGAR1_AREA_block = 1ULL << 26,
|
|
|
|
OUT_WAY2_block = 1ULL << 27,
|
|
|
|
IN_WAY2_block = 1ULL << 28,
|
|
|
|
RUNWAY_IN2_block = 1ULL << 29,
|
2008-04-11 20:00:51 +02:00
|
|
|
RUNWAY_OUT2_block = 1ULL << 10, ///< note re-uses TAXIWAY_BUSY
|
|
|
|
HELIPAD_GROUP_block = 1ULL << 13, ///< note re-uses AIRPORT_ENTRANCE
|
2007-07-04 01:23:38 +02:00
|
|
|
OUT_WAY_block2 = 1ULL << 31,
|
2009-06-21 22:57:01 +02:00
|
|
|
/* end of new blocks */
|
2006-06-24 00:05:40 +02:00
|
|
|
|
2007-07-04 01:23:38 +02:00
|
|
|
NOTHING_block = 1ULL << 30;
|
2006-05-01 13:27:39 +02:00
|
|
|
|
2007-03-07 13:11:48 +01:00
|
|
|
struct AirportMovingData {
|
2007-02-04 14:46:21 +01:00
|
|
|
int16 x;
|
|
|
|
int16 y;
|
2007-03-02 13:01:24 +01:00
|
|
|
uint16 flag;
|
2007-01-10 19:56:51 +01:00
|
|
|
DirectionByte direction;
|
2007-03-07 13:11:48 +01:00
|
|
|
};
|
2006-05-01 13:27:39 +02:00
|
|
|
|
2007-02-04 11:25:57 +01:00
|
|
|
struct AirportFTAbuildup;
|
|
|
|
|
2008-04-11 20:00:51 +02:00
|
|
|
/** Finite sTate mAchine --> FTA */
|
2007-03-07 13:11:48 +01:00
|
|
|
struct AirportFTAClass {
|
2009-06-21 23:05:06 +02:00
|
|
|
public:
|
|
|
|
enum Flags {
|
|
|
|
AIRPLANES = 0x1,
|
|
|
|
HELICOPTERS = 0x2,
|
|
|
|
ALL = AIRPLANES | HELICOPTERS,
|
|
|
|
SHORT_STRIP = 0x4
|
|
|
|
};
|
|
|
|
|
|
|
|
AirportFTAClass(
|
|
|
|
const AirportMovingData *moving_data,
|
|
|
|
const byte *terminals,
|
|
|
|
const byte *helipads,
|
|
|
|
const byte *entry_points,
|
|
|
|
Flags flags,
|
|
|
|
const AirportFTAbuildup *apFA,
|
|
|
|
const TileIndexDiffC *depots,
|
|
|
|
byte nof_depots,
|
|
|
|
uint size_x,
|
|
|
|
uint size_y,
|
|
|
|
uint8 noise_level,
|
|
|
|
byte delta_z,
|
|
|
|
byte catchment,
|
|
|
|
Year first_available,
|
|
|
|
Year last_available
|
|
|
|
);
|
2007-02-04 11:25:57 +01:00
|
|
|
|
2009-06-21 22:57:01 +02:00
|
|
|
~AirportFTAClass();
|
2007-02-04 11:25:57 +01:00
|
|
|
|
2009-06-21 22:57:01 +02:00
|
|
|
const AirportMovingData *MovingData(byte position) const
|
|
|
|
{
|
|
|
|
assert(position < nofelements);
|
|
|
|
return &moving_data[position];
|
|
|
|
}
|
2007-02-03 14:03:11 +01:00
|
|
|
|
2009-06-21 22:57:01 +02:00
|
|
|
/** Is this airport available at this date? */
|
2009-06-21 23:05:06 +02:00
|
|
|
bool IsAvailable() const;
|
2009-06-21 15:26:30 +02:00
|
|
|
|
2007-02-03 14:03:11 +01:00
|
|
|
const AirportMovingData *moving_data;
|
2008-04-11 20:00:51 +02:00
|
|
|
struct AirportFTA *layout; ///< state machine for airport
|
2005-01-09 09:49:40 +01:00
|
|
|
const byte *terminals;
|
|
|
|
const byte *helipads;
|
2008-04-11 20:00:51 +02:00
|
|
|
const TileIndexDiffC *airport_depots; ///< gives the position of the depots on the airports
|
2007-02-15 21:16:33 +01:00
|
|
|
Flags flags;
|
2008-04-11 20:00:51 +02:00
|
|
|
byte nof_depots; ///< number of depots this airport has
|
|
|
|
byte nofelements; ///< number of positions the airport consists of
|
2007-02-16 13:10:19 +01:00
|
|
|
const byte *entry_points; ///< when an airplane arrives at this airport, enter it at position entry_point, index depends on direction
|
2006-05-20 17:13:27 +02:00
|
|
|
byte size_x;
|
|
|
|
byte size_y;
|
2008-05-24 04:54:47 +02:00
|
|
|
uint8 noise_level; ///< noise that this airport generates
|
2008-04-11 20:00:51 +02:00
|
|
|
byte delta_z; ///< Z adjustment for helicopter pads
|
2007-02-17 08:45:18 +01:00
|
|
|
byte catchment;
|
2009-06-21 15:26:30 +02:00
|
|
|
Year first_available; ///< the year this airport becomes available
|
|
|
|
Year last_available; ///< the year this airport expires
|
2007-03-07 13:11:48 +01:00
|
|
|
};
|
2004-08-09 19:04:08 +02:00
|
|
|
|
2007-02-15 21:35:45 +01:00
|
|
|
DECLARE_ENUM_AS_BIT_SET(AirportFTAClass::Flags)
|
|
|
|
|
|
|
|
|
2009-06-21 23:05:06 +02:00
|
|
|
/** Internal structure used in openttd - Finite sTate mAchine --> FTA */
|
2007-03-07 13:11:48 +01:00
|
|
|
struct AirportFTA {
|
2008-04-11 20:00:51 +02:00
|
|
|
AirportFTA *next; ///< possible extra movement choices from this position
|
|
|
|
uint64 block; ///< 64 bit blocks (st->airport_flags), should be enough for the most complex airports
|
|
|
|
byte position; ///< the position that an airplane is at
|
|
|
|
byte next_position; ///< next position from this position
|
|
|
|
byte heading; ///< heading (current orders), guiding an airplane to its target on an airport
|
2007-03-07 13:11:48 +01:00
|
|
|
};
|
2004-08-09 19:04:08 +02:00
|
|
|
|
2007-03-07 12:47:46 +01:00
|
|
|
void InitializeAirports();
|
|
|
|
void UnInitializeAirports();
|
2006-07-26 05:33:12 +02:00
|
|
|
const AirportFTAClass *GetAirport(const byte airport_type);
|
2004-08-09 19:04:08 +02:00
|
|
|
|
2009-06-12 16:53:57 +02:00
|
|
|
extern const byte * const _airport_sections[];
|
|
|
|
|
2004-08-09 19:04:08 +02:00
|
|
|
#endif /* AIRPORT_H */
|