changeset 13253:5b8c6c464036 draft

(svn r17762) -Fix [FS#3259]: don't let aircraft drive a while over the grass when landing at high altitude airports
author rubidium <rubidium@openttd.org>
date Sun, 11 Oct 2009 12:35:16 +0000
parents 3e1e4c346120
children 5c5b2167f108
files src/aircraft_cmd.cpp
diffstat 1 files changed, 9 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/aircraft_cmd.cpp
+++ b/src/aircraft_cmd.cpp
@@ -1133,19 +1133,21 @@
 				continue;
 			}
 
-			uint curz = GetSlopeZ(x, y) + 1;
+			uint curz = GetSlopeZ(x + amd->x, y + amd->y) + 1;
 
-			if (curz > z) {
-				z++;
-			} else {
-				int t = max(1U, dist - 4);
+			/* We're not flying below our destination, right? */
+			assert(curz <= z);
+			int t = max(1U, dist - 4);
+			int delta = z - curz;
 
+			/* Only start lowering when we're sufficiently close for a 1:1 glide */
+			if (delta >= t) {
 				z -= ((z - curz) + t - 1) / t;
-				if (z < curz) z = curz;
 			}
+			if (z < curz) z = curz;
 		}
 
-		/* We've landed. Decrase speed when we're reaching end of runway. */
+		/* We've landed. Decrease speed when we're reaching end of runway. */
 		if (amd->flag & AMED_BRAKE) {
 			uint curz = GetSlopeZ(x, y) + 1;