create lisp code on the fly (still no enemies showing up in editor, no idea why....
authorMatthias Braun <matze@braunis.de>
Mon, 20 Dec 2004 21:35:37 +0000 (21:35 +0000)
committerMatthias Braun <matze@braunis.de>
Mon, 20 Dec 2004 21:35:37 +0000 (21:35 +0000)
SVN-Revision: 2263

src/badguy/jumpy.cpp
src/leveleditor.cpp
src/object_factory.cpp
src/object_factory.h

index 4d32164..4059219 100644 (file)
@@ -3,6 +3,8 @@
 #include "jumpy.h"
 
 static const float JUMPSPEED=600;
+static const float JUMPY_MID_TOLERANCE=8;
+static const float JUMPY_LOW_TOLERANCE=2;
 
 Jumpy::Jumpy(const lisp::Lisp& reader)
 {
@@ -56,7 +58,13 @@ Jumpy::active_action(float elapsed_time)
   dir = Sector::current()->player->get_pos().x > get_pos().x
     ? RIGHT : LEFT;
     //FIXME: add middle and up here
-  sprite->set_action(dir == LEFT ? "left-down" : "right-down");
+  
+  if ( get_pos().y >= (start_position.y - JUMPY_MID_TOLERANCE) )
+    sprite->set_action(dir == LEFT ? "left-middle" : "right-middle");
+  else if ( get_pos().y >= (start_position.y - JUMPY_LOW_TOLERANCE) )
+    sprite->set_action(dir == LEFT ? "left-down" : "right-down");
+  else
+    sprite->set_action(dir == LEFT ? "left-up" : "right-up");
 }
 
 IMPLEMENT_FACTORY(Jumpy, "jumpy")
index fc1eb26..1f1692d 100644 (file)
@@ -861,7 +861,7 @@ void LevelEditor::change(int x, int y, int newtile, int layer)
     for(Factories::iterator i = object_factories->begin(); i !=
         object_factories->end(); ++i) {
       if(id == newtile - gameobjs_first_id) {
-        object = i->second->create_object(Vector(x, y));
+        object = create_object(i->first, Vector(x, y));
         break;
       }
       id++;
index 9ce2686..bd93f21 100644 (file)
@@ -21,6 +21,8 @@
 #include <sstream>
 #include <stdexcept>
 
+#include "lisp/lisp.h"
+#include "lisp/parser.h"
 #include "object_factory.h"
 
 Factories* object_factories = 0;
@@ -37,3 +39,14 @@ GameObject* create_object(const std::string& name, const lisp::Lisp& reader)
   return i->second->create_object(reader);
 }
 
+GameObject* create_object(const std::string& name, const Vector& pos)
+{
+  std::stringstream lisptext;
+  lisptext << "(" << name
+           << " (x " << pos.x << ")"
+           << " (y " << pos.y << "))";
+  
+  lisp::Parser parser;
+  std::auto_ptr<lisp::Lisp> lisp (parser.parse(lisptext));
+  return create_object(name, *lisp);
+}
index 7cb3f8f..7e57835 100644 (file)
@@ -35,12 +35,6 @@ public:
    * Remember to delete the objects later
    */
   virtual GameObject* create_object(const lisp::Lisp& reader) = 0;
-
-  // hack for now will be removed later
-  virtual GameObject* create_object(const Vector& )
-  {
-    return 0;
-  }
 };
 
 typedef std::map<std::string, Factory*> Factories;