]> git.mxchange.org Git - flightgear.git/blobdiff - src/Scripting/NasalPositioned.cxx
Interim windows build fix
[flightgear.git] / src / Scripting / NasalPositioned.cxx
index 6a52a0847e8b40e8e3928839b6de39f290f336e7..55c79a270792a1de24c1b8e00ef46ec76021cd39 100644 (file)
@@ -1351,21 +1351,11 @@ static naRef f_airport_parking(naContext c, naRef me, int argc, naRef* args)
     onlyAvailable = (args[1].num != 0.0);
   }
   
-  FGAirportDynamics* dynamics = apt->getDynamics();
-  PositionedIDVec parkings = flightgear::NavDataCache::instance()->airportItemsOfType(apt->guid(),
-                                                                                      FGPositioned::PARKING);
-  
-  BOOST_FOREACH(PositionedID parking, parkings) {
-    // filter out based on availability and type
-    if (onlyAvailable && !dynamics->isParkingAvailable(parking)) {
-      continue;
-    }
-    
-    FGParking* park = dynamics->getParking(parking);
-    if (!type.empty() && (park->getType() != type)) {
-      continue;
-    }
-    
+  FGAirportDynamicsRef dynamics = apt->getDynamics();
+  FGParkingList parkings = dynamics->getParkings(onlyAvailable, type);
+  FGParkingList::const_iterator it;
+  for (it = parkings.begin(); it != parkings.end(); ++it) {
+    FGParkingRef park = *it;
     const SGGeod& parkLoc = park->geod();
     naRef ph = naNewHash(c);
     hashset(c, ph, "name", stringToNasal(c, park->getName()));
@@ -1994,7 +1984,7 @@ static naRef f_createWPFrom(naContext c, naRef me, int argc, naRef* args)
   
   FGPositioned* positioned = positionedGhost(args[0]);
   if (!positioned) {
-    naRuntimeError(c, "createWPFrom: couldn;t convert arg[0] to FGPositioned");
+    naRuntimeError(c, "createWPFrom: couldn't convert arg[0] to FGPositioned");
   }
   
   WayptRef wpt;
@@ -2016,6 +2006,47 @@ static naRef f_createWPFrom(naContext c, naRef me, int argc, naRef* args)
   return ghostForWaypt(c, wpt);
 }
 
+static naRef f_createViaTo(naContext c, naRef me, int argc, naRef* args)
+{
+    if (argc != 2) {
+        naRuntimeError(c, "createViaTo: needs exactly two arguments");
+    }
+
+    std::string airwayName = naStr_data(args[0]);
+    Airway* airway = Airway::findByIdent(airwayName);
+    if (!airway) {
+        naRuntimeError(c, "createViaTo: couldn't find airway with provided name");
+    }
+
+    FGPositionedRef nav;
+    if (naIsString(args[1])) {
+        WayptRef enroute = airway->findEnroute(naStr_data(args[1]));
+        if (!enroute) {
+            naRuntimeError(c, "unknown waypoint on airway %s: %s",
+                           naStr_data(args[0]), naStr_data(args[1]));
+        }
+
+        nav = enroute->source();
+    } else {
+        nav = positionedGhost(args[1]);
+        if (!nav) {
+            naRuntimeError(c, "createViaTo: arg[1] is not a navaid");
+        }
+    }
+
+    if (!airway->containsNavaid(nav)) {
+        naRuntimeError(c, "createViaTo: navaid not on airway");
+    }
+
+    Via* via = new Via(NULL, airwayName, nav);
+    return ghostForWaypt(c, via);
+}
+
+static naRef f_createDiscontinuity(naContext c, naRef me, int argc, naRef* args)
+{
+    return ghostForWaypt(c, new Discontinuity(NULL));
+}
+
 static naRef f_flightplan_getWP(naContext c, naRef me, int argc, naRef* args)
 {
   FlightPlan* fp = flightplanGhost(me);
@@ -2232,6 +2263,18 @@ static naRef f_flightplan_finish(naContext c, naRef me, int argc, naRef* args)
     return naNil();
 }
 
+static naRef f_flightplan_activate(naContext c, naRef me, int argc, naRef* args)
+{
+    FlightPlan* fp = flightplanGhost(me);
+    if (!fp) {
+        naRuntimeError(c, "activate called on non-flightplan object");
+    }
+
+    fp->activate();
+    return naNil();
+}
+
+
 static naRef f_flightplan_indexOfWp(naContext c, naRef me, int argc, naRef* args)
 {
   FlightPlan* fp = flightplanGhost(me);
@@ -2472,6 +2515,8 @@ static struct { const char* name; naCFunction func; } funcs[] = {
   { "registerFlightPlanDelegate", f_registerFPDelegate },
   { "createWP", f_createWP },
   { "createWPFrom", f_createWPFrom },
+  { "createViaTo", f_createViaTo },
+  { "createDiscontinuity", f_createDiscontinuity },
   { "airwaysRoute", f_airwaySearch },
   { "magvar", f_magvar },
   { "courseAndDistance", f_courseAndDistance },
@@ -2519,6 +2564,7 @@ naRef initNasalPositioned(naRef globals, naContext c)
     hashset(c, flightplanPrototype, "clone", naNewFunc(c, naNewCCode(c, f_flightplan_clone))); 
     hashset(c, flightplanPrototype, "pathGeod", naNewFunc(c, naNewCCode(c, f_flightplan_pathGeod)));
     hashset(c, flightplanPrototype, "finish", naNewFunc(c, naNewCCode(c, f_flightplan_finish)));
+    hashset(c, flightplanPrototype, "activate", naNewFunc(c, naNewCCode(c, f_flightplan_activate)));
     hashset(c, flightplanPrototype, "indexOfWP", naNewFunc(c, naNewCCode(c, f_flightplan_indexOfWp)));
     
     waypointPrototype = naNewHash(c);