]> git.mxchange.org Git - flightgear.git/blobdiff - src/AIModel/performancedata.cxx
bind the sky disable cutoff distance to a property
[flightgear.git] / src / AIModel / performancedata.cxx
index 5c0ebb593c9ea838cca2adb578baa049ffdb7e60..f8da70de615ac9c2566fa46b1bfeb0b84c2aead6 100644 (file)
@@ -1,18 +1,30 @@
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
 #include "performancedata.hxx"
 #include "AIAircraft.hxx"
 
+
+// For now, make this a define
+// Later on, additional class variables can simulate settings such as braking power
+// also, the performance parameters can be tweaked a little to add some personality
+// to the AIAircraft.
+#define BRAKE_SETTING 1.6
+
 PerformanceData::PerformanceData(double acceleration,
-                                 double deceleration,
-                                 double climbRate,
-                                 double descentRate,
-                                 double vRotate,
-                                 double vTakeOff,
-                                 double vClimb,
-                                 double vCruise,
-                                 double vDescent,
-                                 double vApproach,
-                                 double vTouchdown,
-                                 double vTaxi) :
+                                double deceleration,
+                                double climbRate,
+                                double descentRate,
+                                double vRotate,
+                                double vTakeOff,
+                                double vClimb,
+                                double vCruise,
+                                double vDescent,
+                                double vApproach,
+                                double vTouchdown,
+                                double vTaxi) :
     _acceleration(acceleration),
     _deceleration(deceleration),
     _climbRate(climbRate),
@@ -37,11 +49,11 @@ PerformanceData::PerformanceData( const std::string& filename)
 PerformanceData::~PerformanceData()
 {}
 
-double PerformanceData::actualSpeed(FGAIAircraft* ac, double tgt_speed, double dt) {
+double PerformanceData::actualSpeed(FGAIAircraft* ac, double tgt_speed, double dt, bool maxBrakes) {
     // if (tgt_speed > _vTaxi & ac->onGround()) // maximum taxi speed on ground
     //    tgt_speed = _vTaxi;
     // bad idea for a take off roll :-)
-    
+
     double speed = ac->getSpeed();
     double speed_diff = tgt_speed - speed;
 
@@ -54,7 +66,13 @@ double PerformanceData::actualSpeed(FGAIAircraft* ac, double tgt_speed, double d
     } else if (speed_diff < 0.0) { // decelerate
         if (ac->onGround()) {
             // deceleration performance is better due to wheel brakes.
-            speed -= 3 * _deceleration * dt;
+            double brakePower = 0;
+            if (maxBrakes) {
+                brakePower = 3;
+            } else {
+                brakePower = BRAKE_SETTING;
+            }
+            speed -= brakePower * _deceleration * dt;
         } else {
             speed -= _deceleration * dt;
         }
@@ -71,10 +89,10 @@ double PerformanceData::actualBankAngle(FGAIAircraft* ac, double tgt_roll, doubl
     // check maximum bank angle
     if (fabs(tgt_roll) > _maxbank)
         tgt_roll = _maxbank * tgt_roll/fabs(tgt_roll);
-    
+
     double roll = ac->getRoll();
     double bank_diff = tgt_roll - roll;
-    
+
     if (fabs(bank_diff) > 0.2) {
         if (bank_diff > 0.0) {
             roll += _rollrate * dt;
@@ -103,7 +121,6 @@ double PerformanceData::actualPitch(FGAIAircraft* ac, double tgt_pitch, double d
 
         if (pitch > tgt_pitch)
             pitch = tgt_pitch;
-            
     } else if (pdiff < 0.0) { // nose down
         pitch -= 0.002*_descentRate * dt / 3.0;
 
@@ -116,6 +133,8 @@ double PerformanceData::actualPitch(FGAIAircraft* ac, double tgt_pitch, double d
 
 double PerformanceData::actualAltitude(FGAIAircraft* ac, double tgt_altitude, double dt) {
     if (ac->onGround()) {
+        //FIXME: a return sensible value here
+        return 0.0; // 0 for now to avoid compiler errors
     } else
         return ac->getAltitude() + ac->getVerticalSpeed()*dt/60.0;
 }
@@ -123,14 +142,13 @@ double PerformanceData::actualAltitude(FGAIAircraft* ac, double tgt_altitude, do
 double PerformanceData::actualVerticalSpeed(FGAIAircraft* ac, double tgt_vs, double dt) {
     double vs = ac->getVerticalSpeed();
     double vs_diff = tgt_vs - vs;
-    
-    if (fabs(vs_diff) > 10.0) {
+
+    if (fabs(vs_diff) > .001) {
         if (vs_diff > 0.0) {
             vs += _climbRate * dt / 3.0; //TODO avoid hardcoded 3 secs to attain climb rate from level flight
 
             if (vs > tgt_vs)
                 vs = tgt_vs;
-            
         } else if (vs_diff < 0.0) {
             vs -= _descentRate * dt / 3.0;