fade out console
[supertux.git] / src / badguy / totem.cpp
index d78144d..00f4b07 100644 (file)
 #include <config.h>
 
 #include "totem.hpp"
-#include "msg.hpp"
+#include "log.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) {
@@ -185,7 +211,7 @@ void
 Totem::jump_on(Totem* target)
 {
   if (target->carrying) {
-    msg_warning("target is already carrying someone");
+    log_warning << "target is already carrying someone" << std::endl;
     return;
   }
   
@@ -201,7 +227,7 @@ Totem::jump_on(Totem* target)
 void
 Totem::jump_off() {
   if (!carried_by) {
-    msg_warning("not carried by anyone");
+    log_warning << "not carried by anyone" << std::endl;
     return;
   }