#include "trigger/climbable.hpp"
#include "object/player.hpp"
-#include "supertux/main.hpp"
+#include "supertux/globals.hpp"
#include "supertux/object_factory.hpp"
#include "util/gettext.hpp"
#include "util/reader.hpp"
const float GRACE_DX = 8; // how far off may the player's bounding-box be x-wise
const float GRACE_DY = 8; // how far off may the player's bounding-box be y-wise
const float ACTIVATE_TRY_FOR = 1; // how long to try correcting mis-alignment of player and climbable before giving up
-const float POSITION_FIX_AX = 50; // x-wise acceleration applied to player when trying to align player and Climbable
+const float POSITION_FIX_AX = 30; // x-wise acceleration applied to player when trying to align player and Climbable
const float POSITION_FIX_AY = 50; // y-wise acceleration applied to player when trying to align player and Climbable
}
bbox.set_size(w, h);
}
-Climbable::Climbable(const Rect& area) :
+Climbable::Climbable(const Rectf& area) :
climbed_by(0),
activate_try_timer()
{
}
}
-void
+void
Climbable::update(float /*elapsed_time*/)
{
if (!climbed_by) return;
if (climbed_by) {
context.push_transform();
context.set_translation(Vector(0, 0));
- Vector pos = Vector(0, SCREEN_HEIGHT/2 - normal_font->get_height()/2);
- context.draw_center_text(normal_font, _("Up we go..."), pos, LAYER_GUI, Climbable::text_color);
+ Vector pos = Vector(0, SCREEN_HEIGHT/2 - Resources::normal_font->get_height()/2);
+ context.draw_center_text(Resources::normal_font, _("Up we go..."), pos, LAYER_HUD, Climbable::text_color);
context.pop_transform();
}
}
activate_try_timer.stop();
} else {
if (type == EVENT_ACTIVATE) activate_try_timer.start(ACTIVATE_TRY_FOR);
- if (player.get_bbox().p1.x < get_bbox().p1.x - GRACE_DX) player.add_velocity(Vector(POSITION_FIX_AX,0));
- if (player.get_bbox().p2.x > get_bbox().p2.x + GRACE_DX) player.add_velocity(Vector(-POSITION_FIX_AX,0));
+ // the "-13" to y velocity prevents Tux from walking in place on the ground for horizonal adjustments
+ if (player.get_bbox().p1.x < get_bbox().p1.x - GRACE_DX) player.add_velocity(Vector(POSITION_FIX_AX,-13));
+ if (player.get_bbox().p2.x > get_bbox().p2.x + GRACE_DX) player.add_velocity(Vector(-POSITION_FIX_AX,-13));
if (player.get_bbox().p1.y < get_bbox().p1.y - GRACE_DY) player.add_velocity(Vector(0,POSITION_FIX_AY));
if (player.get_bbox().p2.y > get_bbox().p2.y + GRACE_DY) player.add_velocity(Vector(0,-POSITION_FIX_AY));
}
}
bool
-Climbable::may_climb(Player& player)
+Climbable::may_climb(Player& player)
{
if (player.get_bbox().p1.x < get_bbox().p1.x - GRACE_DX) return false;
if (player.get_bbox().p2.x > get_bbox().p2.x + GRACE_DX) return false;
return true;
}
-IMPLEMENT_FACTORY(Climbable, "climbable");
-
/* EOF */