From: Christoph Sommer Date: Sun, 26 Mar 2006 12:42:23 +0000 (+0000) Subject: Made Totem jump a bit before stacking X-Git-Url: https://git.verplant.org/?a=commitdiff_plain;h=184391949f10d49af73917c0f93ef4696634999d;p=supertux.git Made Totem jump a bit before stacking SVN-Revision: 3121 --- diff --git a/src/badguy/totem.cpp b/src/badguy/totem.cpp index d78144d4a..e0cd2c5ff 100644 --- a/src/badguy/totem.cpp +++ b/src/badguy/totem.cpp @@ -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::iterator i = s->moving_objects.begin(); i != s->moving_objects.end(); i++) { + Totem* t = dynamic_cast(*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) {