FGRouteMgr::~FGRouteMgr() {
- delete route;
input->removeChangeListener(listener);
+ delete route;
}
target_altitude_ft->setDoubleValue( target_alt * SG_METER_TO_FEET );
altitude_set = true;
- if ( !on_ground() )
+ if ( !near_ground() )
altitude_lock->setStringValue( "altitude-hold" );
}
}
-int FGRouteMgr::new_waypoint( const string& Tgt_Alt, int n ) {
- string target = Tgt_Alt;
-
- // make upper case
- for (unsigned int i = 0; i < target.size(); i++)
- if (target[i] >= 'a' && target[i] <= 'z')
- target[i] -= 'a' - 'A';
-
+int FGRouteMgr::new_waypoint( const string& target, int n ) {
SGWayPoint *wp = 0;
int type = make_waypoint( &wp, target );
add_waypoint( *wp, n );
delete wp;
- if ( !on_ground() )
+ if ( !near_ground() )
fgSetString( "/autopilot/locks/heading", "true-heading-hold" );
}
return type;
}
-int FGRouteMgr::make_waypoint(SGWayPoint **wp, string& target) {
- double alt = -9999.0;
+int FGRouteMgr::make_waypoint( SGWayPoint **wp, const string& tgt ) {
+ string target = tgt;
+
+ // make upper case
+ for (unsigned int i = 0; i < target.size(); i++)
+ if (target[i] >= 'a' && target[i] <= 'z')
+ target[i] -= 'a' - 'A';
// extract altitude
- unsigned int pos = target.find( '@' );
+ double alt = -9999.0;
+ size_t pos = target.find( '@' );
if ( pos != string::npos ) {
alt = atof( target.c_str() + pos + 1 );
target = target.substr( 0, pos );
}
-bool FGRouteMgr::on_ground() {
+bool FGRouteMgr::near_ground() {
SGPropertyNode *gear = fgGetNode( "/gear/gear/wow", false );
if ( !gear || gear->getType() == SGPropertyNode::NONE )
return fgGetBool( "/sim/presets/onground", true );
+ if ( fgGetDouble("/position/altitude-agl-ft", 300.0)
+ < fgGetDouble("/autopilot/route-manager/min-lock-altitude-agl-ft") )
+ return true;
+
return gear->getBoolValue();
}