changeset 17257:d8adc59b7654 draft

(svn r21997) -Fix [FS#4473]: when the difference between force and resistance is smaller than the mass(*4) there would be no acceleration anymore, even when at higher (or lower) speed the force and resistance balance out better
author rubidium <rubidium@openttd.org>
date Sun, 06 Feb 2011 16:45:27 +0000
parents a0aa13a12f16
children da22d3fea00a
files src/ground_vehicle.cpp
diffstat 1 files changed, 10 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/ground_vehicle.cpp
+++ b/src/ground_vehicle.cpp
@@ -151,8 +151,16 @@
 	}
 
 	if (mode == AS_ACCEL) {
-		/* Divide by 4 to compensate for the wacky game scale. */
-		return (force - resistance) / (mass * 4);
+		/* Easy way out when there is no acceleration. */
+		if (force == resistance) return 0;
+
+		/* When we accelerate, make sure we always keep doing that, even when
+		 * the excess force is more than the mass. Otherwise a vehicle going
+		 * down hill will never slow down enough, and a vehicle that came up
+		 * a hill will never speed up enough to (eventually) get back to the
+		 * same (maximum) speed. */
+		int accel = (force - resistance) / (mass * 4);
+		return force < resistance ? min(-1, accel) : max(1, accel);
 	} else {
 		return min(-force - resistance, -10000) / mass;
 	}