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"
14 #include "scripting/squirrel_error.hpp"
18 class ScriptInterpreter : public GameObject
21 ScriptInterpreter(const std::string& working_dir);
24 void register_sector(Sector* sector);
26 void draw(DrawingContext& );
29 void run_script(std::istream& in, const std::string& sourcename = "",
30 bool remove_when_terminated = true);
33 void expose_object(T* object, const std::string& name, bool free = false)
36 sq_pushstring(v, name.c_str(), -1);
39 Scripting::create_squirrel_instance(v, object, free);
42 // register instance in root table
43 if(sq_createslot(v, -3) < 0) {
44 std::ostringstream msg;
45 msg << "Couldn't register object '" << name << "' in squirrel root table";
46 throw Scripting::SquirrelError(v, msg.str());
52 void set_wakeup_time(float seconds);
54 /** helper function that parses a script, starts it and adds it to the sector
57 static void add_script_object(Sector* sector, const std::string& scriptname,
58 const std::string& script);
60 static ScriptInterpreter* current()
65 const std::string& get_working_directory() const
67 return working_directory;
72 static ScriptInterpreter* _current;
75 /// this directory is used as base for all filenames used in scripts
76 std::string working_directory;
77 Scripting::Sound* sound;
78 Scripting::Level* level;