#include <simgear/misc/sg_path.hxx>
#include <simgear/structure/subsystem_mgr.hxx>
+#include <simgear/misc/sg_dir.hxx>
#include <simgear/nasal/nasal.h>
#include <simgear/scene/model/modellib.hxx>
#include <simgear/xml/easyxml.hxx>
// Loads a nasal script from an external file and inserts it as a
// global module of the specified name.
- void loadModule(SGPath file, const char* moduleName);
+ bool loadModule(SGPath file, const char* moduleName);
// Simple hook to run arbitrary source code. Returns a bool to
// indicate successful execution. Does *not* return any Nasal
// Callbacks for command and timer bindings
virtual bool handleCommand(const SGPropertyNode* arg);
- void createModule(const char* moduleName, const char* fileName,
+ bool createModule(const char* moduleName, const char* fileName,
const char* src, int len, const SGPropertyNode* cmdarg=0,
int argc=0, naRef*args=0);
private:
friend class FGNasalScript;
friend class FGNasalListener;
+ friend class FGNasalModuleListener;
//
// FGTimer subclass for handling Nasal timer callbacks.
static int _listenerId;
void loadPropertyScripts();
+ void loadPropertyScripts(SGPropertyNode* n);
+ void loadScriptDirectory(simgear::Dir nasalDir);
+ void addModule(string moduleName, simgear::PathList scripts);
void hashset(naRef hash, const char* key, naRef val);
void logError(naContext);
naRef parse(const char* filename, const char* buf, int len);
class FGNasalListener : public SGPropertyChangeListener {
public:
FGNasalListener(SGPropertyNode* node, naRef code, FGNasalSys* nasal,
- int key, int id, int type);
+ int key, int id, int init, int type);
virtual ~FGNasalListener();
virtual void valueChanged(SGPropertyNode* node);
int _gcKey;
int _id;
FGNasalSys* _nas;
+ int _init;
int _type;
unsigned int _active;
bool _dead;
- bool _first_call;
long _last_int;
double _last_float;
string _last_string;
void modelLoaded(const string& path, SGPropertyNode *prop, osg::Node *);
private:
+ static unsigned int _module_id;
string _module;
SGPropertyNode_ptr _root;
SGConstPropertyNode_ptr _unload;