]> git.mxchange.org Git - flightgear.git/commitdiff
New Nasal command _condition(p) where p is a property node containing
authormfranz <mfranz>
Sat, 17 Mar 2007 15:58:15 +0000 (15:58 +0000)
committermfranz <mfranz>
Sat, 17 Mar 2007 15:58:15 +0000 (15:58 +0000)
a condition as described in $FG_ROOT/Docs/README.condition. Returns 1 if
condition is true, 0 if false, and nil on error.

src/Scripting/NasalSys.cxx

index c25c3779c646f658fa9a245f59e55dcefad9cf96..bcc797e12073cb39287c867c72f955bf8681ec63 100644 (file)
@@ -12,6 +12,7 @@
 
 #include <simgear/nasal/nasal.h>
 #include <simgear/props/props.hxx>
+#include <simgear/props/condition.hxx>
 #include <simgear/math/sg_random.h>
 #include <simgear/misc/sg_path.hxx>
 #include <simgear/misc/interpolator.hxx>
@@ -280,6 +281,24 @@ static naRef f_removelistener(naContext c, naRef me, int argc, naRef* args)
     return nasal->removeListener(c, argc, args);
 }
 
+// condition(property) extension function. Evaluates standard <condition>
+// (see $FG_ROOT/Docs/README.condition) and returns state.
+static naRef f_condition(naContext c, naRef me, int argc, naRef* args)
+{
+    SGPropertyNode* node;
+    naRef prop = argc > 0 ? args[0] : naNil();
+    if(naIsString(prop)) node = fgGetNode(naStr_data(prop), true);
+    else if(naIsGhost(prop)) node = *(SGPropertyNode_ptr*)naGhost_ptr(prop);
+    else {
+        naRuntimeError(c, "condition() with invalid property");
+        return naNil();
+    }
+    SGCondition *cond = sgReadCondition(globals->get_props(), node);
+    bool result = cond->test();
+    delete cond;
+    return naNum(result == true ? 1 : 0);
+}
+
 // Returns a ghost handle to the argument to the currently executing
 // command
 static naRef f_cmdarg(naContext c, naRef me, int argc, naRef* args)
@@ -356,6 +375,7 @@ static struct { char* name; naCFunction func; } funcs[] = {
     { "settimer",  f_settimer },
     { "_setlistener", f_setlistener },
     { "removelistener", f_removelistener },
+    { "_condition", f_condition },
     { "_cmdarg",  f_cmdarg },
     { "_interpolate",  f_interpolate },
     { "rand",  f_rand },