Nasal: allow filtering airport approaches by STAR
This commit is contained in:
parent
4df6cb0558
commit
416317e444
1 changed files with 22 additions and 1 deletions
|
@ -1694,8 +1694,14 @@ static naRef f_airport_approaches(naContext c, naRef me, int argc, naRef* args)
|
||||||
}
|
}
|
||||||
|
|
||||||
FGRunway* rwy = NULL;
|
FGRunway* rwy = NULL;
|
||||||
|
STAR* star = nullptr;
|
||||||
if (argc > 0 && (rwy = runwayGhost(args[0]))) {
|
if (argc > 0 && (rwy = runwayGhost(args[0]))) {
|
||||||
// ok
|
// ok
|
||||||
|
} else if (argc > 0 && (procedureGhost(args[0]))) {
|
||||||
|
Procedure* proc = procedureGhost(args[0]);
|
||||||
|
if (proc->type() != PROCEDURE_STAR)
|
||||||
|
return naNil();
|
||||||
|
star = static_cast<STAR*>(proc);
|
||||||
} else if (argc > 0 && naIsString(args[0])) {
|
} else if (argc > 0 && naIsString(args[0])) {
|
||||||
if (!apt->hasRunwayWithIdent(naStr_data(args[0]))) {
|
if (!apt->hasRunwayWithIdent(naStr_data(args[0]))) {
|
||||||
return naNil();
|
return naNil();
|
||||||
|
@ -1713,14 +1719,29 @@ static naRef f_airport_approaches(naContext c, naRef me, int argc, naRef* args)
|
||||||
naRef procId = stringToNasal(c, s->ident());
|
naRef procId = stringToNasal(c, s->ident());
|
||||||
naVec_append(approaches, procId);
|
naVec_append(approaches, procId);
|
||||||
}
|
}
|
||||||
|
} else if (star) {
|
||||||
|
std::set<std::string> appIds;
|
||||||
|
for (auto rwy : star->runways()) {
|
||||||
|
for (auto app : rwy->getApproaches()) {
|
||||||
|
appIds.insert(app->ident());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto s : appIds) {
|
||||||
|
naVec_append(approaches, stringToNasal(c, s));
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// no runway specified, report them all
|
// no runway specified, report them all
|
||||||
|
RunwayVec runways;
|
||||||
|
if (star)
|
||||||
|
runways = star->runways();
|
||||||
|
|
||||||
for (unsigned int s=0; s<apt->numApproaches(); ++s) {
|
for (unsigned int s=0; s<apt->numApproaches(); ++s) {
|
||||||
Approach* app = apt->getApproachByIndex(s);
|
Approach* app = apt->getApproachByIndex(s);
|
||||||
if ((ty != PROCEDURE_INVALID) && (app->type() != ty)) {
|
if ((ty != PROCEDURE_INVALID) && (app->type() != ty)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
naRef procId = stringToNasal(c, app->ident());
|
naRef procId = stringToNasal(c, app->ident());
|
||||||
naVec_append(approaches, procId);
|
naVec_append(approaches, procId);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue