changeset 5945:3fb7f8a4cadf draft

(svn r8611) -Fix: Moved the aircraft speed limiting into UpdateAircraftSpeed and enummed some speed limits. This should give a more steady display in the status bar during taxiing
author celestar <celestar@openttd.org>
date Tue, 06 Feb 2007 15:38:23 +0000
parents ca95cde4d1b4
children 1dc5b0b8fe69
files src/aircraft_cmd.cpp
diffstat 1 files changed, 16 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/src/aircraft_cmd.cpp
+++ b/src/aircraft_cmd.cpp
@@ -855,16 +855,25 @@
 	}
 }
 
-static bool UpdateAircraftSpeed(Vehicle *v)
+/** Special velocities for aircraft
+ */
+enum AircraftSpeedLimits {
+	SPEED_LIMIT_NONE   =  0,  ///< No environmental speed limit. Speed limit is type dependent
+	SPEED_LIMIT_TAXI   = 12,  ///< Maximum speed of an aircraft while taxiing
+	SPEED_LIMIT_BROKEN = 27,  ///< Maximum speed of an aircraft that is broken
+};
+
+static bool UpdateAircraftSpeed(Vehicle *v, uint speed_limit)
 {
 	uint spd = v->acceleration * 2;
 	byte t;
 
 	v->subspeed = (t=v->subspeed) + (byte)spd;
-	spd = min(v->cur_speed + (spd >> 8) + (v->subspeed < t), v->max_speed);
+	if (speed_limit == SPEED_LIMIT_NONE) speed_limit = v->max_speed;
+	spd = min(v->cur_speed + (spd >> 8) + (v->subspeed < t), speed_limit);
 
 	// adjust speed for broken vehicles
-	if (v->vehstatus & VS_AIRCRAFT_BROKEN) spd = min(spd, 27);
+	if (v->vehstatus & VS_AIRCRAFT_BROKEN) spd = min(spd, SPEED_LIMIT_BROKEN);
 
 	//updates statusbar only if speed have changed to save CPU time
 	if (spd != v->cur_speed) {
@@ -947,7 +956,7 @@
 			if (--u->cur_speed == 32) SndPlayVehicleFx(SND_18_HELICOPTER, v);
 		} else {
 			u->cur_speed = 32;
-			if (UpdateAircraftSpeed(v)) {
+			if (UpdateAircraftSpeed(v, SPEED_LIMIT_NONE)) {
 				v->tile = 0;
 
 				// Reached altitude?
@@ -963,7 +972,7 @@
 
 	// Helicopter landing.
 	if (amd->flag & AMED_HELI_LOWER) {
-		if (UpdateAircraftSpeed(v)) {
+		if (UpdateAircraftSpeed(v, SPEED_LIMIT_NONE)) {
 			if (st->airport_tile == 0) {
 				// FIXME - AircraftController -> if station no longer exists, do not land
 				// helicopter will circle until sign disappears, then go to next order
@@ -1007,8 +1016,6 @@
 	if (dist == 0) {
 		DirDiff dirdiff;
 
-		if (v->cur_speed > 12) v->cur_speed = 12;
-
 		// Change direction smoothly to final direction.
 		dirdiff = DirDifference(amd->direction, v->direction);
 		// if distance is 0, and plane points in right direction, no point in calling
@@ -1018,7 +1025,7 @@
 			return true;
 		}
 
-		if (!UpdateAircraftSpeed(v)) return false;
+		if (!UpdateAircraftSpeed(v, SPEED_LIMIT_TAXI)) return false;
 
 		v->direction = ChangeDir(v->direction, dirdiff > DIRDIFF_REVERSE ? DIRDIFF_45LEFT : DIRDIFF_45RIGHT);
 		v->cur_speed >>= 1;
@@ -1027,9 +1034,7 @@
 		return false;
 	}
 
-	if (!(amd->flag & AMED_NOSPDCLAMP) && v->cur_speed > 12) v->cur_speed = 12;
-
-	if (!UpdateAircraftSpeed(v)) return false;
+	if (!UpdateAircraftSpeed(v, ((amd->flag & AMED_NOSPDCLAMP) == 0) ? SPEED_LIMIT_TAXI : SPEED_LIMIT_NONE)) return false;
 
 	if (v->load_unload_time_rem != 0) v->load_unload_time_rem--;