a few fixes that I had lying around here, select walk animation in worldmap when...
[supertux.git] / src / trigger / scripttrigger.cpp
index 1d2ccb8..0793992 100644 (file)
 //  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
@@ -71,6 +76,7 @@ ScriptTrigger::write(lisp::Writer& writer)
   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
@@ -78,28 +84,12 @@ ScriptTrigger::write(lisp::Writer& writer)
 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