#include <Main/globals.hxx>
#include <Main/util.hxx>
-#include <Scripting/NasalSys.hxx>
#include <Viewer/renderer.hxx>
#include <osgDB/ReadFile>
return 0;
}
- /**
- * Get current FGNasalSys instance.
- */
- static FGNasalSys* getNasalSys()
- {
- static FGNasalSys* nasal_sys = 0;
- // TODO if Nasal is able to be removed and/or recreated at runtime we need
- // to ensure that always the current instance is used
- if( !nasal_sys )
- {
- nasal_sys = dynamic_cast<FGNasalSys*>(globals->get_subsystem("nasal"));
- if( !nasal_sys )
- throw std::runtime_error("FGCanvasSystemAdapter: no NasalSys");
- }
-
- return nasal_sys;
- }
-
- //----------------------------------------------------------------------------
- naContext FGCanvasSystemAdapter::getNasalContext() const
- {
- return getNasalSys()->context();
- }
-
- //------------------------------------------------------------------------------
- naRef FGCanvasSystemAdapter::callMethod( naRef code,
- naRef self,
- int argc,
- naRef* args,
- naRef locals )
- {
- return getNasalSys()->callMethod(code, self, argc, args, locals);
- }
-
}
virtual void addCamera(osg::Camera* camera) const;
virtual void removeCamera(osg::Camera* camera) const;
virtual osg::Image* getImage(const std::string& path) const;
-
- virtual naContext getNasalContext() const;
- virtual naRef callMethod( naRef code,
- naRef self,
- int argc,
- naRef* args,
- naRef locals );
};
}
.member("size_y", &sc::Canvas::getSizeY)
.method("_createGroup", &f_canvasCreateGroup)
.method("_getGroup", &sc::Canvas::getGroup)
- .method("addEventListener", &sc::Canvas::addNasalEventListener);
+ .method("addEventListener", &sc::Canvas::addEventListener);
NasalElement::init("canvas.Element")
.member("_node_ghost", &elementGetNode<sc::Element>)
- .method("addEventListener", &sc::Element::addNasalEventListener)
+ .method("addEventListener", &sc::Element::addEventListener)
.method("getTransformedBounds", &f_elementGetTransformedBounds);
NasalGroup::init("canvas.Group")
.bases<NasalElement>()
_context = 0;
_globals = naNil();
_string = naNil();
- _callCount = 0;
_log = new simgear::BufferedLogCallback(SG_NASAL, SG_INFO);
_log->truncateAt(255);
sglog().addCallback(_log);
+
+ naSetErrorHandler(&logError);
}
// Utility. Sets a named key in a hash by C string, rather than nasal
naRef FGNasalSys::callMethod(naRef code, naRef self, int argc, naRef* args, naRef locals)
{
- naContext ctx = naNewContext();
- if(_callCount) naModUnlock();
- _callCount++;
- naRef result = naCall(ctx, code, argc, args, self, locals);
- if(naGetError(ctx))
- logError(ctx);
- _callCount--;
- if(_callCount) naModLock();
- naFreeContext(ctx);
- return result;
+ return naCallMethod(code, self, argc, args, locals);
}
FGNasalSys::~FGNasalSys()
void loadPropertyScripts(SGPropertyNode* n);
void loadScriptDirectory(simgear::Dir nasalDir);
void addModule(std::string moduleName, simgear::PathList scripts);
- void logError(naContext);
+ static void logError(naContext);
naRef parse(const char* filename, const char* buf, int len);
naRef genPropsModule();
SGPropertyNode_ptr _cmdArg;
- int _callCount;
-
simgear::BufferedLogCallback* _log;
public:
void handleTimer(NasalTimer* t);