#include <sys/types.h>
#include <sys/stat.h>
#include <fstream>
+#include <sstream>
#include <plib/ul.h>
// nil if it doesn't exist.
static naRef f_getprop(naContext c, naRef me, int argc, naRef* args)
{
+ using namespace simgear;
const SGPropertyNode* p = findnode(c, args, argc);
if(!p) return naNil();
switch(p->getType()) {
- case SGPropertyNode::BOOL: case SGPropertyNode::INT:
- case SGPropertyNode::LONG: case SGPropertyNode::FLOAT:
- case SGPropertyNode::DOUBLE:
+ case props::BOOL: case props::INT:
+ case props::LONG: case props::FLOAT:
+ case props::DOUBLE:
return naNum(p->getDoubleValue());
- case SGPropertyNode::STRING:
- case SGPropertyNode::UNSPECIFIED:
+ case props::STRING:
+ case props::UNSPECIFIED:
{
naRef nastr = naNewString(c);
const char* val = p->getStringValue();
naStr_fromdata(nastr, (char*)val, strlen(val));
return nastr;
}
- case SGPropertyNode::ALIAS: // <--- FIXME, recurse?
+ case props::ALIAS: // <--- FIXME, recurse?
default:
return naNil();
}
const char *s = "nasal-dir-initialized";
SGPropertyNode *signal = fgGetNode("/sim/signals", true);
signal->setBoolValue(s, true);
- signal->removeChildren(s);
+ signal->removeChildren(s, false);
// Pull scripts out of the property tree, too
loadPropertyScripts();
bool FGNasalListener::changed(SGPropertyNode* node)
{
- SGPropertyNode::Type type = node->getType();
- if(type == SGPropertyNode::NONE) return false;
- if(type == SGPropertyNode::UNSPECIFIED) return true;
+ using namespace simgear;
+ props::Type type = node->getType();
+ if(type == props::NONE) return false;
+ if(type == props::UNSPECIFIED) return true;
bool result;
switch(type) {
- case SGPropertyNode::BOOL:
- case SGPropertyNode::INT:
- case SGPropertyNode::LONG:
+ case props::BOOL:
+ case props::INT:
+ case props::LONG:
{
long l = node->getLongValue();
result = l != _last_int;
_last_int = l;
return result;
}
- case SGPropertyNode::FLOAT:
- case SGPropertyNode::DOUBLE:
+ case props::FLOAT:
+ case props::DOUBLE:
{
double d = node->getDoubleValue();
result = d != _last_float;
// destructor the <unload> script. The latter happens when the model branch
// is removed from the scene graph.
+unsigned int FGNasalModelData::_module_id = 0;
+
void FGNasalModelData::modelLoaded(const string& path, SGPropertyNode *prop,
osg::Node *)
{
if(!load && !_unload)
return;
- _module = path;
- if(_props)
- _module += ':' + _props->getPath();
+ std::stringstream m;
+ m << "__model" << _module_id++;
+ _module = m.str();
+
const char *s = load ? load->getStringValue() : "";
naRef arg[2];
arg[0] = nasalSys->propNodeGhost(_root);
arg[1] = nasalSys->propNodeGhost(prop);
- nasalSys->createModule(_module.c_str(), _module.c_str(), s, strlen(s),
+ nasalSys->createModule(_module.c_str(), path.c_str(), s, strlen(s),
_root, 2, arg);
- _props = 0;
}
FGNasalModelData::~FGNasalModelData()