1
0
Fork 0

Expose more runway methods to Nasal

This commit is contained in:
Christian Schmitt 2013-02-28 21:33:32 +01:00
parent 4f4f099ad5
commit ee1c8a8d66

View file

@ -379,12 +379,10 @@ static const char* airportGhostGetMember(naContext c, void* g, naRef field, naRe
double minLengthFt = fgGetDouble("/sim/navdb/min-runway-length-ft"); double minLengthFt = fgGetDouble("/sim/navdb/min-runway-length-ft");
for(unsigned int r=0; r<apt->numRunways(); ++r) { for(unsigned int r=0; r<apt->numRunways(); ++r) {
FGRunway* rwy(apt->getRunwayByIndex(r)); FGRunway* rwy(apt->getRunwayByIndex(r));
// ignore unusably short runways // ignore unusably short runways
if (rwy->lengthFt() < minLengthFt) { if (rwy->lengthFt() < minLengthFt) {
continue; continue;
} }
naRef rwyid = stringToNasal(c, rwy->ident()); naRef rwyid = stringToNasal(c, rwy->ident());
naRef rwydata = ghostForRunway(c, rwy); naRef rwydata = ghostForRunway(c, rwy);
naHash_set(*out, rwyid, rwydata); naHash_set(*out, rwyid, rwydata);
@ -756,7 +754,9 @@ static const char* runwayGhostGetMember(naContext c, void* g, naRef field, naRef
FGRunway* rwy = (FGRunway*) g; FGRunway* rwy = (FGRunway*) g;
if (!strcmp(fieldName, "threshold")) *out = naNum(rwy->displacedThresholdM()); if (!strcmp(fieldName, "threshold")) *out = naNum(rwy->displacedThresholdM());
else if (!strcmp(fieldName, "stopway")) *out = naNum(rwy->stopwayM()); else if (!strcmp(fieldName, "stopway")) *out = naNum(rwy->stopwayM());
else if (!strcmp(fieldName, "ils_frequency_mhz")) { else if (!strcmp(fieldName, "reciprocal")) {
*out = ghostForRunway(c, rwy->reciprocalRunway());
} else if (!strcmp(fieldName, "ils_frequency_mhz")) {
*out = rwy->ILS() ? naNum(rwy->ILS()->get_freq() / 100.0) : naNil(); *out = rwy->ILS() ? naNum(rwy->ILS()->get_freq() / 100.0) : naNil();
} else if (!strcmp(fieldName, "ils")) { } else if (!strcmp(fieldName, "ils")) {
*out = ghostForNavaid(c, rwy->ILS()); *out = ghostForNavaid(c, rwy->ILS());
@ -1197,6 +1197,22 @@ static naRef f_airport_runway(naContext c, naRef me, int argc, naRef* args)
return naNil(); return naNil();
} }
static naRef f_airport_runwaysWithoutReciprocals(naContext c, naRef me, int argc, naRef* args)
{
FGAirport* apt = airportGhost(me);
if (!apt) {
naRuntimeError(c, "airport.runwaysWithoutReciprocals called on non-airport object");
}
FGRunwayList rwylist(apt->getRunwaysWithoutReciprocals());
naRef runways = naNewVector(c);
for (unsigned int r=0; r<rwylist.size(); ++r) {
FGRunway* rwy(rwylist[r]);
naVec_append(runways, ghostForRunway(c, apt->getRunwayByIdent(rwy->ident())));
}
return runways;
}
static naRef f_airport_taxiway(naContext c, naRef me, int argc, naRef* args) static naRef f_airport_taxiway(naContext c, naRef me, int argc, naRef* args)
{ {
FGAirport* apt = airportGhost(me); FGAirport* apt = airportGhost(me);
@ -2412,6 +2428,7 @@ naRef initNasalPositioned(naRef globals, naContext c, naRef gcSave)
hashset(c, gcSave, "airportProto", airportPrototype); hashset(c, gcSave, "airportProto", airportPrototype);
hashset(c, airportPrototype, "runway", naNewFunc(c, naNewCCode(c, f_airport_runway))); hashset(c, airportPrototype, "runway", naNewFunc(c, naNewCCode(c, f_airport_runway)));
hashset(c, airportPrototype, "runwaysWithoutReciprocals", naNewFunc(c, naNewCCode(c, f_airport_runwaysWithoutReciprocals)));
hashset(c, airportPrototype, "helipad", naNewFunc(c, naNewCCode(c, f_airport_runway))); hashset(c, airportPrototype, "helipad", naNewFunc(c, naNewCCode(c, f_airport_runway)));
hashset(c, airportPrototype, "taxiway", naNewFunc(c, naNewCCode(c, f_airport_taxiway))); hashset(c, airportPrototype, "taxiway", naNewFunc(c, naNewCCode(c, f_airport_taxiway)));
hashset(c, airportPrototype, "tower", naNewFunc(c, naNewCCode(c, f_airport_tower))); hashset(c, airportPrototype, "tower", naNewFunc(c, naNewCCode(c, f_airport_tower)));