}
void
+Player::trigger_sequence(std::string sequence_name)
+{
+ GameSession::current()->start_sequence(sequence_name);
+}
+
+void
Player::update(float elapsed_time)
{
if( no_water ){
physic.set_acceleration_x(0);
} else if(physic.get_velocity_x() < 0) {
physic.set_acceleration_x(WALK_ACCELERATION_X * 1.5);
- } else {
+ } else if(physic.get_velocity_x() > 0) {
physic.set_acceleration_x(WALK_ACCELERATION_X * -1.5);
}
}
Vector(dir == LEFT ? -bbox.get_width()-1 : bbox.get_width()+1,
bbox.get_height()*0.66666 - 32);
Rect dest(pos, pos + Vector(32, 32));
- if(Sector::current()->is_free_of_statics(dest)) {
+ if(Sector::current()->is_free_of_movingstatics(dest)) {
MovingObject* moving_object = dynamic_cast<MovingObject*> (grabbed_object);
if(moving_object) {
moving_object->set_pos(pos);
player_status->add_coins(count);
}
+int
+Player::get_coins()
+{
+ return player_status->coins;
+}
+
bool
Player::add_bonus(const std::string& bonustype)
{
return;
// if Tux is above camera, draw little "air arrow" to show where he is x-wise
- if (Sector::current() && Sector::current()->camera && (get_bbox().p2.y + 16 < Sector::current()->camera->get_translation().y)) {
+ if (Sector::current() && Sector::current()->camera && (get_bbox().p2.y - 16 < Sector::current()->camera->get_translation().y)) {
float px = get_pos().x + (get_bbox().p2.x - get_bbox().p1.x - airarrow.get()->get_width()) / 2;
float py = Sector::current()->camera->get_translation().y;
+ py += std::min(((py - (get_bbox().p2.y + 16)) / 4), 16.0f);
context.draw_surface(airarrow.get(), Vector(px, py), LAYER_HUD - 1);
}
physic.set_velocity_x(0);
- if(!completely && is_big()) {
+ if(!completely && (is_big() || growing_timer.started())) {
if(player_status->bonus == FIRE_BONUS
|| player_status->bonus == ICE_BONUS) {
safe_timer.start(TUX_SAFE_TIME);
set_bonus(GROWUP_BONUS, true);
- } else {
+ } else if(player_status->bonus == GROWUP_BONUS) {
//growing_timer.start(GROWING_TIME);
safe_timer.start(TUX_SAFE_TIME /* + GROWING_TIME */);
adjust_height(30.8);
duck = false;
set_bonus(NO_BONUS, true);
+ } else if(player_status->bonus == NO_BONUS) {
+ growing_timer.stop();
+ safe_timer.start(TUX_SAFE_TIME);
+ adjust_height(30.8);
+ duck = false;
}
} else {
for (int i = 0; (i < 5) && (i < player_status->coins); i++)