changeset 12913:ad412abde7fc draft

(svn r17405) -Fix (r100): aircraft shouldn't be allowed to make turns bigger then 45 degrees while in flight
author yexo <yexo@openttd.org>
date Thu, 03 Sep 2009 12:11:31 +0000
parents 6e3b759a3b58
children 4c8c168e0b08
files src/aircraft.h src/aircraft_cmd.cpp src/saveload/vehicle_sl.cpp
diffstat 3 files changed, 14 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/aircraft.h
+++ b/src/aircraft.h
@@ -91,6 +91,7 @@
 	byte previous_pos;
 	StationID targetairport;
 	byte state;
+	DirectionByte last_direction;
 
 	/** 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
@@ -1048,6 +1048,8 @@
 	count = UpdateAircraftSpeed(v, speed_limit, hard_limit);
 	if (count == 0) return false;
 
+	if (v->load_unload_time_rem != 0) v->load_unload_time_rem--;
+
 	do {
 
 		GetNewVehiclePosResult gp;
@@ -1069,9 +1071,15 @@
 			/* Turn. Do it slowly if in the air. */
 			Direction newdir = GetDirectionTowards(v, x + amd->x, y + amd->y);
 			if (newdir != v->direction) {
-				v->direction = newdir;
-				if (!(amd->flag & AMED_SLOWTURN)) {
+				if (amd->flag & AMED_SLOWTURN) {
+					if (v->load_unload_time_rem == 0 || newdir == v->last_direction) {
+						v->load_unload_time_rem = 8;
+						v->last_direction = v->direction;
+						v->direction = newdir;
+					}
+				} else {
 					v->cur_speed >>= 1;
+					v->direction = newdir;
 				}
 			}
 
--- a/src/saveload/vehicle_sl.cpp
+++ b/src/saveload/vehicle_sl.cpp
@@ -591,9 +591,10 @@
 		     SLE_VAR(Aircraft, state,                 SLE_UINT8),
 
 		 SLE_CONDVAR(Aircraft, previous_pos,          SLE_UINT8,                    2, SL_MAX_VERSION),
+		 SLE_CONDVAR(Aircraft, last_direction,        SLE_UINT8,                    2, SL_MAX_VERSION),
 
-		/* reserve extra space in savegame here. (currently 15 bytes) */
-		SLE_CONDNULL(15,                                                           2, SL_MAX_VERSION),
+		/* reserve extra space in savegame here. (currently 14 bytes) */
+		SLE_CONDNULL(14,                                                           2, SL_MAX_VERSION),
 
 		     SLE_END()
 	};