+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
#include "performancedata.hxx"
#include "AIAircraft.hxx"
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),
// 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;
// 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;
if (pitch > tgt_pitch)
pitch = tgt_pitch;
-
} else if (pdiff < 0.0) { // nose down
pitch -= 0.002*_descentRate * dt / 3.0;
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;
}
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 (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;