#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)
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) {