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"
15 #include "scripting/camera.hpp"
19 class ScriptInterpreter : public GameObject
22 ScriptInterpreter(const std::string& working_dir);
25 void register_sector(Sector* sector);
27 void draw(DrawingContext& );
30 void run_script(std::istream& in, const std::string& sourcename = "",
31 bool remove_when_terminated = true);
34 void expose_object(T* object, const std::string& name, bool free = false)
37 sq_pushstring(v, name.c_str(), -1);
40 Scripting::create_squirrel_instance(v, object, free);
43 // register instance in root table
44 if(sq_createslot(v, -3) < 0) {
45 std::ostringstream msg;
46 msg << "Couldn't register object '" << name << "' in squirrel root table";
47 throw Scripting::SquirrelError(v, msg.str());
53 void set_wakeup_time(float seconds);
55 /** helper function that parses a script, starts it and adds it to the sector
58 static void add_script_object(Sector* sector, const std::string& scriptname,
59 const std::string& script);
61 static ScriptInterpreter* current()
66 const std::string& get_working_directory() const
68 return working_directory;
73 static ScriptInterpreter* _current;
76 /// this directory is used as base for all filenames used in scripts
77 std::string working_directory;
78 Scripting::Sound* sound;
79 Scripting::Level* level;
80 Scripting::Camera* camera;