X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FScripting%2Fnasal-props.cxx;h=6112144f2af2c0b4e4495942deb21261c24ccefe;hb=1d99401c0427a2a4faae651995736d569f8bbd5e;hp=6eaa5ed3010be88b8596cb27728ffb6c2bf97daa;hpb=78b5dfb58b5ec9b8ca234d7ee4a922886cde754b;p=flightgear.git diff --git a/src/Scripting/nasal-props.cxx b/src/Scripting/nasal-props.cxx index 6eaa5ed30..6112144f2 100644 --- a/src/Scripting/nasal-props.cxx +++ b/src/Scripting/nasal-props.cxx @@ -185,7 +185,7 @@ static naRef f_getValue(naContext c, naRef me, int argc, naRef* args) case props::DOUBLE: { double dv = (*node)->getDoubleValue(); - if (osg::isNaN(dv)) { + if (SGMisc::isNaN(dv)) { SG_LOG(SG_NASAL, SG_ALERT, "Nasal getValue: property " << (*node)->getPath() << " is NaN"); return naNil(); } @@ -242,7 +242,7 @@ static naRef f_setValue(naContext c, naRef me, int argc, naRef* args) naRuntimeError(c, "props.setValue() with non-number"); double d = naNumValue(val).num; - if (osg::isNaN(d)) { + if (SGMisc::isNaN(d)) { naRuntimeError(c, "props.setValue() passed a NaN"); } @@ -282,7 +282,7 @@ static naRef f_setDoubleValue(naContext c, naRef me, int argc, naRef* args) if (naIsNil(r)) naRuntimeError(c, "props.setDoubleValue() with non-number"); - if (osg::isNaN(r.num)) { + if (SGMisc::isNaN(r.num)) { naRuntimeError(c, "props.setDoubleValue() passed a NaN"); } @@ -303,7 +303,7 @@ static naRef f_getChild(naContext c, naRef me, int argc, naRef* args) naRef child = naVec_get(argv, 0); if(!naIsString(child)) return naNil(); naRef idx = naNumValue(naVec_get(argv, 1)); - bool create = naTrue(naVec_get(argv, 2)); + bool create = naTrue(naVec_get(argv, 2)) != 0; SGPropertyNode* n; try { if(naIsNil(idx) || !naIsNum(idx)) { @@ -360,7 +360,7 @@ static naRef f_addChild(naContext c, naRef me, int argc, naRef* args) bool append = true; if( !naIsNil(ref_append) ) - append = naTrue(ref_append); + append = naTrue(ref_append) != 0; n = (*node)->addChild(naStr_data(child), min_index, append); } @@ -373,6 +373,45 @@ static naRef f_addChild(naContext c, naRef me, int argc, naRef* args) return propNodeGhostCreate(c, n); } +static naRef f_addChildren(naContext c, naRef me, int argc, naRef* args) +{ + NODEARG(); + naRef child = naVec_get(argv, 0); + if(!naIsString(child)) return naNil(); + naRef ref_count = naNumValue(naVec_get(argv, 1)); + naRef ref_min_index = naNumValue(naVec_get(argv, 2)); + naRef ref_append = naVec_get(argv, 3); + try + { + size_t count = 0; + if( !naIsNum(ref_count) ) + throw string("props.addChildren() missing number of children"); + count = ref_count.num; + + int min_index = 0; + if( !naIsNil(ref_min_index) && naIsNum(ref_min_index) ) + min_index = ref_min_index.num; + + bool append = true; + if( !naIsNil(ref_append) ) + append = naTrue(ref_append) != 0; + + const simgear::PropertyList& nodes = + (*node)->addChildren(naStr_data(child), count, min_index, append); + + naRef result = naNewVector(c); + for( size_t i = 0; i < nodes.size(); ++i ) + naVec_append(result, propNodeGhostCreate(c, nodes[i])); + return result; + } + catch (const string& err) + { + naRuntimeError(c, (char *)err.c_str()); + } + + return naNil(); +} + static naRef f_removeChild(naContext c, naRef me, int argc, naRef* args) { NODEARG(); @@ -395,7 +434,7 @@ static naRef f_removeChildren(naContext c, naRef me, int argc, naRef* args) if(naIsNil(argv) || naVec_size(argv) == 0) { // Remove all children for(int i = (*node)->nChildren() - 1; i >=0; i--) - naVec_append(result, propNodeGhostCreate(c, (*node)->removeChild(i))); + naVec_append(result, propNodeGhostCreate(c, (*node)->removeChild(i, false))); } else { // Remove all children of a specified name naRef name = naVec_get(argv, 0); @@ -445,7 +484,7 @@ static naRef f_getNode(naContext c, naRef me, int argc, naRef* args) { NODEARG(); naRef path = naVec_get(argv, 0); - bool create = naTrue(naVec_get(argv, 1)); + bool create = naTrue(naVec_get(argv, 1)) != 0; if(!naIsString(path)) return naNil(); SGPropertyNode* n; try { @@ -485,6 +524,7 @@ static struct { { f_getChild, "_getChild" }, { f_getChildren, "_getChildren" }, { f_addChild, "_addChild" }, + { f_addChildren, "_addChildren" }, { f_removeChild, "_removeChild" }, { f_removeChildren, "_removeChildren" }, { f_alias, "_alias" },