// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA\r
// 02111-1307, USA.\r
//\r
-\r
#include <config.h>\r
+\r
#include <sstream>\r
+#include <stdexcept>\r
+#include <memory>\r
\r
-#include "scripttrigger.h"\r
-#include "game_session.h"\r
-#include "lisp/lisp.h"\r
-#include "lisp/writer.h"\r
-#include "object_factory.h"\r
-#include "scripting/script_interpreter.h"\r
-#include "sector.h"\r
+#include "scripttrigger.hpp"\r
+#include "game_session.hpp"\r
+#include "lisp/lisp.hpp"\r
+#include "lisp/writer.hpp"\r
+#include "object_factory.hpp"\r
+#include "scripting/script_interpreter.hpp"\r
+#include "sector.hpp"\r
\r
ScriptTrigger::ScriptTrigger(const lisp::Lisp& reader)\r
{\r
- bool must_activate;\r
+ bool must_activate = false;\r
\r
reader.get("x", bbox.p1.x);\r
reader.get("y", bbox.p1.y);\r
- float w, h;\r
+ float w = 0, h = 0;\r
reader.get("width", w);\r
reader.get("height", h);\r
bbox.set_size(w, h);\r
reader.get("script", script);\r
reader.get("button", must_activate);\r
+ if(script == "") {\r
+ throw std::runtime_error("Need to specify a script for trigger object");\r
+ }\r
\r
if (must_activate)\r
triggerevent = EVENT_ACTIVATE;\r
writer.write_float("width", bbox.get_width());\r
writer.write_float("height", bbox.get_height());\r
writer.write_string("script", script);\r
+ writer.write_bool("button", (triggerevent == EVENT_ACTIVATE) ? true : false);\r
\r
writer.end_list("scripttrigger");\r
}\r
void\r
ScriptTrigger::event(Player& , EventType type)\r
{\r
- if(type == triggerevent)\r
- {\r
- if (script != "")\r
- {\r
- try\r
- {\r
- ScriptInterpreter* interpreter = new ScriptInterpreter(Sector::current());\r
- std::istringstream in(script);\r
- interpreter->load_script(in, "trigger-script");\r
- interpreter->start_script();\r
- Sector::current()->add_object(interpreter);\r
- }\r
- catch(std::exception& e)\r
- {\r
- std::cerr << "Couldn't execute trigger script: " << e.what() << "\n";\r
- }\r
- }\r
- else\r
- {\r
- std::cerr << "... and where's the trigger script I'm supposed to run?\n";\r
- }\r
- }\r
+ if(type != triggerevent)\r
+ return;\r
+\r
+ ScriptInterpreter::add_script_object(Sector::current(), "trigger - scritp",\r
+ script);\r
}\r
\r
-IMPLEMENT_FACTORY(ScriptTrigger, "scripttrigger")\r
+IMPLEMENT_FACTORY(ScriptTrigger, "scripttrigger");\r
+\r