+ // Run init script
+ if(init_script != "") {
+ try {
+ // TODO we should keep the interpreter across sessions (or some variables)
+ // so that you can store information across levels/sectors...
+ delete interpreter;
+ interpreter = 0;
+ interpreter = new ScriptInterpreter();
+
+ // expose ScriptedObjects to the script
+ for(GameObjects::iterator i = gameobjects.begin();
+ i != gameobjects.end(); ++i) {
+ GameObject* object = *i;
+ Scripting::ScriptedObject* scripted_object
+ = dynamic_cast<Scripting::ScriptedObject*> (object);
+ if(!scripted_object)
+ continue;
+
+ std::cout << "Exposing " << scripted_object->get_name() << "\n";
+ interpreter->expose_object(scripted_object,
+ scripted_object->get_name(),
+ "ScriptedObject");
+ }
+ Scripting::Sound* sound = new Scripting::Sound();
+ interpreter->expose_object(sound, "Sound", "Sound");
+ TextObject* text_object = new TextObject();
+ add_object(text_object);
+ Scripting::Text* text = static_cast<Scripting::Text*> (text_object);
+ interpreter->expose_object(text, "Text", "Text");
+
+ std::string sourcename = std::string("Sector(") + name + ") - init";
+ std::istringstream in(init_script);
+ printf("Load script.\n");
+ interpreter->load_script(in, sourcename);
+ printf("run script.\n");
+ interpreter->run_script();
+ } catch(std::exception& e) {
+ std::cerr << "Couldn't execute init script: " << e.what() << "\n";
+ }
+ }