1
0
Fork 0

Add createFlightplan Nasal hook

Allows creating a new, inactive by empty Flightplan from Nasal. Can
also be used to load a flightplan:

var fp1 = createFlightplan();
var fp2 = createFlightplan("p3.xml");
This commit is contained in:
James Turner 2017-09-11 22:49:57 +01:00
parent ca067b1a82
commit 194d17ec94

View file

@ -1854,32 +1854,40 @@ static naRef f_tileIndex(naContext c, naRef me, int argc, naRef* args)
return naNum(b.gen_index()); return naNum(b.gen_index());
} }
static naRef f_route(naContext c, naRef me, int argc, naRef* args) static naRef f_createFlightplan(naContext c, naRef me, int argc, naRef* args)
{ {
if (argc == 0) { flightgear::FlightPlanRef fp(new flightgear::FlightPlan);
FGRouteMgr* rm = static_cast<FGRouteMgr*>(globals->get_subsystem("route-manager"));
return ghostForFlightPlan(c, rm->flightPlan()); if ((argc > 0) && naIsString(args[0])) {
} SGPath path(naStr_data(args[0]));
if (!path.exists()) {
if ((argc > 0) && naIsString(args[0])) { std::string pdata = path.utf8Str();
flightgear::FlightPlan* fp = new flightgear::FlightPlan; naRuntimeError(c, "createFlightplan, no file at path %s", pdata.c_str());
SGPath path(naStr_data(args[0])); }
if (!path.exists()) {
std::string pdata = path.utf8Str(); if (!fp->load(path)) {
naRuntimeError(c, "flightplan, no file at path %s", pdata.c_str()); SG_LOG(SG_NASAL, SG_WARN, "failed to load flight-plan from " << path);
return naNil();
}
} }
if (!fp->load(path)) { return ghostForFlightPlan(c, fp.get());
SG_LOG(SG_NASAL, SG_WARN, "failed to load flight-plan from " << path); }
delete fp;
return naNil(); static naRef f_flightplan(naContext c, naRef me, int argc, naRef* args)
{
if (argc == 0) {
FGRouteMgr* rm = static_cast<FGRouteMgr*>(globals->get_subsystem("route-manager"));
return ghostForFlightPlan(c, rm->flightPlan());
} }
return ghostForFlightPlan(c, fp); if ((argc > 0) && naIsString(args[0])) {
} return f_createFlightplan(c, me, argc, args);
}
naRuntimeError(c, "bad arguments to flightplan()");
return naNil(); naRuntimeError(c, "bad arguments to flightplan()");
return naNil();
} }
class NasalFPDelegate : public FlightPlan::Delegate class NasalFPDelegate : public FlightPlan::Delegate
@ -2643,7 +2651,8 @@ static struct { const char* name; naCFunction func; } funcs[] = {
{ "findNavaidsByFrequency", f_findNavaidsByFrequency }, { "findNavaidsByFrequency", f_findNavaidsByFrequency },
{ "findNavaidsByID", f_findNavaidsByIdent }, { "findNavaidsByID", f_findNavaidsByIdent },
{ "findFixesByID", f_findFixesByIdent }, { "findFixesByID", f_findFixesByIdent },
{ "flightplan", f_route }, { "flightplan", f_flightplan },
{ "createFlightplan", f_createFlightplan },
{ "registerFlightPlanDelegate", f_registerFPDelegate }, { "registerFlightPlanDelegate", f_registerFPDelegate },
{ "createWP", f_createWP }, { "createWP", f_createWP },
{ "createWPFrom", f_createWPFrom }, { "createWPFrom", f_createWPFrom },