]> git.mxchange.org Git - flightgear.git/blobdiff - src/AIModel/AIAircraft.cxx
Make the vertical acceleration rate scale with vertical performance. The
[flightgear.git] / src / AIModel / AIAircraft.cxx
index 9e5a5675b96c5c7d296aa9d660b9bd3a6eca22ac..62edd27616e76aa0de8692424f29682a727b6054 100644 (file)
@@ -193,7 +193,6 @@ void FGAIAircraft::Run(double dt) {
         // from control properties.  These default to the initial
         // settings in the config file, but can be changed "on the
         // fly".
-
         string lat_mode = props->getStringValue("controls/flight/lateral-mode");
         if ( lat_mode == "roll" ) {
             double angle
@@ -218,7 +217,7 @@ void FGAIAircraft::Run(double dt) {
 
         AccelTo( props->getDoubleValue("controls/flight/target-spd" ) );
     }
-
+      
     double turn_radius_ft;
     double turn_circum_ft;
     double speed_north_deg_sec;
@@ -233,19 +232,30 @@ void FGAIAircraft::Run(double dt) {
     } else {
         speed_diff = groundTargetSpeed - speed;
     }
+
     if (speed_diff > 0.0) {
         speed += performance->accel * dt;
-        if ( speed > tgt_speed ) speed = tgt_speed; // don't overshoot
+       if (no_roll) { // apply overshoot correction
+         if ( speed > groundTargetSpeed ) speed = groundTargetSpeed;
+       }else {
+         if ( speed > tgt_speed ) speed = tgt_speed;
+       }
     } else if (speed_diff < 0.0) {
         if (no_roll) {
             // on ground (aircraft can't roll)
+           // deceleration performance is better due to wheel brakes.
             speed -= performance->decel * dt * 3;
         } else {
             speed -= performance->decel * dt;
         }
-        if ( speed < tgt_speed ) speed = tgt_speed; // don't overshoot
+       if (no_roll) { // apply overshoot correction
+        if (speed < groundTargetSpeed ) speed = groundTargetSpeed;
+       } else { 
+         if ( speed < tgt_speed ) speed = tgt_speed;
+       }
     }
-
+    
+    
     // convert speed to degrees per second
     speed_north_deg_sec = cos( hdg * SGD_DEGREES_TO_RADIANS )
                           * speed * 1.686 / ft_per_deg_lat;
@@ -440,12 +450,12 @@ void FGAIAircraft::Run(double dt) {
     double vs_diff = tgt_vs - vs;
     if (fabs(vs_diff) > 10.0) {
         if (vs_diff > 0.0) {
-            vs += 900.0 * dt;
+            vs += (performance->climb_rate / 3.0) * dt;
 
             if (vs > tgt_vs)
                 vs = tgt_vs;
         } else {
-            vs -= 400.0 * dt;
+            vs -= (performance->descent_rate / 3.0) * dt;
 
            if (vs < tgt_vs)
                vs = tgt_vs;