1
0
Fork 0

Extend Nasal FlightPlan API for new members

Cruise alt/speed, remarks and callsign are now exposed and settable
from Nasal. Duration and route path still to be done.
This commit is contained in:
James Turner 2018-08-30 16:40:16 +01:00
parent 40d5d918ba
commit e6a3b9c012

View file

@ -64,26 +64,26 @@ static void wayptGhostDestroy(void* g);
static void legGhostDestroy(void* g);
static void routeBaseGhostDestroy(void* g);
naGhostType PositionedGhostType = { positionedGhostDestroy, "positioned" };
static naGhostType PositionedGhostType = { positionedGhostDestroy, "positioned", nullptr, nullptr };
static const char* airportGhostGetMember(naContext c, void* g, naRef field, naRef* out);
naGhostType AirportGhostType = { positionedGhostDestroy, "airport", airportGhostGetMember, 0 };
static naGhostType AirportGhostType = { positionedGhostDestroy, "airport", airportGhostGetMember, nullptr };
static const char* navaidGhostGetMember(naContext c, void* g, naRef field, naRef* out);
naGhostType NavaidGhostType = { positionedGhostDestroy, "navaid", navaidGhostGetMember, 0 };
static naGhostType NavaidGhostType = { positionedGhostDestroy, "navaid", navaidGhostGetMember, nullptr };
static const char* runwayGhostGetMember(naContext c, void* g, naRef field, naRef* out);
naGhostType RunwayGhostType = { positionedGhostDestroy, "runway", runwayGhostGetMember, 0 };
naGhostType HelipadGhostType = { positionedGhostDestroy, "helipad", runwayGhostGetMember, 0 };
naGhostType TaxiwayGhostType = { positionedGhostDestroy, "taxiway", runwayGhostGetMember, 0 };
static naGhostType RunwayGhostType = { positionedGhostDestroy, "runway", runwayGhostGetMember, nullptr };
static naGhostType HelipadGhostType = { positionedGhostDestroy, "helipad", runwayGhostGetMember, nullptr };
static naGhostType TaxiwayGhostType = { positionedGhostDestroy, "taxiway", runwayGhostGetMember, nullptr };
static const char* fixGhostGetMember(naContext c, void* g, naRef field, naRef* out);
naGhostType FixGhostType = { positionedGhostDestroy, "fix", fixGhostGetMember, 0 };
static naGhostType FixGhostType = { positionedGhostDestroy, "fix", fixGhostGetMember, nullptr };
static const char* wayptGhostGetMember(naContext c, void* g, naRef field, naRef* out);
static void waypointGhostSetMember(naContext c, void* g, naRef field, naRef value);
naGhostType WayptGhostType = { wayptGhostDestroy,
static naGhostType WayptGhostType = { wayptGhostDestroy,
"waypoint",
wayptGhostGetMember,
waypointGhostSetMember};
@ -91,7 +91,7 @@ naGhostType WayptGhostType = { wayptGhostDestroy,
static const char* legGhostGetMember(naContext c, void* g, naRef field, naRef* out);
static void legGhostSetMember(naContext c, void* g, naRef field, naRef value);
naGhostType FPLegGhostType = { legGhostDestroy,
static naGhostType FPLegGhostType = { legGhostDestroy,
"flightplan-leg",
legGhostGetMember,
legGhostSetMember};
@ -99,14 +99,14 @@ naGhostType FPLegGhostType = { legGhostDestroy,
static const char* flightplanGhostGetMember(naContext c, void* g, naRef field, naRef* out);
static void flightplanGhostSetMember(naContext c, void* g, naRef field, naRef value);
naGhostType FlightPlanGhostType = { routeBaseGhostDestroy,
static naGhostType FlightPlanGhostType = { routeBaseGhostDestroy,
"flightplan",
flightplanGhostGetMember,
flightplanGhostSetMember
};
static const char* procedureGhostGetMember(naContext c, void* g, naRef field, naRef* out);
naGhostType ProcedureGhostType = { routeBaseGhostDestroy,
static naGhostType ProcedureGhostType = { routeBaseGhostDestroy,
"procedure",
procedureGhostGetMember,
0};
@ -678,7 +678,8 @@ static const char* flightplanGhostGetMember(naContext c, void* g, naRef field, n
if (!strcmp(fieldName, "parents")) {
*out = naNewVector(c);
naVec_append(*out, flightplanPrototype);
} else if (!strcmp(fieldName, "id")) *out = stringToNasal(c, fp->ident());
}
else if (!strcmp(fieldName, "id")) *out = stringToNasal(c, fp->ident());
else if (!strcmp(fieldName, "departure")) *out = ghostForAirport(c, fp->departureAirport());
else if (!strcmp(fieldName, "destination")) *out = ghostForAirport(c, fp->destinationAirport());
else if (!strcmp(fieldName, "departure_runway")) *out = ghostForRunway(c, fp->departureRunway());
@ -689,11 +690,18 @@ static const char* flightplanGhostGetMember(naContext c, void* g, naRef field, n
else if (!strcmp(fieldName, "star_trans")) *out = ghostForProcedure(c, fp->starTransition());
else if (!strcmp(fieldName, "approach")) *out = ghostForProcedure(c, fp->approach());
else if (!strcmp(fieldName, "current")) *out = naNum(fp->currentIndex());
else if (!strcmp(fieldName, "aircraftCategory")) *out = stringToNasal(c, fp->icaoAircraftCategory());
else if (!strcmp(fieldName, "followLegTrackToFix")) *out = naNum(fp->followLegTrackToFixes());
else if (!strcmp(fieldName, "active")) *out = naNum(fp->isActive());
else if (!strcmp(fieldName, "aircraftCategory")) *out = stringToNasal(c, fp->icaoAircraftCategory());
else if (!strcmp(fieldName, "followLegTrackToFix")) *out = naNum(fp->followLegTrackToFixes());
else if (!strcmp(fieldName, "active")) *out = naNum(fp->isActive());
else if (!strcmp(fieldName, "cruiseAltitudeFt")) *out = naNum(fp->cruiseAltitudeFt());
else if (!strcmp(fieldName, "cruiseFlightLevel")) *out = naNum(fp->cruiseFlightLevel());
else if (!strcmp(fieldName, "cruiseSpeedKt")) *out = naNum(fp->cruiseSpeedKnots());
else if (!strcmp(fieldName, "cruiseSpeedMach")) *out = naNum(fp->cruiseSpeedMach());
else if (!strcmp(fieldName, "remarks")) *out = stringToNasal(c, fp->remarks());
else if (!strcmp(fieldName, "callsign")) *out = stringToNasal(c, fp->callsign());
else {
return 0;
return nullptr;
}
return "";
@ -780,8 +788,14 @@ static void flightplanGhostSetMember(naContext c, void* g, naRef field, naRef va
}
if (naIsString(value)) {
const std::string s(naStr_data(value));
FGAirport* apt = fp->departureAirport();
fp->setSID(apt->findSIDWithIdent(naStr_data(value)));
auto trans = apt->selectSIDByTransition(s);
if (trans) {
fp->setSID(trans);
} else {
fp->setSID(apt->findSIDWithIdent(s));
}
return;
}
@ -804,8 +818,14 @@ static void flightplanGhostSetMember(naContext c, void* g, naRef field, naRef va
}
if (naIsString(value)) {
const std::string s(naStr_data(value));
FGAirport* apt = fp->destinationAirport();
fp->setSTAR(apt->findSTARWithIdent(naStr_data(value)));
auto trans = apt->selectSTARByTransition(s);
if (trans) {
fp->setSTAR(trans);
} else {
fp->setSTAR(apt->findSTARWithIdent(s));
}
return;
}
@ -838,8 +858,21 @@ static void flightplanGhostSetMember(naContext c, void* g, naRef field, naRef va
if (!naIsString(value)) naRuntimeError(c, "aircraftCategory must be a string");
fp->setIcaoAircraftCategory(naStr_data(value));
} else if (!strcmp(fieldName, "followLegTrackToFix")) {
int b = (int) value.num;
fp->setFollowLegTrackToFixes(b);
fp->setFollowLegTrackToFixes(static_cast<bool>(value.num));
} else if (!strcmp(fieldName, "cruiseAltitudeFt")) {
fp->setCruiseAltitudeFt(static_cast<int>(value.num));
} else if (!strcmp(fieldName, "cruiseFlightLevel")) {
fp->setCruiseFlightLevel(static_cast<int>(value.num));
} else if (!strcmp(fieldName, "cruiseSpeedKt")) {
fp->setCruiseSpeedKnots(static_cast<int>(value.num));
} else if (!strcmp(fieldName, "cruiseSpeedMach")) {
fp->setCruiseSpeedMach(value.num);
} else if (!strcmp(fieldName, "callsign")) {
if (!naIsString(value)) naRuntimeError(c, "flightplan.callsign must be a string");
fp->setCallsign(naStr_data(value));
} else if (!strcmp(fieldName, "remarks")) {
if (!naIsString(value)) naRuntimeError(c, "flightplan.remarks must be a string");
fp->setRemarks(naStr_data(value));
}
}