summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortron <tron@openttd.org>2007-02-15 07:43:06 +0000
committertron <tron@openttd.org>2007-02-15 07:43:06 +0000
commitf6b917f609d63230531d2086761242884c4f60e5 (patch)
treed09c3b4c1b06a7f956808046aadcd50adb3aa51e
parentac95825b9263c55cb73256939a725b7d7f1ea9e5 (diff)
downloadopenttd-f6b917f609d63230531d2086761242884c4f60e5.tar.xz
(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
-rw-r--r--src/aircraft_cmd.cpp7
-rw-r--r--src/airport.cpp36
-rw-r--r--src/airport.h4
-rw-r--r--src/newgrf_engine.cpp43
4 files changed, 41 insertions, 49 deletions
diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp
index a41ac1326..b84a2c276 100644
--- a/src/aircraft_cmd.cpp
+++ b/src/aircraft_cmd.cpp
@@ -969,7 +969,8 @@ static bool AircraftController(Vehicle *v)
}
// 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)
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;
diff --git a/src/airport.cpp b/src/airport.cpp
index c5b375c7f..89bf9e4ac 100644
--- a/src/airport.cpp
+++ b/src/airport.cpp
@@ -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;
diff --git a/src/airport.h b/src/airport.h
index f0be29815..b6c94d5b5 100644
--- a/src/airport.h
+++ b/src/airport.h
@@ -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
diff --git a/src/newgrf_engine.cpp b/src/newgrf_engine.cpp
index 08e910cf1..d052d16bb 100644
--- a/src/newgrf_engine.cpp
+++ b/src/newgrf_engine.cpp
@@ -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(const Vehicle *v)
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(const Vehicle *v)
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;