summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryexo <yexo@openttd.org>2009-09-09 00:03:35 +0000
committeryexo <yexo@openttd.org>2009-09-09 00:03:35 +0000
commite2122dc7f0e02e50ff2e17ae2d3a164671aa0975 (patch)
tree93ad200736bf53ed27b160b07de3798386983448
parent4924e4ffba7a956641272e2408f27cfb5b023d2a (diff)
downloadopenttd-e2122dc7f0e02e50ff2e17ae2d3a164671aa0975.tar.xz
(svn r17483) -Fix (r17405): when an aircraft starts flying in circles make it turn in the correct direction first before continuing
-rw-r--r--src/aircraft.h1
-rw-r--r--src/aircraft_cmd.cpp10
-rw-r--r--src/saveload/vehicle_sl.cpp5
3 files changed, 12 insertions, 4 deletions
diff --git a/src/aircraft.h b/src/aircraft.h
index 882272bfc..9d745f52e 100644
--- a/src/aircraft.h
+++ b/src/aircraft.h
@@ -92,6 +92,7 @@ struct Aircraft : public SpecializedVehicle<Aircraft, VEH_AIRCRAFT> {
StationID targetairport;
byte state;
DirectionByte last_direction;
+ byte number_consecutive_turns;
/** We don't want GCC to zero our struct! It already is zeroed and has an index! */
Aircraft() : SpecializedVehicle<Aircraft, VEH_AIRCRAFT>() {}
diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp
index cb38121d2..44d0b95c0 100644
--- a/src/aircraft_cmd.cpp
+++ b/src/aircraft_cmd.cpp
@@ -1071,9 +1071,14 @@ static bool AircraftController(Aircraft *v)
/* Turn. Do it slowly if in the air. */
Direction newdir = GetDirectionTowards(v, x + amd->x, y + amd->y);
if (newdir != v->direction) {
- if (amd->flag & AMED_SLOWTURN) {
+ if (amd->flag & AMED_SLOWTURN && v->number_consecutive_turns < 8) {
if (v->load_unload_time_rem == 0 || newdir == v->last_direction) {
- v->load_unload_time_rem = 1 << (_settings_game.vehicle.plane_speed - 1);
+ if (newdir == v->last_direction) {
+ v->number_consecutive_turns = 0;
+ } else {
+ v->number_consecutive_turns++;
+ }
+ v->load_unload_time_rem = 2 * _settings_game.vehicle.plane_speed;
v->last_direction = v->direction;
v->direction = newdir;
}
@@ -1094,6 +1099,7 @@ static bool AircraftController(Aircraft *v)
gp.new_tile = gp.old_tile = v->tile;
}
} else {
+ v->number_consecutive_turns = 0;
/* Move vehicle. */
gp = GetNewVehiclePos(v);
}
diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp
index 81260ca62..f50266d25 100644
--- a/src/saveload/vehicle_sl.cpp
+++ b/src/saveload/vehicle_sl.cpp
@@ -592,9 +592,10 @@ const SaveLoad *GetVehicleDescription(VehicleType vt)
SLE_CONDVAR(Aircraft, previous_pos, SLE_UINT8, 2, SL_MAX_VERSION),
SLE_CONDVAR(Aircraft, last_direction, SLE_UINT8, 2, SL_MAX_VERSION),
+ SLE_CONDVAR(Aircraft, number_consecutive_turns, SLE_UINT8, 2, SL_MAX_VERSION),
- /* reserve extra space in savegame here. (currently 14 bytes) */
- SLE_CONDNULL(14, 2, SL_MAX_VERSION),
+ /* reserve extra space in savegame here. (currently 13 bytes) */
+ SLE_CONDNULL(13, 2, SL_MAX_VERSION),
SLE_END()
};