X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fobject%2Fblock.cpp;h=61bf7c35819d6c28afb6eb226abd7edc51e09dde;hb=ae7bd4f460fdd93934fc0abc9589758a49309bda;hp=9e179c379f6f8ed17e176cc02fdd3b5239377faf;hpb=5745d9670262c91e6cd35363fd0d2ec169e7c8a4;p=supertux.git diff --git a/src/object/block.cpp b/src/object/block.cpp index 9e179c379..61bf7c358 100644 --- a/src/object/block.cpp +++ b/src/object/block.cpp @@ -83,7 +83,7 @@ Block::collision(GameObject& other, const CollisionHit& ) Portable* portable = dynamic_cast (&other); MovingObject* moving_object = dynamic_cast (&other); bool is_portable = ((portable != 0) && portable->is_portable()); - bool hit_mo_from_below = ((moving_object == 0) || (moving_object->get_bbox().get_bottom() > (get_bbox().get_top() - 7.0))); + bool hit_mo_from_below = ((moving_object == 0) || (moving_object->get_bbox().get_bottom() < (get_bbox().get_top() + 7.0))); if(bouncing && !is_portable && hit_mo_from_below) { // Badguys get killed @@ -139,7 +139,7 @@ Block::draw(DrawingContext& context) } void -Block::start_bounce(float center_of_hitter) +Block::start_bounce(GameObject* hitter) { if(original_y == -1){ original_y = bbox.p1.y; @@ -148,14 +148,18 @@ Block::start_bounce(float center_of_hitter) bounce_dir = -BOUNCY_BRICK_SPEED; bounce_offset = 0; - float offset = (get_bbox().get_middle().x - center_of_hitter)*2 / get_bbox().get_width(); - sprite->set_angle(BUMP_ROTATION_ANGLE*offset); + MovingObject* hitter_mo = dynamic_cast(hitter); + if (hitter_mo) { + float center_of_hitter = hitter_mo->get_bbox().get_middle().x; + float offset = (get_bbox().get_middle().x - center_of_hitter)*2 / get_bbox().get_width(); + sprite->set_angle(BUMP_ROTATION_ANGLE*offset); + } } void -Block::start_break(float center_of_hitter) +Block::start_break(GameObject* hitter) { - start_bounce(center_of_hitter); + start_bounce(hitter); breaking = true; } @@ -322,7 +326,7 @@ BonusBlock::try_open() break; } - start_bounce(player.get_bbox().get_middle().x); + start_bounce(&player); sprite->set_action("empty"); } @@ -410,14 +414,14 @@ Brick::try_break(Player* player) player_one.get_status()->add_coins(1); if(coin_counter == 0) sprite->set_action("empty"); - start_bounce(player->get_bbox().get_middle().x); + start_bounce(player); } else if(breakable) { if(player){ if(player->is_big()){ - start_break(player->get_bbox().get_middle().x); + start_break(player); return; } else { - start_bounce(player->get_bbox().get_middle().x); + start_bounce(player); return; } }