SGWayPoint* FGRouteMgr::make_waypoint(const string& tgt ) {
string target(boost::to_upper_copy(tgt));
- // extract altitude
- double alt = cruise->getDoubleValue("altitude-ft") * SG_FEET_TO_METER;
+ double alt = -9999.0;
+ // extract altitude
size_t pos = target.find( '@' );
if ( pos != string::npos ) {
alt = atof( target.c_str() + pos + 1 );
void FGRouteMgr::InputListener::valueChanged(SGPropertyNode *prop)
{
const char *s = prop->getStringValue();
+ if (strlen(s) == 0) {
+ return;
+ }
+
if (!strcmp(s, "@CLEAR"))
mgr->init();
else if (!strcmp(s, "@ACTIVATE"))
bool FGRouteMgr::activate()
{
- if (_departure) {
+ if (isRouteActive()) {
+ SG_LOG(SG_AUTOPILOT, SG_WARN, "duplicate route-activation, no-op");
+ return false;
+ }
+
+ // only add departure waypoint if we're not airborne, so that
+ // in-air route activation doesn't confuse matters.
+ if (weightOnWheels->getBoolValue() && _departure) {
string runwayId(departure->getStringValue("runway"));
FGRunway* runway = NULL;
if (_departure->hasRunwayWithIdent(runwayId)) {
}
SGPropertyNode_ptr altProp = aWP->getChild("altitude-ft");
- double alt = cruise->getDoubleValue("altitude-ft") * SG_FEET_TO_METER;
+ double altM = cruise->getDoubleValue("altitude-ft") * SG_FEET_TO_METER;
if (altProp) {
- alt = altProp->getDoubleValue();
+ altM = altProp->getDoubleValue() * SG_FEET_TO_METER;
}
string ident(aWP->getStringValue("ident"));
if (aWP->hasChild("longitude-deg")) {
// explicit longitude/latitude
SGWayPoint swp(aWP->getDoubleValue("longitude-deg"),
- aWP->getDoubleValue("latitude-deg"), alt,
+ aWP->getDoubleValue("latitude-deg"), altM,
SGWayPoint::WGS84, ident, aWP->getStringValue("name"));
add_waypoint(swp);
} else if (aWP->hasChild("navid")) {
SGGeodesy::direct(p->geod(), radialDeg, offsetNm * SG_NM_TO_METER, pos, az2);
}
- SGWayPoint swp(pos.getLongitudeDeg(), pos.getLatitudeDeg(), alt,
+ SGWayPoint swp(pos.getLongitudeDeg(), pos.getLatitudeDeg(), altM,
SGWayPoint::WGS84, ident, "");
add_waypoint(swp);
} else {
throw sg_io_exception("bad route file, unknown waypoint:" + ident);
}
- SGWayPoint swp(p->longitude(), p->latitude(), alt,
+ SGWayPoint swp(p->longitude(), p->latitude(), altM,
SGWayPoint::WGS84, p->ident(), p->name());
add_waypoint(swp);
}