Portable* portable = dynamic_cast<Portable*> (&other);
MovingObject* moving_object = dynamic_cast<MovingObject*> (&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
}
void
-Block::start_bounce(float center_of_hitter)
+Block::start_bounce(GameObject* hitter)
{
if(original_y == -1){
original_y = bbox.p1.y;
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<MovingObject*>(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;
}
break;
}
- start_bounce(player.get_bbox().get_middle().x);
+ start_bounce(&player);
sprite->set_action("empty");
}
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;
}
}