changeset 12989:6beea589ef72 draft

(svn r17483) -Fix (r17405): when an aircraft starts flying in circles make it turn in the correct direction first before continuing
author yexo <yexo@openttd.org>
date Wed, 09 Sep 2009 00:03:35 +0000
parents 6e086aa128a1
children 7b3e808cc2f8
files src/aircraft.h src/aircraft_cmd.cpp src/saveload/vehicle_sl.cpp
diffstat 3 files changed, 12 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/aircraft.h
+++ b/src/aircraft.h
@@ -92,6 +92,7 @@
 	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>() {}
--- a/src/aircraft_cmd.cpp
+++ b/src/aircraft_cmd.cpp
@@ -1071,9 +1071,14 @@
 			/* 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 @@
 					gp.new_tile = gp.old_tile = v->tile;
 				}
 			} else {
+				v->number_consecutive_turns = 0;
 				/* Move vehicle. */
 				gp = GetNewVehiclePos(v);
 			}
--- a/src/saveload/vehicle_sl.cpp
+++ b/src/saveload/vehicle_sl.cpp
@@ -592,9 +592,10 @@
 
 		 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()
 	};