X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fobject%2Finvisible_block.cpp;h=96be2e650f2920de2d67b60b298736a12e2cd1d7;hb=555d1b7bebb45326d82d934e07463209837309b0;hp=045e319993171d471dbe81f1d40e02e0fd1a6ecb;hpb=4a486d92343d1824b311c234e9321e08f280fe68;p=supertux.git diff --git a/src/object/invisible_block.cpp b/src/object/invisible_block.cpp index 045e31999..96be2e650 100644 --- a/src/object/invisible_block.cpp +++ b/src/object/invisible_block.cpp @@ -33,7 +33,6 @@ InvisibleBlock::InvisibleBlock(const Vector& pos) { bbox.set_pos(pos); sound_manager->preload("sounds/brick.wav"); - sound_manager->preload("sounds/brick.wav"); } void @@ -43,24 +42,31 @@ InvisibleBlock::draw(DrawingContext& context) sprite->draw(context, get_pos(), LAYER_OBJECTS); } -HitResponse -InvisibleBlock::collision(GameObject& other, const CollisionHit& hit) +bool +InvisibleBlock::collides(GameObject& other, const CollisionHit& ) { - if(!visible) { - Player* player = dynamic_cast (&other); - if(player) { - if(player->get_movement().y > 0 || - player->get_bbox().get_top() <= get_bbox().get_bottom() - 7.0) { - return PASSTHROUGH; - } - } + if(visible) + return true; + + // if we're not visible, only register a collision if this will make us visible + Player* player = dynamic_cast (&other); + if ((player) + && (player->get_movement().y <= 0) + && (player->get_bbox().get_top() > get_bbox().get_bottom() - 7.0)) { + return true; } + return false; +} + +HitResponse +InvisibleBlock::collision(GameObject& other, const CollisionHit& hit) +{ return Block::collision(other, hit); } void -InvisibleBlock::hit(Player& ) +InvisibleBlock::hit(Player& player) { sound_manager->play("sounds/brick.wav"); @@ -68,7 +74,7 @@ InvisibleBlock::hit(Player& ) return; sprite->set_action("empty"); - start_bounce(); + start_bounce(&player); set_group(COLGROUP_STATIC); visible = true; }