Made Totem jump a bit before stacking
authorChristoph Sommer <mail@christoph-sommer.de>
Sun, 26 Mar 2006 12:42:23 +0000 (12:42 +0000)
committerChristoph Sommer <mail@christoph-sommer.de>
Sun, 26 Mar 2006 12:42:23 +0000 (12:42 +0000)
SVN-Revision: 3121

src/badguy/totem.cpp

index d78144d..e0cd2c5 100644 (file)
@@ -24,9 +24,7 @@
 #include "msg.hpp"
 
 static const float WALKSPEED = 100;
-static const float WALKSPEED_SMALL = 120;
-static const float INVINCIBLE_TIME = 1;
-
+static const float JUMP_ON_SPEED_Y = 400;
 static const float JUMP_OFF_SPEED_Y = 500;
 
 Totem::Totem(const lisp::Lisp& reader)
@@ -85,6 +83,34 @@ Totem::active_update(float elapsed_time)
       dir = (dir == LEFT ? RIGHT : LEFT);
       activate();
     }
+
+    Sector* s = Sector::current();
+    if (s) {
+      // jump a bit if we find a suitable totem 
+      for (std::vector<MovingObject*>::iterator i = s->moving_objects.begin(); i != s->moving_objects.end(); i++) {
+       Totem* t = dynamic_cast<Totem*>(*i);
+       if (!t) continue;
+       
+       // skip if we are not approaching each other
+       if (!((this->dir == LEFT) && (t->dir == RIGHT))) continue;
+       
+       Vector p1 = this->get_pos();
+       Vector p2 = t->get_pos();
+
+       // skip if not on same height
+       float dy = (p1.y - p2.y);
+       if (fabsf(dy - 0) > 2) continue;
+
+       // skip if too far away
+       float dx = (p1.x - p2.x);
+       if (fabsf(dx - 128) > 2) continue;
+
+       physic.set_velocity_y(JUMP_ON_SPEED_Y);
+       p1.y -= 1;
+       this->set_pos(p1);
+       break;
+      }
+    }
   }
 
   if (carried_by) {