1 #ifndef __SCRIPT_INTERPRETER_H__
2 #define __SCRIPT_INTERPRETER_H__
9 #include "game_object.hpp"
10 #include "scripting/wrapper.hpp"
11 #include "scripting/wrapper_util.hpp"
12 #include "scripting/sound.hpp"
13 #include "scripting/level.hpp"
17 class ScriptInterpreter : public GameObject
20 ScriptInterpreter(const std::string& working_dir);
23 void register_sector(Sector* sector);
25 void draw(DrawingContext& );
28 void run_script(std::istream& in, const std::string& sourcename = "",
29 bool remove_when_terminated = true);
32 void expose_object(T* object, const std::string& name, bool free = false)
35 sq_pushstring(v, name.c_str(), -1);
38 SquirrelWrapper::create_squirrel_instance(v, object, free);
41 // register instance in root table
42 if(sq_createslot(v, -3) < 0) {
43 std::ostringstream msg;
44 msg << "Couldn't register object '" << name << "' in squirrel root table";
45 throw SquirrelError(v, msg.str());
51 void set_wakeup_time(float seconds);
53 /** helper function that parses a script, starts it and adds it to the sector
56 static void add_script_object(Sector* sector, const std::string& scriptname,
57 const std::string& script);
59 static ScriptInterpreter* current()
64 const std::string& get_working_directory() const
66 return working_directory;
71 static ScriptInterpreter* _current;
74 /// this directory is used as base for all filenames used in scripts
75 std::string working_directory;
76 Scripting::Sound* sound;
77 Scripting::Level* level;