Changeset - r6020:672428988b97
[Not reviewed]
master
0 4 0
tron - 18 years ago 2007-02-15 07:43:06
tron@openttd.org
(svn r8743) -Fix

-Codechange: Add a Z adjustment attribute for helicopter pads to AirportFTAClass to get rid of some special cases for oilrigs and heliports
4 files changed with 41 insertions and 49 deletions:
0 comments (0 inline, 0 general)
src/aircraft_cmd.cpp
Show inline comments
 
@@ -969,7 +969,8 @@ static bool AircraftController(Vehicle *
 
	}
 

	
 
	// get airport moving data
 
	const AirportMovingData *amd = GetAirport(st->airport_type)->MovingData(v->u.air.pos);
 
	const AirportFTAClass *afc = GetAirport(st->airport_type);
 
	const AirportMovingData *amd = afc->MovingData(v->u.air.pos);
 

	
 
	// Helicopter raise
 
	if (amd->flag & AMED_HELI_RAISE) {
 
@@ -1011,9 +1012,7 @@ static bool AircraftController(Vehicle *
 
			v->tile = st->airport_tile;
 

	
 
			// Find altitude of landing position.
 
			z = GetSlopeZ(x, y) + 1;
 
			if (st->airport_type == AT_OILRIG) z += 54;
 
			if (st->airport_type == AT_HELIPORT) z += 60;
 
			z = GetSlopeZ(x, y) + 1 + afc->delta_z;
 

	
 
			if (z == v->z_pos) {
 
				u = v->next->next;
src/airport.cpp
Show inline comments
 
@@ -41,7 +41,8 @@ void InitializeAirports(void)
 
		_airport_fta_country,
 
		_airport_depots_country,
 
		lengthof(_airport_depots_country),
 
		4, 3
 
		4, 3,
 
		0
 
	);
 

	
 
	CityAirport = new AirportFTAClass(
 
@@ -53,7 +54,8 @@ void InitializeAirports(void)
 
		_airport_fta_city,
 
		_airport_depots_city,
 
		lengthof(_airport_depots_city),
 
		6, 6
 
		6, 6,
 
		0
 
	);
 

	
 
	MetropolitanAirport = new AirportFTAClass(
 
@@ -65,7 +67,8 @@ void InitializeAirports(void)
 
		_airport_fta_metropolitan,
 
		_airport_depots_metropolitan,
 
		lengthof(_airport_depots_metropolitan),
 
		6, 6
 
		6, 6,
 
		0
 
	);
 

	
 
	InternationalAirport = new AirportFTAClass(
 
@@ -77,7 +80,8 @@ void InitializeAirports(void)
 
		_airport_fta_international,
 
		_airport_depots_international,
 
		lengthof(_airport_depots_international),
 
		7, 7
 
		7, 7,
 
		0
 
	);
 

	
 
	IntercontinentalAirport = new AirportFTAClass(
 
@@ -89,7 +93,8 @@ void InitializeAirports(void)
 
		_airport_fta_intercontinental,
 
		_airport_depots_intercontinental,
 
		lengthof(_airport_depots_intercontinental),
 
		9,11
 
		9, 11,
 
		0
 
	);
 

	
 
	Heliport = new AirportFTAClass(
 
@@ -101,7 +106,8 @@ void InitializeAirports(void)
 
		_airport_fta_heliport_oilrig,
 
		NULL,
 
		0,
 
		1, 1
 
		1, 1,
 
		60
 
	);
 

	
 
	Oilrig = new AirportFTAClass(
 
@@ -113,7 +119,8 @@ void InitializeAirports(void)
 
		_airport_fta_heliport_oilrig,
 
		NULL,
 
		0,
 
		1, 1
 
		1, 1,
 
		54
 
	);
 

	
 
	CommuterAirport = new AirportFTAClass(
 
@@ -125,7 +132,8 @@ void InitializeAirports(void)
 
		_airport_fta_commuter,
 
		_airport_depots_commuter,
 
		lengthof(_airport_depots_commuter),
 
		5,4
 
		5, 4,
 
		0
 
	);
 

	
 
	HeliDepot = new AirportFTAClass(
 
@@ -137,7 +145,8 @@ void InitializeAirports(void)
 
		_airport_fta_helidepot,
 
		_airport_depots_helidepot,
 
		lengthof(_airport_depots_helidepot),
 
		2,2
 
		2, 2,
 
		0
 
	);
 

	
 
	HeliStation = new AirportFTAClass(
 
@@ -149,7 +158,8 @@ void InitializeAirports(void)
 
		_airport_fta_helistation,
 
		_airport_depots_helistation,
 
		lengthof(_airport_depots_helistation),
 
		4,2
 
		4, 2,
 
		0
 
	);
 
}
 

	
 
@@ -187,7 +197,8 @@ AirportFTAClass::AirportFTAClass(
 
	const TileIndexDiffC *depots_,
 
	const byte nof_depots_,
 
	uint size_x_,
 
	uint size_y_
 
	uint size_y_,
 
	byte delta_z_
 
) :
 
	moving_data(moving_data_),
 
	terminals(terminals_),
 
@@ -197,7 +208,8 @@ AirportFTAClass::AirportFTAClass(
 
	nofelements(AirportGetNofElements(apFA)),
 
	entry_point(entry_point_),
 
	size_x(size_x_),
 
	size_y(size_y_)
 
	size_y(size_y_),
 
	delta_z(delta_z_)
 
{
 
	byte nofterminalgroups, nofhelipadgroups;
 

	
src/airport.h
Show inline comments
 
@@ -143,7 +143,8 @@ typedef struct AirportFTAClass {
 
			const TileIndexDiffC *depots,
 
			byte nof_depots,
 
			uint size_x,
 
			uint size_y
 
			uint size_y,
 
			byte delta_z
 
		);
 

	
 
		~AirportFTAClass();
 
@@ -165,6 +166,7 @@ typedef struct AirportFTAClass {
 
	AcceptPlanesByte acc_planes;          // accept airplanes or helicopters or both
 
	byte size_x;
 
	byte size_y;
 
	byte delta_z;                         // Z adjustment for helicopter pads
 
} AirportFTAClass;
 

	
 
// internal structure used in openttd - Finite sTate mAchine --> FTA
src/newgrf_engine.cpp
Show inline comments
 
@@ -288,7 +288,8 @@ enum {
 
static byte MapAircraftMovementState(const Vehicle *v)
 
{
 
	const Station *st = GetStation(v->u.air.targetairport);
 
	byte amdflag = GetAirport(st->airport_type)->MovingData(v->u.air.pos)->flag;
 
	const AirportFTAClass *afc = GetAirport(st->airport_type);
 
	byte amdflag = afc->MovingData(v->u.air.pos)->flag;
 

	
 
	switch (v->u.air.state) {
 
		case HANGAR:
 
@@ -347,26 +348,11 @@ static byte MapAircraftMovementState(con
 
			return AMS_TTDP_CLIMBING;
 

	
 
		case HELITAKEOFF: // Helicopter is moving to take off position.
 
			switch (st->airport_type) {
 
				case AT_SMALL:
 
				case AT_LARGE:
 
				case AT_METROPOLITAN:
 
				case AT_INTERNATIONAL:
 
				case AT_COMMUTER:
 
				case AT_INTERCON:
 
				/* Note, Helidepot and Helistation are treated as airports as
 
				 * helicopters are taking off from ground level. */
 
				case AT_HELIDEPOT:
 
				case AT_HELISTATION:
 
					if (amdflag & AMED_HELI_RAISE) return AMS_TTDP_HELI_TAKEOFF_AIRPORT;
 
					return AMS_TTDP_TO_JUNCTION;
 

	
 
				case AT_HELIPORT:
 
				case AT_OILRIG:
 
					return AMS_TTDP_HELI_TAKEOFF_HELIPORT;
 

	
 
				default:
 
					return AMS_TTDP_HELI_TAKEOFF_AIRPORT;
 
			if (afc->delta_z == 0) {
 
				return amdflag & AMED_HELI_RAISE ?
 
					AMS_TTDP_HELI_TAKEOFF_AIRPORT : AMS_TTDP_TO_JUNCTION;
 
			} else {
 
				return AMS_TTDP_HELI_TAKEOFF_HELIPORT;
 
			}
 

	
 
		case FLYING:
 
@@ -383,18 +369,11 @@ static byte MapAircraftMovementState(con
 
		case HELILANDING:
 
		case HELIENDLANDING: // Helicoptor is decending.
 
			if (amdflag & AMED_HELI_LOWER) {
 
				switch (st->airport_type) {
 
					case AT_HELIPORT:
 
					case AT_OILRIG:
 
						return AMS_TTDP_HELI_LAND_HELIPORT;
 

	
 
					default:
 
						/* Note, Helidepot and Helistation are treated as airports as
 
						 * helicopters are landing at ground level. */
 
						return AMS_TTDP_HELI_LAND_AIRPORT;
 
				}
 
				return afc->delta_z == 0 ?
 
					AMS_TTDP_HELI_LAND_AIRPORT : AMS_TTDP_HELI_LAND_HELIPORT;
 
			} else {
 
				return AMS_TTDP_FLIGHT_TO_TOWER;
 
			}
 
			return AMS_TTDP_FLIGHT_TO_TOWER;
 

	
 
		default:
 
			return AMS_TTDP_HANGAR;
0 comments (0 inline, 0 general)