set_HeadingMode( FG_HEADING_WAYPOINT );
} else {
// end of the line
- heading_mode = FG_TRUE_HEADING_LOCK;
+ heading_mode = DEFAULT_AP_HEADING_LOCK;
// use current heading
TargetHeading = heading_node->getDoubleValue();
}
climb_rate =
( TargetAltitude -
globals->get_steam()->get_ALT_ft() * SG_FEET_TO_METER ) * 8.0;
+ } else if ( altitude_mode == FG_TRUE_ALTITUDE_LOCK ) {
+ climb_rate = ( TargetAltitude - alt ) * 8.0;
} else if ( altitude_mode == FG_ALTITUDE_GS1 ) {
double x = current_radiostack->get_navcom1()->get_nav_gs_dist();
double y = (altitude_node->getDoubleValue()
if ( waypoint.get_target_alt() > 0.0 ) {
TargetAltitude = waypoint.get_target_alt();
- altitude_mode = FG_ALTITUDE_LOCK;
+ altitude_mode = DEFAULT_AP_ALTITUDE_LOCK;
set_AltitudeEnabled( true );
MakeTargetAltitudeStr( TargetAltitude * SG_METER_TO_FEET );
}
alt_error_accum = 0.0;
- if ( altitude_mode == FG_ALTITUDE_LOCK ) {
+ if ( altitude_mode == DEFAULT_AP_ALTITUDE_LOCK ) {
if ( TargetAltitude < altitude_agl_node->getDoubleValue()
* SG_FEET_TO_METER ) {
}
void FGAutopilot::AltitudeSet( double new_altitude ) {
double target_alt = new_altitude;
+ altitude_mode = DEFAULT_AP_ALTITUDE_LOCK;
if ( !strcmp(fgGetString("/sim/startup/units"), "feet") ) {
target_alt = new_altitude * SG_FEET_TO_METER;
}
TargetAltitude = target_alt;
- altitude_mode = FG_ALTITUDE_LOCK;
if ( !strcmp(fgGetString("/sim/startup/units"), "feet") ) {
target_alt *= SG_METER_TO_FEET;
if ( !strcmp(fgGetString("/sim/startup/units"), "feet") )
target_agl *= SG_METER_TO_FEET;
- if ( altitude_mode == FG_ALTITUDE_LOCK ) {
+ if ( altitude_mode == DEFAULT_AP_ALTITUDE_LOCK ) {
MakeTargetAltitudeStr( target_alt );
} else if ( altitude_mode == FG_ALTITUDE_TERRAIN ) {
MakeTargetAltitudeStr( target_agl );
if ( heading_mode != FG_DG_HEADING_LOCK
&& heading_mode != FG_TRUE_HEADING_LOCK )
{
- heading_mode = FG_DG_HEADING_LOCK;
+ heading_mode = DEFAULT_AP_HEADING_LOCK;
}
if ( heading_mode == FG_DG_HEADING_LOCK ) {
void FGAutopilot::HeadingSet( double new_heading ) {
+ heading_mode = DEFAULT_AP_HEADING_LOCK;
if( heading_mode == FG_TRUE_HEADING_LOCK ) {
new_heading = NormalizeDegrees( new_heading );
TargetHeading = new_heading;
{
return (get_AltitudeEnabled() &&
get_AltitudeMode()
- == FGAutopilot::FG_ALTITUDE_LOCK);
+ == DEFAULT_AP_ALTITUDE_LOCK);
}
FGAutopilot::setAPAltitudeLock (bool lock)
{
if (lock)
- set_AltitudeMode(FGAutopilot::FG_ALTITUDE_LOCK);
- if (get_AltitudeMode() == FGAutopilot::FG_ALTITUDE_LOCK)
+ set_AltitudeMode(DEFAULT_AP_ALTITUDE_LOCK);
+ if (get_AltitudeMode() == DEFAULT_AP_ALTITUDE_LOCK)
set_AltitudeEnabled(lock);
}
public:
enum fgAutoHeadingMode {
- FG_DG_HEADING_LOCK = 0, // follow bug on directional gryo
+ FG_DG_HEADING_LOCK = 0, // follow bug on directional gryo (vacuum)
FG_TC_HEADING_LOCK = 1, // keep turn coordinator zero'd
FG_TRUE_HEADING_LOCK = 2, // lock to true heading (i.e. a perfect world)
FG_HEADING_NAV1 = 3, // follow nav1 radial
};
enum fgAutoAltitudeMode {
- FG_ALTITUDE_LOCK = 0, // lock to a specific altitude
+ FG_ALTITUDE_LOCK = 0, // lock to a specific altitude (indicated)
FG_ALTITUDE_TERRAIN = 1, // try to maintain a specific AGL
FG_ALTITUDE_GS1 = 2, // follow glide slope 1
FG_ALTITUDE_GS2 = 3, // follow glide slope 2
- FG_ALTITUDE_ARM = 4 // ascend to selected altitude
+ FG_ALTITUDE_ARM = 4, // ascend to selected altitude
+ FG_TRUE_ALTITUDE_LOCK = 5 // lock to a specific true altitude
+ // (i.e. a perfect world)
};
#define DEFAULT_AP_HEADING_LOCK FGAutopilot::FG_DG_HEADING_LOCK
-// #define DEFAULT_AP_HEADING_LOCK FGAutopilot::FG_TRUE_HEADING_LOCK
#define DEFAULT_AP_ALTITUDE_LOCK FGAutopilot::FG_ALTITUDE_LOCK
-
+//#define DEFAULT_AP_HEADING_LOCK FGAutopilot::FG_TRUE_HEADING_LOCK
+//#define DEFAULT_AP_ALTITUDE_LOCK FGAutopilot::FG_TRUE_ALTITUDE_LOCK
/**
* static functions for autopilot properties