(svn r8534) -Feature/Codechange: Provide aircraft with vertical separation depending on their altitude and velocity
authorcelestar
Fri, 02 Feb 2007 15:04:59 +0000
changeset 5908 5ff4fe308285
parent 5907 31c78a89f10c
child 5909 35595e20c0c4
(svn r8534) -Feature/Codechange: Provide aircraft with vertical separation depending on their altitude and velocity
src/aircraft_cmd.cpp
--- a/src/aircraft_cmd.cpp	Fri Feb 02 14:32:23 2007 +0000
+++ b/src/aircraft_cmd.cpp	Fri Feb 02 15:04:59 2007 +0000
@@ -898,14 +898,32 @@
 	return t < v->progress;
 }
 
-// get Aircraft running altitude
+/**
+ * Gets the cruise altitude of an aircraft.
+ * The cruise altitude is determined by the velocity of the vehicle
+ * and the direction it is moving
+ * @param v The vehicle. Should be an aircraft
+ * @returns Altitude in pixel units
+ */
 static byte GetAircraftFlyingAltitude(const Vehicle *v)
 {
-	switch (v->max_speed) {
-		case 37: return 162;
-		case 74: return 171;
-		default: return 180;
+	/* Make sure Aircraft fly no lower so that they don't conduct
+	 * CFITs (controlled flight into terrain)
+	 */
+	byte base_altitude = 150;
+
+	/* Make sure eastbound and westbound planes do not "crash" into each
+	 * other by providing them with vertical seperation
+	 */
+	switch (v->direction) {
+		case DIR_N: case DIR_NE: case DIR_E: case DIR_SE: base_altitude += 15; break;
+		default: break;
 	}
+
+	/* Make faster planes fly higher so that they can overtake slower ones */
+	base_altitude += min(30 * (v->max_speed / 37), 90);
+
+	return base_altitude;
 }
 
 static bool AircraftController(Vehicle *v)