X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=src%2FMain%2Fpositioninit.cxx;h=816e997831fcaee8cf0fa37668f94c77a36450c2;hb=d127f7709f7ac64fbbc537131bfd02bb29bc1ebe;hp=eb35799679e013dc0a09cf7a90642fe982603245;hpb=1eb8ae1fbf43359eec09b99885a9280f529c86fb;p=flightgear.git diff --git a/src/Main/positioninit.cxx b/src/Main/positioninit.cxx index eb3579967..816e99783 100644 --- a/src/Main/positioninit.cxx +++ b/src/Main/positioninit.cxx @@ -37,6 +37,7 @@ #include using std::endl; +using std::string; namespace flightgear { @@ -151,11 +152,23 @@ static bool setPosFromAirportIDandHdg( const string& id, double tgt_hdg ) { const FGAirport* apt = fgFindAirportID(id); if (!apt) return false; - FGRunway* r = apt->findBestRunwayForHeading(tgt_hdg); - fgSetString("/sim/atc/runway", r->ident().c_str()); - SGGeod startPos = r->pointOnCenterline(fgGetDouble("/sim/airport/runways/start-offset-m", 5.0)); - fgApplyStartOffset(startPos, r->headingDeg(), tgt_hdg); + SGGeod startPos; + double heading = tgt_hdg; + if (apt->type() == FGPositioned::HELIPORT) { + if (apt->numHelipads() > 0) { + startPos = apt->getHelipadByIndex(0)->geod(); + } else { + startPos = apt->geod(); + } + } else { + FGRunway* r = apt->findBestRunwayForHeading(tgt_hdg); + fgSetString("/sim/atc/runway", r->ident().c_str()); + startPos = r->pointOnCenterline(fgGetDouble("/sim/airport/runways/start-offset-m", 5.0)); + heading = r->headingDeg(); + } + + fgApplyStartOffset(startPos, heading, tgt_hdg); return true; } @@ -316,7 +329,7 @@ static bool fgSetPosFromNAV( const string& id, const double& freq, FGPositioned: FGNavList::TypeFilter filter(type); const nav_list_type navlist = FGNavList::findByIdentAndFreq( id.c_str(), freq, &filter ); - if (navlist.size() == 0 ) { + if (navlist.empty()) { SG_LOG( SG_GENERAL, SG_ALERT, "Failed to locate NAV = " << id << ":" << freq ); return false;