summaryrefslogtreecommitdiff
path: root/src/aircraft_cmd.cpp
diff options
context:
space:
mode:
authorNiels Martin Hansen <nielsm@indvikleren.dk>2018-11-03 13:24:36 +0100
committerNiels Martin Hansen <nielsm@indvikleren.dk>2018-11-25 00:47:34 +0100
commitc84b9913bd80e3c596e00faabc0a924c12a9cb38 (patch)
tree91a536e498f138c1a7793d9e533e71abb43fe287 /src/aircraft_cmd.cpp
parentf35a59fd3834f55bf6bbfac5c487affcc993475c (diff)
downloadopenttd-c84b9913bd80e3c596e00faabc0a924c12a9cb38.tar.xz
Fix #6676: Prevent helicopters from stopping in midair during some kinds of landing
This adds a new flag that gets stored in the savegame, but it should still be compatible both ways, hence no save version bump.
Diffstat (limited to 'src/aircraft_cmd.cpp')
-rw-r--r--src/aircraft_cmd.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp
index fe8cf927d..b495a1dff 100644
--- a/src/aircraft_cmd.cpp
+++ b/src/aircraft_cmd.cpp
@@ -918,6 +918,8 @@ static bool AircraftController(Aircraft *v)
/* Helicopter landing. */
if (amd.flag & AMED_HELI_LOWER) {
+ SetBit(v->flags, VAF_HELI_DIRECT_DESCENT);
+
if (st == NULL) {
/* FIXME - AircraftController -> if station no longer exists, do not land
* helicopter will circle until sign disappears, then go to next order
@@ -938,7 +940,10 @@ static bool AircraftController(Aircraft *v)
Vehicle *u = v->Next()->Next();
/* Increase speed of rotors. When speed is 80, we've landed. */
- if (u->cur_speed >= 80) return true;
+ if (u->cur_speed >= 80) {
+ ClrBit(v->flags, VAF_HELI_DIRECT_DESCENT);
+ return true;
+ }
u->cur_speed += 4;
} else {
count = UpdateAircraftSpeed(v);
@@ -1603,6 +1608,7 @@ static void AircraftEventHandler_Flying(Aircraft *v, const AirportFTAClass *apc)
uint16 tsubspeed = v->subspeed;
if (!AirportHasBlock(v, current, apc)) {
v->state = landingtype; // LANDING / HELILANDING
+ if (v->state == HELILANDING) SetBit(v->flags, VAF_HELI_DIRECT_DESCENT);
/* it's a bit dirty, but I need to set position to next position, otherwise
* if there are multiple runways, plane won't know which one it took (because
* they all have heading LANDING). And also occupy that block! */