This is the change where autopilot bindings are moved from fg_props.cxx to
newauto.cxx. Basically everything is the same functionally except for a changed in the initial altitude setting to 3000ft instead of meters (the panel is in feet).
This commit is contained in:
parent
34072bbc42
commit
a6cb16ce36
3 changed files with 404 additions and 393 deletions
|
@ -48,12 +48,6 @@
|
||||||
FGAutopilot *current_autopilot;
|
FGAutopilot *current_autopilot;
|
||||||
|
|
||||||
|
|
||||||
// Climb speed constants
|
|
||||||
// const double min_climb = 70.0; // kts
|
|
||||||
// const double best_climb = 75.0; // kts
|
|
||||||
// const double ideal_climb_rate = 500.0 * SG_FEET_TO_METER; // fpm -> mpm
|
|
||||||
// const double ideal_decent_rate = 1000.0 * SG_FEET_TO_METER; // fpm -> mpm
|
|
||||||
|
|
||||||
/// These statics will eventually go into the class
|
/// These statics will eventually go into the class
|
||||||
/// they are just here while I am experimenting -- NHV :-)
|
/// they are just here while I am experimenting -- NHV :-)
|
||||||
// AutoPilot Gain Adjuster members
|
// AutoPilot Gain Adjuster members
|
||||||
|
@ -72,38 +66,6 @@ extern char *coord_format_lon(float);
|
||||||
// constructor
|
// constructor
|
||||||
FGAutopilot::FGAutopilot()
|
FGAutopilot::FGAutopilot()
|
||||||
{
|
{
|
||||||
TargetClimbRate
|
|
||||||
= fgGetNode("/autopilot/config/target-climb-rate-fpm", true);
|
|
||||||
TargetDescentRate
|
|
||||||
= fgGetNode("/autopilot/config/target-descent-rate-fpm", true);
|
|
||||||
min_climb = fgGetNode("/autopilot/config/min-climb-speed-kt", true);
|
|
||||||
best_climb = fgGetNode("/autopilot/config/best-climb-speed-kt", true);
|
|
||||||
elevator_adj_factor
|
|
||||||
= fgGetNode("/autopilot/config/elevator-adj-factor", true);
|
|
||||||
integral_contrib
|
|
||||||
= fgGetNode("/autopilot/config/integral-contribution", true);
|
|
||||||
zero_pitch_throttle
|
|
||||||
= fgGetNode("/autopilot/config/zero-pitch-throttle", true);
|
|
||||||
zero_pitch_trim_full_throttle
|
|
||||||
= fgGetNode("/autopilot/config/zero-pitch-trim-full-throttle", true);
|
|
||||||
current_throttle = fgGetNode("/controls/throttle");
|
|
||||||
// initialize with defaults (in case config isn't there)
|
|
||||||
if ( TargetClimbRate->getFloatValue() < 1 )
|
|
||||||
fgSetFloat( "/autopilot/config/target-climb-rate-fpm", 500);
|
|
||||||
if ( TargetDescentRate->getFloatValue() < 1 )
|
|
||||||
fgSetFloat( "/autopilot/config/target-descent-rate-fpm", 1000 );
|
|
||||||
if ( min_climb->getFloatValue() < 1)
|
|
||||||
fgSetFloat( "/autopilot/config/min-climb-speed-kt", 70 );
|
|
||||||
if (best_climb->getFloatValue() < 1)
|
|
||||||
fgSetFloat( "/autopilot/config/best-climb-speed-kt", 120 );
|
|
||||||
if (elevator_adj_factor->getFloatValue() < 1)
|
|
||||||
fgSetFloat( "/autopilot/config/elevator-adj-factor", 5000 );
|
|
||||||
if ( integral_contrib->getFloatValue() < 0.0000001 )
|
|
||||||
fgSetFloat( "/autopilot/config/integral-contribution", 0.01 );
|
|
||||||
if ( zero_pitch_throttle->getFloatValue() < 0.0000001 )
|
|
||||||
fgSetFloat( "/autopilot/config/zero-pitch-throttle", 0.60 );
|
|
||||||
if ( zero_pitch_trim_full_throttle->getFloatValue() < 0.0000001 )
|
|
||||||
fgSetFloat( "/autopilot/config/zero-pitch-trim-full-throttle", 0.15 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// destructor
|
// destructor
|
||||||
|
@ -249,6 +211,43 @@ void FGAutopilot::update_old_control_values() {
|
||||||
void FGAutopilot::init() {
|
void FGAutopilot::init() {
|
||||||
SG_LOG( SG_AUTOPILOT, SG_INFO, "Init AutoPilot Subsystem" );
|
SG_LOG( SG_AUTOPILOT, SG_INFO, "Init AutoPilot Subsystem" );
|
||||||
|
|
||||||
|
// Autopilot control property static get/set bindings
|
||||||
|
fgTie("/autopilot/locks/altitude", getAPAltitudeLock, setAPAltitudeLock);
|
||||||
|
fgSetArchivable("/autopilot/locks/altitude");
|
||||||
|
fgTie("/autopilot/settings/altitude-ft", getAPAltitude, setAPAltitude);
|
||||||
|
fgSetArchivable("/autopilot/settings/altitude-ft");
|
||||||
|
fgTie("/autopilot/locks/glide-slope", getAPGSLock, setAPGSLock);
|
||||||
|
fgSetDouble("/autopilot/settings/altitude-ft", 3000.0f);
|
||||||
|
fgSetArchivable("/autopilot/locks/glide-slope");
|
||||||
|
fgTie("/autopilot/locks/terrain", getAPTerrainLock, setAPTerrainLock);
|
||||||
|
fgSetArchivable("/autopilot/locks/terrain");
|
||||||
|
fgTie("/autopilot/settings/climb-rate-fpm", getAPClimb, setAPClimb, false);
|
||||||
|
fgSetArchivable("/autopilot/settings/climb-rate-fpm");
|
||||||
|
fgTie("/autopilot/locks/heading", getAPHeadingLock, setAPHeadingLock);
|
||||||
|
fgSetArchivable("/autopilot/locks/heading");
|
||||||
|
fgTie("/autopilot/settings/heading-bug-deg",
|
||||||
|
getAPHeadingBug, setAPHeadingBug);
|
||||||
|
fgSetArchivable("/autopilot/settings/heading-bug-deg");
|
||||||
|
fgSetDouble("/autopilot/settings/heading-bug-deg", 0.0f);
|
||||||
|
fgTie("/autopilot/locks/wing-leveler", getAPWingLeveler, setAPWingLeveler);
|
||||||
|
fgSetArchivable("/autopilot/locks/wing-leveler");
|
||||||
|
fgTie("/autopilot/locks/nav[0]", getAPNAV1Lock, setAPNAV1Lock);
|
||||||
|
fgSetArchivable("/autopilot/locks/nav[0]");
|
||||||
|
fgTie("/autopilot/locks/auto-throttle",
|
||||||
|
getAPAutoThrottleLock, setAPAutoThrottleLock);
|
||||||
|
fgSetArchivable("/autopilot/locks/auto-throttle");
|
||||||
|
fgTie("/autopilot/control-overrides/rudder",
|
||||||
|
getAPRudderControl, setAPRudderControl);
|
||||||
|
fgSetArchivable("/autopilot/control-overrides/rudder");
|
||||||
|
fgTie("/autopilot/control-overrides/elevator",
|
||||||
|
getAPElevatorControl, setAPElevatorControl);
|
||||||
|
fgSetArchivable("/autopilot/control-overrides/elevator");
|
||||||
|
fgTie("/autopilot/control-overrides/throttle",
|
||||||
|
getAPThrottleControl, setAPThrottleControl);
|
||||||
|
fgSetArchivable("/autopilot/control-overrides/throttle");
|
||||||
|
|
||||||
|
|
||||||
|
// bind data input property nodes...
|
||||||
latitude_node = fgGetNode("/position/latitude-deg", true);
|
latitude_node = fgGetNode("/position/latitude-deg", true);
|
||||||
longitude_node = fgGetNode("/position/longitude-deg", true);
|
longitude_node = fgGetNode("/position/longitude-deg", true);
|
||||||
altitude_node = fgGetNode("/position/altitude-ft", true);
|
altitude_node = fgGetNode("/position/altitude-ft", true);
|
||||||
|
@ -256,14 +255,52 @@ void FGAutopilot::init() {
|
||||||
vertical_speed_node = fgGetNode("/velocities/vertical-speed-fps", true);
|
vertical_speed_node = fgGetNode("/velocities/vertical-speed-fps", true);
|
||||||
heading_node = fgGetNode("/orientation/heading-deg", true);
|
heading_node = fgGetNode("/orientation/heading-deg", true);
|
||||||
roll_node = fgGetNode("/orientation/roll-deg", true);
|
roll_node = fgGetNode("/orientation/roll-deg", true);
|
||||||
|
pitch_node = fgGetNode("/orientation/pitch-deg", true);
|
||||||
|
|
||||||
|
// bind config property nodes...
|
||||||
|
TargetClimbRate
|
||||||
|
= fgGetNode("/autopilot/config/target-climb-rate-fpm", true);
|
||||||
|
TargetDescentRate
|
||||||
|
= fgGetNode("/autopilot/config/target-descent-rate-fpm", true);
|
||||||
|
min_climb = fgGetNode("/autopilot/config/min-climb-speed-kt", true);
|
||||||
|
best_climb = fgGetNode("/autopilot/config/best-climb-speed-kt", true);
|
||||||
|
elevator_adj_factor
|
||||||
|
= fgGetNode("/autopilot/config/elevator-adj-factor", true);
|
||||||
|
integral_contrib
|
||||||
|
= fgGetNode("/autopilot/config/integral-contribution", true);
|
||||||
|
zero_pitch_throttle
|
||||||
|
= fgGetNode("/autopilot/config/zero-pitch-throttle", true);
|
||||||
|
zero_pitch_trim_full_throttle
|
||||||
|
= fgGetNode("/autopilot/config/zero-pitch-trim-full-throttle", true);
|
||||||
|
current_throttle = fgGetNode("/controls/throttle");
|
||||||
|
|
||||||
|
// initialize config properties with defaults (in case config isn't there)
|
||||||
|
if ( TargetClimbRate->getFloatValue() < 1 )
|
||||||
|
fgSetFloat( "/autopilot/config/target-climb-rate-fpm", 500);
|
||||||
|
if ( TargetDescentRate->getFloatValue() < 1 )
|
||||||
|
fgSetFloat( "/autopilot/config/target-descent-rate-fpm", 1000 );
|
||||||
|
if ( min_climb->getFloatValue() < 1)
|
||||||
|
fgSetFloat( "/autopilot/config/min-climb-speed-kt", 70 );
|
||||||
|
if (best_climb->getFloatValue() < 1)
|
||||||
|
fgSetFloat( "/autopilot/config/best-climb-speed-kt", 120 );
|
||||||
|
if (elevator_adj_factor->getFloatValue() < 1)
|
||||||
|
fgSetFloat( "/autopilot/config/elevator-adj-factor", 5000 );
|
||||||
|
if ( integral_contrib->getFloatValue() < 0.0000001 )
|
||||||
|
fgSetFloat( "/autopilot/config/integral-contribution", 0.01 );
|
||||||
|
if ( zero_pitch_throttle->getFloatValue() < 0.0000001 )
|
||||||
|
fgSetFloat( "/autopilot/config/zero-pitch-throttle", 0.60 );
|
||||||
|
if ( zero_pitch_trim_full_throttle->getFloatValue() < 0.0000001 )
|
||||||
|
fgSetFloat( "/autopilot/config/zero-pitch-trim-full-throttle", 0.15 );
|
||||||
|
|
||||||
|
/* set defaults */
|
||||||
heading_hold = false ; // turn the heading hold off
|
heading_hold = false ; // turn the heading hold off
|
||||||
altitude_hold = false ; // turn the altitude hold off
|
altitude_hold = false ; // turn the altitude hold off
|
||||||
auto_throttle = false ; // turn the auto throttle off
|
auto_throttle = false ; // turn the auto throttle off
|
||||||
heading_mode = DEFAULT_AP_HEADING_LOCK;
|
heading_mode = DEFAULT_AP_HEADING_LOCK;
|
||||||
|
|
||||||
sg_srandom_time();
|
DGTargetHeading = fgGetDouble("/autopilot/settings/heading-bug-deg");
|
||||||
DGTargetHeading = sg_random() * 360.0;
|
TargetHeading = fgGetDouble("/autopilot/settings/heading-bug-deg");
|
||||||
|
TargetAltitude = fgGetDouble("/autopilot/settings/altitude-ft") * SG_FEET_TO_METER;
|
||||||
|
|
||||||
// Initialize target location to startup location
|
// Initialize target location to startup location
|
||||||
old_lat = latitude_node->getDoubleValue();
|
old_lat = latitude_node->getDoubleValue();
|
||||||
|
@ -272,8 +309,6 @@ void FGAutopilot::init() {
|
||||||
|
|
||||||
MakeTargetLatLonStr( get_TargetLatitude(), get_TargetLongitude() );
|
MakeTargetLatLonStr( get_TargetLatitude(), get_TargetLongitude() );
|
||||||
|
|
||||||
TargetHeading = 0.0; // default direction, due north
|
|
||||||
TargetAltitude = 3000; // default altitude in meters
|
|
||||||
alt_error_accum = 0.0;
|
alt_error_accum = 0.0;
|
||||||
climb_error_accum = 0.0;
|
climb_error_accum = 0.0;
|
||||||
|
|
||||||
|
@ -726,11 +761,11 @@ int FGAutopilot::run() {
|
||||||
+ (double) integral_contrib->getFloatValue() * int_adj;
|
+ (double) integral_contrib->getFloatValue() * int_adj;
|
||||||
|
|
||||||
// stop on autopilot trim at 30% +/-
|
// stop on autopilot trim at 30% +/-
|
||||||
if ( total_adj > 0.3 ) {
|
// if ( total_adj > 0.3 ) {
|
||||||
total_adj = 0.3;
|
// total_adj = 0.3;
|
||||||
} else if ( total_adj < -0.3 ) {
|
// } else if ( total_adj < -0.3 ) {
|
||||||
total_adj = -0.3;
|
// total_adj = -0.3;
|
||||||
}
|
// }
|
||||||
|
|
||||||
// adjust for throttle pitch gain
|
// adjust for throttle pitch gain
|
||||||
total_adj += ((current_throttle->getFloatValue() - zero_pitch_throttle->getFloatValue())
|
total_adj += ((current_throttle->getFloatValue() - zero_pitch_throttle->getFloatValue())
|
||||||
|
|
|
@ -50,9 +50,11 @@ public:
|
||||||
FG_ALTITUDE_LOCK = 0, // lock to a specific altitude
|
FG_ALTITUDE_LOCK = 0, // lock to a specific altitude
|
||||||
FG_ALTITUDE_TERRAIN = 1, // try to maintain a specific AGL
|
FG_ALTITUDE_TERRAIN = 1, // try to maintain a specific AGL
|
||||||
FG_ALTITUDE_GS1 = 2, // follow glide slope 1
|
FG_ALTITUDE_GS1 = 2, // follow glide slope 1
|
||||||
FG_ALTITUDE_GS2 = 3 // follow glide slope 2
|
FG_ALTITUDE_GS2 = 3, // follow glide slope 2
|
||||||
|
FG_ALTITUDE_ARM = 4 // ascend to selected altitude
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
bool heading_hold; // the current state of the heading hold
|
bool heading_hold; // the current state of the heading hold
|
||||||
|
@ -71,16 +73,7 @@ private:
|
||||||
double TargetHeading; // the true heading the AP should steer to.
|
double TargetHeading; // the true heading the AP should steer to.
|
||||||
double TargetAltitude; // altitude to hold
|
double TargetAltitude; // altitude to hold
|
||||||
double TargetAGL; // the terrain separation
|
double TargetAGL; // the terrain separation
|
||||||
SGPropertyNode *min_climb; // minimum climb speed
|
|
||||||
SGPropertyNode *best_climb; // best climb speed
|
|
||||||
SGPropertyNode *elevator_adj_factor; // factor to optimize altitude hold adjustments
|
|
||||||
SGPropertyNode *integral_contrib; // amount of contribution of the integral
|
|
||||||
// component of the pid
|
|
||||||
SGPropertyNode *zero_pitch_throttle; // amount of throttle at which the aircraft does not pitch up
|
|
||||||
SGPropertyNode *zero_pitch_trim_full_throttle; // amount of trim required to level at full throttle
|
|
||||||
SGPropertyNode *TargetClimbRate; // target climb rate
|
|
||||||
SGPropertyNode *TargetDescentRate; // target decent rate
|
|
||||||
SGPropertyNode *current_throttle; // current throttle (engine 0)
|
|
||||||
double TargetSpeed; // speed to shoot for
|
double TargetSpeed; // speed to shoot for
|
||||||
double alt_error_accum; // altitude error accumulator
|
double alt_error_accum; // altitude error accumulator
|
||||||
double climb_error_accum; // climb error accumulator (for GS)
|
double climb_error_accum; // climb error accumulator (for GS)
|
||||||
|
@ -120,6 +113,7 @@ private:
|
||||||
char TargetHeadingStr[64];
|
char TargetHeadingStr[64];
|
||||||
char TargetAltitudeStr[64];
|
char TargetAltitudeStr[64];
|
||||||
|
|
||||||
|
// property nodes
|
||||||
SGPropertyNode *latitude_node;
|
SGPropertyNode *latitude_node;
|
||||||
SGPropertyNode *longitude_node;
|
SGPropertyNode *longitude_node;
|
||||||
SGPropertyNode *altitude_node;
|
SGPropertyNode *altitude_node;
|
||||||
|
@ -127,6 +121,18 @@ private:
|
||||||
SGPropertyNode *vertical_speed_node;
|
SGPropertyNode *vertical_speed_node;
|
||||||
SGPropertyNode *heading_node;
|
SGPropertyNode *heading_node;
|
||||||
SGPropertyNode *roll_node;
|
SGPropertyNode *roll_node;
|
||||||
|
SGPropertyNode *pitch_node;
|
||||||
|
|
||||||
|
SGPropertyNode *min_climb; // minimum climb speed
|
||||||
|
SGPropertyNode *best_climb; // best climb speed
|
||||||
|
SGPropertyNode *elevator_adj_factor; // factor to optimize altitude hold adjustments
|
||||||
|
SGPropertyNode *integral_contrib; // amount of contribution of the integral
|
||||||
|
// component of the pid
|
||||||
|
SGPropertyNode *zero_pitch_throttle; // amount of throttle at which the aircraft does not pitch up
|
||||||
|
SGPropertyNode *zero_pitch_trim_full_throttle; // amount of trim required to level at full throttle
|
||||||
|
SGPropertyNode *TargetClimbRate; // target climb rate
|
||||||
|
SGPropertyNode *TargetDescentRate; // target decent rate
|
||||||
|
SGPropertyNode *current_throttle; // current throttle (engine 0)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -229,4 +235,309 @@ extern FGAutopilot *current_autopilot;
|
||||||
#define DEFAULT_AP_HEADING_LOCK FGAutopilot::FG_DG_HEADING_LOCK
|
#define DEFAULT_AP_HEADING_LOCK FGAutopilot::FG_DG_HEADING_LOCK
|
||||||
// #define DEFAULT_AP_HEADING_LOCK FGAutopilot::FG_TRUE_HEADING_LOCK
|
// #define DEFAULT_AP_HEADING_LOCK FGAutopilot::FG_TRUE_HEADING_LOCK
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* static functions for autopilot properties
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the autopilot altitude lock (true=on).
|
||||||
|
*/
|
||||||
|
static bool
|
||||||
|
getAPAltitudeLock ()
|
||||||
|
{
|
||||||
|
return (current_autopilot->get_AltitudeEnabled() &&
|
||||||
|
current_autopilot->get_AltitudeMode()
|
||||||
|
== FGAutopilot::FG_ALTITUDE_LOCK);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the autopilot altitude lock (true=on).
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
setAPAltitudeLock (bool lock)
|
||||||
|
{
|
||||||
|
if (lock)
|
||||||
|
current_autopilot->set_AltitudeMode(FGAutopilot::FG_ALTITUDE_LOCK);
|
||||||
|
if (current_autopilot->get_AltitudeMode() == FGAutopilot::FG_ALTITUDE_LOCK)
|
||||||
|
current_autopilot->set_AltitudeEnabled(lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the autopilot target altitude in feet.
|
||||||
|
*/
|
||||||
|
static double
|
||||||
|
getAPAltitude ()
|
||||||
|
{
|
||||||
|
return current_autopilot->get_TargetAltitude() * SG_METER_TO_FEET;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the autopilot target altitude in feet.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
setAPAltitude (double altitude)
|
||||||
|
{
|
||||||
|
current_autopilot->set_TargetAltitude( altitude * SG_FEET_TO_METER );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the autopilot altitude lock (true=on).
|
||||||
|
*/
|
||||||
|
static bool
|
||||||
|
getAPGSLock ()
|
||||||
|
{
|
||||||
|
return (current_autopilot->get_AltitudeEnabled() &&
|
||||||
|
(current_autopilot->get_AltitudeMode()
|
||||||
|
== FGAutopilot::FG_ALTITUDE_GS1));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the autopilot altitude lock (true=on).
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
setAPGSLock (bool lock)
|
||||||
|
{
|
||||||
|
if (lock)
|
||||||
|
current_autopilot->set_AltitudeMode(FGAutopilot::FG_ALTITUDE_GS1);
|
||||||
|
if (current_autopilot->get_AltitudeMode() == FGAutopilot::FG_ALTITUDE_GS1)
|
||||||
|
current_autopilot->set_AltitudeEnabled(lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the autopilot terrain lock (true=on).
|
||||||
|
*/
|
||||||
|
static bool
|
||||||
|
getAPTerrainLock ()
|
||||||
|
{
|
||||||
|
return (current_autopilot->get_AltitudeEnabled() &&
|
||||||
|
(current_autopilot->get_AltitudeMode()
|
||||||
|
== FGAutopilot::FG_ALTITUDE_TERRAIN));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the autopilot terrain lock (true=on).
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
setAPTerrainLock (bool lock)
|
||||||
|
{
|
||||||
|
if (lock) {
|
||||||
|
current_autopilot->set_AltitudeMode(FGAutopilot::FG_ALTITUDE_TERRAIN);
|
||||||
|
current_autopilot
|
||||||
|
->set_TargetAGL(fgGetFloat("/position/altitude-agl-ft") *
|
||||||
|
SG_FEET_TO_METER);
|
||||||
|
cout << "Target AGL = "
|
||||||
|
<< fgGetFloat("/position/altitude-agl-ft") * SG_FEET_TO_METER
|
||||||
|
<< endl;
|
||||||
|
}
|
||||||
|
if (current_autopilot->get_AltitudeMode() == FGAutopilot::FG_ALTITUDE_TERRAIN)
|
||||||
|
current_autopilot->set_AltitudeEnabled(lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the autopilot target altitude in feet.
|
||||||
|
*/
|
||||||
|
static double
|
||||||
|
getAPClimb ()
|
||||||
|
{
|
||||||
|
return current_autopilot->get_TargetClimbRate() * SG_METER_TO_FEET;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the autopilot target altitude in feet.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
setAPClimb (double rate)
|
||||||
|
{
|
||||||
|
current_autopilot->set_TargetClimbRate( rate * SG_FEET_TO_METER );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the autopilot heading lock (true=on).
|
||||||
|
*/
|
||||||
|
static bool
|
||||||
|
getAPHeadingLock ()
|
||||||
|
{
|
||||||
|
return
|
||||||
|
(current_autopilot->get_HeadingEnabled() &&
|
||||||
|
current_autopilot->get_HeadingMode() == DEFAULT_AP_HEADING_LOCK);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the autopilot heading lock (true=on).
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
setAPHeadingLock (bool lock)
|
||||||
|
{
|
||||||
|
if (lock)
|
||||||
|
current_autopilot->set_HeadingMode(DEFAULT_AP_HEADING_LOCK);
|
||||||
|
if (current_autopilot->get_HeadingMode() == DEFAULT_AP_HEADING_LOCK)
|
||||||
|
current_autopilot->set_HeadingEnabled(lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the autopilot heading bug in degrees.
|
||||||
|
*/
|
||||||
|
static double
|
||||||
|
getAPHeadingBug ()
|
||||||
|
{
|
||||||
|
return current_autopilot->get_DGTargetHeading();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the autopilot heading bug in degrees.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
setAPHeadingBug (double heading)
|
||||||
|
{
|
||||||
|
current_autopilot->set_DGTargetHeading( heading );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the autopilot wing leveler lock (true=on).
|
||||||
|
*/
|
||||||
|
static bool
|
||||||
|
getAPWingLeveler ()
|
||||||
|
{
|
||||||
|
return
|
||||||
|
(current_autopilot->get_HeadingEnabled() &&
|
||||||
|
current_autopilot->get_HeadingMode() == FGAutopilot::FG_TC_HEADING_LOCK);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the autopilot wing leveler lock (true=on).
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
setAPWingLeveler (bool lock)
|
||||||
|
{
|
||||||
|
if (lock)
|
||||||
|
current_autopilot->set_HeadingMode(FGAutopilot::FG_TC_HEADING_LOCK);
|
||||||
|
if (current_autopilot->get_HeadingMode() == FGAutopilot::FG_TC_HEADING_LOCK)
|
||||||
|
current_autopilot->set_HeadingEnabled(lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return true if the autopilot is locked to NAV1.
|
||||||
|
*/
|
||||||
|
static bool
|
||||||
|
getAPNAV1Lock ()
|
||||||
|
{
|
||||||
|
return
|
||||||
|
(current_autopilot->get_HeadingEnabled() &&
|
||||||
|
current_autopilot->get_HeadingMode() == FGAutopilot::FG_HEADING_NAV1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the autopilot NAV1 lock.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
setAPNAV1Lock (bool lock)
|
||||||
|
{
|
||||||
|
if (lock)
|
||||||
|
current_autopilot->set_HeadingMode(FGAutopilot::FG_HEADING_NAV1);
|
||||||
|
if (current_autopilot->get_HeadingMode() == FGAutopilot::FG_HEADING_NAV1)
|
||||||
|
current_autopilot->set_HeadingEnabled(lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the autopilot autothrottle lock.
|
||||||
|
*/
|
||||||
|
static bool
|
||||||
|
getAPAutoThrottleLock ()
|
||||||
|
{
|
||||||
|
return current_autopilot->get_AutoThrottleEnabled();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the autothrottle lock.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
setAPAutoThrottleLock (bool lock)
|
||||||
|
{
|
||||||
|
current_autopilot->set_AutoThrottleEnabled(lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// kludge
|
||||||
|
static double
|
||||||
|
getAPRudderControl ()
|
||||||
|
{
|
||||||
|
if (getAPHeadingLock())
|
||||||
|
return current_autopilot->get_TargetHeading();
|
||||||
|
else
|
||||||
|
return globals->get_controls()->get_rudder();
|
||||||
|
}
|
||||||
|
|
||||||
|
// kludge
|
||||||
|
static void
|
||||||
|
setAPRudderControl (double value)
|
||||||
|
{
|
||||||
|
if (getAPHeadingLock()) {
|
||||||
|
SG_LOG(SG_GENERAL, SG_DEBUG, "setAPRudderControl " << value );
|
||||||
|
value -= current_autopilot->get_TargetHeading();
|
||||||
|
current_autopilot->HeadingAdjust(value < 0.0 ? -1.0 : 1.0);
|
||||||
|
} else {
|
||||||
|
globals->get_controls()->set_rudder(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// kludge
|
||||||
|
static double
|
||||||
|
getAPElevatorControl ()
|
||||||
|
{
|
||||||
|
if (getAPAltitudeLock())
|
||||||
|
return current_autopilot->get_TargetAltitude();
|
||||||
|
else
|
||||||
|
return globals->get_controls()->get_elevator();
|
||||||
|
}
|
||||||
|
|
||||||
|
// kludge
|
||||||
|
static void
|
||||||
|
setAPElevatorControl (double value)
|
||||||
|
{
|
||||||
|
if (value != 0 && getAPAltitudeLock()) {
|
||||||
|
SG_LOG(SG_GENERAL, SG_DEBUG, "setAPElevatorControl " << value );
|
||||||
|
value -= current_autopilot->get_TargetAltitude();
|
||||||
|
current_autopilot->AltitudeAdjust(value < 0.0 ? 100.0 : -100.0);
|
||||||
|
} else {
|
||||||
|
globals->get_controls()->set_elevator(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// kludge
|
||||||
|
static double
|
||||||
|
getAPThrottleControl ()
|
||||||
|
{
|
||||||
|
if (getAPAutoThrottleLock())
|
||||||
|
return 0.0; // always resets
|
||||||
|
else
|
||||||
|
return globals->get_controls()->get_throttle(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// kludge
|
||||||
|
static void
|
||||||
|
setAPThrottleControl (double value)
|
||||||
|
{
|
||||||
|
if (getAPAutoThrottleLock())
|
||||||
|
current_autopilot->AutoThrottleAdjust(value < 0.0 ? -0.01 : 0.01);
|
||||||
|
else
|
||||||
|
globals->get_controls()->set_throttle(FGControls::ALL_ENGINES, value);
|
||||||
|
}
|
||||||
|
|
||||||
#endif // _NEWAUTO_HXX
|
#endif // _NEWAUTO_HXX
|
||||||
|
|
|
@ -29,7 +29,6 @@
|
||||||
#include STL_IOSTREAM
|
#include STL_IOSTREAM
|
||||||
|
|
||||||
#include <ATC/ATCdisplay.hxx>
|
#include <ATC/ATCdisplay.hxx>
|
||||||
#include <Autopilot/newauto.hxx>
|
|
||||||
#include <Aircraft/aircraft.hxx>
|
#include <Aircraft/aircraft.hxx>
|
||||||
#include <Time/tmp.hxx>
|
#include <Time/tmp.hxx>
|
||||||
#include <FDM/UIUCModel/uiuc_aircraftdir.h>
|
#include <FDM/UIUCModel/uiuc_aircraftdir.h>
|
||||||
|
@ -589,307 +588,6 @@ getHeadingMag ()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the autopilot altitude lock (true=on).
|
|
||||||
*/
|
|
||||||
static bool
|
|
||||||
getAPAltitudeLock ()
|
|
||||||
{
|
|
||||||
return (current_autopilot->get_AltitudeEnabled() &&
|
|
||||||
current_autopilot->get_AltitudeMode()
|
|
||||||
== FGAutopilot::FG_ALTITUDE_LOCK);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the autopilot altitude lock (true=on).
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
setAPAltitudeLock (bool lock)
|
|
||||||
{
|
|
||||||
if (lock)
|
|
||||||
current_autopilot->set_AltitudeMode(FGAutopilot::FG_ALTITUDE_LOCK);
|
|
||||||
if (current_autopilot->get_AltitudeMode() == FGAutopilot::FG_ALTITUDE_LOCK)
|
|
||||||
current_autopilot->set_AltitudeEnabled(lock);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the autopilot target altitude in feet.
|
|
||||||
*/
|
|
||||||
static double
|
|
||||||
getAPAltitude ()
|
|
||||||
{
|
|
||||||
return current_autopilot->get_TargetAltitude() * SG_METER_TO_FEET;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the autopilot target altitude in feet.
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
setAPAltitude (double altitude)
|
|
||||||
{
|
|
||||||
current_autopilot->set_TargetAltitude( altitude * SG_FEET_TO_METER );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the autopilot altitude lock (true=on).
|
|
||||||
*/
|
|
||||||
static bool
|
|
||||||
getAPGSLock ()
|
|
||||||
{
|
|
||||||
return (current_autopilot->get_AltitudeEnabled() &&
|
|
||||||
(current_autopilot->get_AltitudeMode()
|
|
||||||
== FGAutopilot::FG_ALTITUDE_GS1));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the autopilot altitude lock (true=on).
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
setAPGSLock (bool lock)
|
|
||||||
{
|
|
||||||
if (lock)
|
|
||||||
current_autopilot->set_AltitudeMode(FGAutopilot::FG_ALTITUDE_GS1);
|
|
||||||
if (current_autopilot->get_AltitudeMode() == FGAutopilot::FG_ALTITUDE_GS1)
|
|
||||||
current_autopilot->set_AltitudeEnabled(lock);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the autopilot terrain lock (true=on).
|
|
||||||
*/
|
|
||||||
static bool
|
|
||||||
getAPTerrainLock ()
|
|
||||||
{
|
|
||||||
return (current_autopilot->get_AltitudeEnabled() &&
|
|
||||||
(current_autopilot->get_AltitudeMode()
|
|
||||||
== FGAutopilot::FG_ALTITUDE_TERRAIN));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the autopilot terrain lock (true=on).
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
setAPTerrainLock (bool lock)
|
|
||||||
{
|
|
||||||
if (lock) {
|
|
||||||
current_autopilot->set_AltitudeMode(FGAutopilot::FG_ALTITUDE_TERRAIN);
|
|
||||||
current_autopilot
|
|
||||||
->set_TargetAGL(current_aircraft.fdm_state->get_Altitude_AGL() *
|
|
||||||
SG_FEET_TO_METER);
|
|
||||||
cout << "Target AGL = "
|
|
||||||
<< current_aircraft.fdm_state->get_Altitude_AGL() * SG_FEET_TO_METER
|
|
||||||
<< endl;
|
|
||||||
}
|
|
||||||
if (current_autopilot->get_AltitudeMode() == FGAutopilot::FG_ALTITUDE_TERRAIN)
|
|
||||||
current_autopilot->set_AltitudeEnabled(lock);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the autopilot target altitude in feet.
|
|
||||||
*/
|
|
||||||
static double
|
|
||||||
getAPClimb ()
|
|
||||||
{
|
|
||||||
return current_autopilot->get_TargetClimbRate() * SG_METER_TO_FEET;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the autopilot target altitude in feet.
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
setAPClimb (double rate)
|
|
||||||
{
|
|
||||||
current_autopilot->set_TargetClimbRate( rate * SG_FEET_TO_METER );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the autopilot heading lock (true=on).
|
|
||||||
*/
|
|
||||||
static bool
|
|
||||||
getAPHeadingLock ()
|
|
||||||
{
|
|
||||||
return
|
|
||||||
(current_autopilot->get_HeadingEnabled() &&
|
|
||||||
current_autopilot->get_HeadingMode() == DEFAULT_AP_HEADING_LOCK);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the autopilot heading lock (true=on).
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
setAPHeadingLock (bool lock)
|
|
||||||
{
|
|
||||||
if (lock)
|
|
||||||
current_autopilot->set_HeadingMode(DEFAULT_AP_HEADING_LOCK);
|
|
||||||
if (current_autopilot->get_HeadingMode() == DEFAULT_AP_HEADING_LOCK)
|
|
||||||
current_autopilot->set_HeadingEnabled(lock);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the autopilot heading bug in degrees.
|
|
||||||
*/
|
|
||||||
static double
|
|
||||||
getAPHeadingBug ()
|
|
||||||
{
|
|
||||||
return current_autopilot->get_DGTargetHeading();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the autopilot heading bug in degrees.
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
setAPHeadingBug (double heading)
|
|
||||||
{
|
|
||||||
current_autopilot->set_DGTargetHeading( heading );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the autopilot wing leveler lock (true=on).
|
|
||||||
*/
|
|
||||||
static bool
|
|
||||||
getAPWingLeveler ()
|
|
||||||
{
|
|
||||||
return
|
|
||||||
(current_autopilot->get_HeadingEnabled() &&
|
|
||||||
current_autopilot->get_HeadingMode() == FGAutopilot::FG_TC_HEADING_LOCK);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the autopilot wing leveler lock (true=on).
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
setAPWingLeveler (bool lock)
|
|
||||||
{
|
|
||||||
if (lock)
|
|
||||||
current_autopilot->set_HeadingMode(FGAutopilot::FG_TC_HEADING_LOCK);
|
|
||||||
if (current_autopilot->get_HeadingMode() == FGAutopilot::FG_TC_HEADING_LOCK)
|
|
||||||
current_autopilot->set_HeadingEnabled(lock);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return true if the autopilot is locked to NAV1.
|
|
||||||
*/
|
|
||||||
static bool
|
|
||||||
getAPNAV1Lock ()
|
|
||||||
{
|
|
||||||
return
|
|
||||||
(current_autopilot->get_HeadingEnabled() &&
|
|
||||||
current_autopilot->get_HeadingMode() == FGAutopilot::FG_HEADING_NAV1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the autopilot NAV1 lock.
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
setAPNAV1Lock (bool lock)
|
|
||||||
{
|
|
||||||
if (lock)
|
|
||||||
current_autopilot->set_HeadingMode(FGAutopilot::FG_HEADING_NAV1);
|
|
||||||
if (current_autopilot->get_HeadingMode() == FGAutopilot::FG_HEADING_NAV1)
|
|
||||||
current_autopilot->set_HeadingEnabled(lock);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the autopilot autothrottle lock.
|
|
||||||
*/
|
|
||||||
static bool
|
|
||||||
getAPAutoThrottleLock ()
|
|
||||||
{
|
|
||||||
return current_autopilot->get_AutoThrottleEnabled();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the autothrottle lock.
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
setAPAutoThrottleLock (bool lock)
|
|
||||||
{
|
|
||||||
current_autopilot->set_AutoThrottleEnabled(lock);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// kludge
|
|
||||||
static double
|
|
||||||
getAPRudderControl ()
|
|
||||||
{
|
|
||||||
if (getAPHeadingLock())
|
|
||||||
return current_autopilot->get_TargetHeading();
|
|
||||||
else
|
|
||||||
return globals->get_controls()->get_rudder();
|
|
||||||
}
|
|
||||||
|
|
||||||
// kludge
|
|
||||||
static void
|
|
||||||
setAPRudderControl (double value)
|
|
||||||
{
|
|
||||||
if (getAPHeadingLock()) {
|
|
||||||
SG_LOG(SG_GENERAL, SG_DEBUG, "setAPRudderControl " << value );
|
|
||||||
value -= current_autopilot->get_TargetHeading();
|
|
||||||
current_autopilot->HeadingAdjust(value < 0.0 ? -1.0 : 1.0);
|
|
||||||
} else {
|
|
||||||
globals->get_controls()->set_rudder(value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// kludge
|
|
||||||
static double
|
|
||||||
getAPElevatorControl ()
|
|
||||||
{
|
|
||||||
if (getAPAltitudeLock())
|
|
||||||
return current_autopilot->get_TargetAltitude();
|
|
||||||
else
|
|
||||||
return globals->get_controls()->get_elevator();
|
|
||||||
}
|
|
||||||
|
|
||||||
// kludge
|
|
||||||
static void
|
|
||||||
setAPElevatorControl (double value)
|
|
||||||
{
|
|
||||||
if (value != 0 && getAPAltitudeLock()) {
|
|
||||||
SG_LOG(SG_GENERAL, SG_DEBUG, "setAPElevatorControl " << value );
|
|
||||||
value -= current_autopilot->get_TargetAltitude();
|
|
||||||
current_autopilot->AltitudeAdjust(value < 0.0 ? 100.0 : -100.0);
|
|
||||||
} else {
|
|
||||||
globals->get_controls()->set_elevator(value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// kludge
|
|
||||||
static double
|
|
||||||
getAPThrottleControl ()
|
|
||||||
{
|
|
||||||
if (getAPAutoThrottleLock())
|
|
||||||
return 0.0; // always resets
|
|
||||||
else
|
|
||||||
return globals->get_controls()->get_throttle(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
// kludge
|
|
||||||
static void
|
|
||||||
setAPThrottleControl (double value)
|
|
||||||
{
|
|
||||||
if (getAPAutoThrottleLock())
|
|
||||||
current_autopilot->AutoThrottleAdjust(value < 0.0 ? -0.01 : 0.01);
|
|
||||||
else
|
|
||||||
globals->get_controls()->set_throttle(FGControls::ALL_ENGINES, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#if !defined(FG_NEW_ENVIRONMENT)
|
#if !defined(FG_NEW_ENVIRONMENT)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1118,39 +816,6 @@ fgInitProps ()
|
||||||
// Orientation
|
// Orientation
|
||||||
fgTie("/orientation/heading-magnetic-deg", getHeadingMag);
|
fgTie("/orientation/heading-magnetic-deg", getHeadingMag);
|
||||||
|
|
||||||
// Autopilot
|
|
||||||
fgTie("/autopilot/locks/altitude", getAPAltitudeLock, setAPAltitudeLock);
|
|
||||||
fgSetArchivable("/autopilot/locks/altitude");
|
|
||||||
fgTie("/autopilot/settings/altitude-ft", getAPAltitude, setAPAltitude);
|
|
||||||
fgSetArchivable("/autopilot/settings/altitude-ft");
|
|
||||||
fgTie("/autopilot/locks/glide-slope", getAPGSLock, setAPGSLock);
|
|
||||||
fgSetArchivable("/autopilot/locks/glide-slope");
|
|
||||||
fgTie("/autopilot/locks/terrain", getAPTerrainLock, setAPTerrainLock);
|
|
||||||
fgSetArchivable("/autopilot/locks/terrain");
|
|
||||||
fgTie("/autopilot/settings/climb-rate-fpm", getAPClimb, setAPClimb, false);
|
|
||||||
fgSetArchivable("/autopilot/settings/climb-rate-fpm");
|
|
||||||
fgTie("/autopilot/locks/heading", getAPHeadingLock, setAPHeadingLock);
|
|
||||||
fgSetArchivable("/autopilot/locks/heading");
|
|
||||||
fgTie("/autopilot/settings/heading-bug-deg",
|
|
||||||
getAPHeadingBug, setAPHeadingBug);
|
|
||||||
fgSetArchivable("/autopilot/settings/heading-bug-deg");
|
|
||||||
fgTie("/autopilot/locks/wing-leveler", getAPWingLeveler, setAPWingLeveler);
|
|
||||||
fgSetArchivable("/autopilot/locks/wing-leveler");
|
|
||||||
fgTie("/autopilot/locks/nav[0]", getAPNAV1Lock, setAPNAV1Lock);
|
|
||||||
fgSetArchivable("/autopilot/locks/nav[0]");
|
|
||||||
fgTie("/autopilot/locks/auto-throttle",
|
|
||||||
getAPAutoThrottleLock, setAPAutoThrottleLock);
|
|
||||||
fgSetArchivable("/autopilot/locks/auto-throttle");
|
|
||||||
fgTie("/autopilot/control-overrides/rudder",
|
|
||||||
getAPRudderControl, setAPRudderControl);
|
|
||||||
fgSetArchivable("/autopilot/control-overrides/rudder");
|
|
||||||
fgTie("/autopilot/control-overrides/elevator",
|
|
||||||
getAPElevatorControl, setAPElevatorControl);
|
|
||||||
fgSetArchivable("/autopilot/control-overrides/elevator");
|
|
||||||
fgTie("/autopilot/control-overrides/throttle",
|
|
||||||
getAPThrottleControl, setAPThrottleControl);
|
|
||||||
fgSetArchivable("/autopilot/control-overrides/throttle");
|
|
||||||
|
|
||||||
// Environment
|
// Environment
|
||||||
#if !defined(FG_NEW_ENVIRONMENT)
|
#if !defined(FG_NEW_ENVIRONMENT)
|
||||||
fgTie("/environment/visibility-m", getVisibility, setVisibility);
|
fgTie("/environment/visibility-m", getVisibility, setVisibility);
|
||||||
|
|
Loading…
Add table
Reference in a new issue