From 1d35fab8134a32dcbe3f0cedb29ddf24f7b21175 Mon Sep 17 00:00:00 2001 From: david Date: Mon, 14 Jan 2002 03:14:42 +0000 Subject: [PATCH] Changes to keep the various autopilot properties from stepping on each other -- it is now possible to set properties at startup (such as an autopilot altitude). The only user-visible change, other than the fact that the properties work as they are supposed to, is that the heading bug no longer starts at a random value. --- src/Main/fg_props.cxx | 68 +++++++++++++++++++++---------------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/src/Main/fg_props.cxx b/src/Main/fg_props.cxx index 87efdbf86..c883abe89 100644 --- a/src/Main/fg_props.cxx +++ b/src/Main/fg_props.cxx @@ -588,8 +588,10 @@ getAPAltitudeLock () static void setAPAltitudeLock (bool lock) { - current_autopilot->set_AltitudeMode(FGAutopilot::FG_ALTITUDE_LOCK); - current_autopilot->set_AltitudeEnabled(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); } @@ -609,7 +611,7 @@ getAPAltitude () static void setAPAltitude (double altitude) { - current_autopilot->set_TargetAltitude( altitude * SG_FEET_TO_METER ); + current_autopilot->set_TargetAltitude( altitude * SG_FEET_TO_METER ); } /** @@ -630,8 +632,10 @@ getAPGSLock () static void setAPGSLock (bool lock) { - current_autopilot->set_AltitudeMode(FGAutopilot::FG_ALTITUDE_GS1); - current_autopilot->set_AltitudeEnabled(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); } @@ -653,14 +657,17 @@ getAPTerrainLock () static void setAPTerrainLock (bool lock) { - current_autopilot->set_AltitudeMode(FGAutopilot::FG_ALTITUDE_TERRAIN); - current_autopilot->set_AltitudeEnabled(lock); - 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 (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); } @@ -702,12 +709,10 @@ getAPHeadingLock () static void setAPHeadingLock (bool lock) { - if (lock) { - current_autopilot->set_HeadingMode(DEFAULT_AP_HEADING_LOCK); - current_autopilot->set_HeadingEnabled(true); - } else { - current_autopilot->set_HeadingEnabled(false); - } + if (lock) + current_autopilot->set_HeadingMode(DEFAULT_AP_HEADING_LOCK); + if (current_autopilot->get_HeadingMode() == DEFAULT_AP_HEADING_LOCK) + current_autopilot->set_HeadingEnabled(lock); } @@ -749,12 +754,10 @@ getAPWingLeveler () static void setAPWingLeveler (bool lock) { - if (lock) { + if (lock) current_autopilot->set_HeadingMode(FGAutopilot::FG_TC_HEADING_LOCK); - current_autopilot->set_HeadingEnabled(true); - } else { - current_autopilot->set_HeadingEnabled(false); - } + if (current_autopilot->get_HeadingMode() == FGAutopilot::FG_TC_HEADING_LOCK) + current_autopilot->set_HeadingEnabled(lock); } /** @@ -775,13 +778,10 @@ getAPNAV1Lock () static void setAPNAV1Lock (bool lock) { - if (lock) { + if (lock) current_autopilot->set_HeadingMode(FGAutopilot::FG_HEADING_NAV1); - current_autopilot->set_HeadingEnabled(true); - } else if (current_autopilot->get_HeadingMode() == - FGAutopilot::FG_HEADING_NAV1) { - current_autopilot->set_HeadingEnabled(false); - } + if (current_autopilot->get_HeadingMode() == FGAutopilot::FG_HEADING_NAV1) + current_autopilot->set_HeadingEnabled(lock); } /** @@ -841,7 +841,7 @@ getAPElevatorControl () static void setAPElevatorControl (double value) { - if (getAPAltitudeLock()) { + 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); @@ -1136,20 +1136,20 @@ fgInitProps () // Autopilot fgTie("/autopilot/locks/altitude", getAPAltitudeLock, setAPAltitudeLock); fgSetArchivable("/autopilot/locks/altitude"); + std::cout << "[AP] altitude = " << fgGetDouble("/autopilot/settings/altitude-ft") << std::endl; fgTie("/autopilot/settings/altitude-ft", getAPAltitude, setAPAltitude); fgSetArchivable("/autopilot/settings/altitude-ft"); + std::cout << "[AP] altitude = " << fgGetDouble("/autopilot/settings/altitude-ft") << std::endl; 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/agl-ft", getAPAltitude, setAPAltitude); - fgSetArchivable("/autopilot/settings/agl-ft"); 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, false); + getAPHeadingBug, setAPHeadingBug); fgSetArchivable("/autopilot/settings/heading-bug-deg"); fgTie("/autopilot/locks/wing-leveler", getAPWingLeveler, setAPWingLeveler); fgSetArchivable("/autopilot/locks/wing-leveler"); -- 2.39.5