X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fobject%2Fblock.cpp;h=b9fae8393f8e80f026bc8707a41b80ddbdd7a4e2;hb=77d00a6f464cc87c6b50cf1f3b38064a7ae9aead;hp=fb90272d7556ec34c9eaf40ea69087c6f420f575;hpb=0c17ebfc58c6333f15931b5887ca4c34afdc5a2f;p=supertux.git diff --git a/src/object/block.cpp b/src/object/block.cpp index fb90272d7..b9fae8393 100644 --- a/src/object/block.cpp +++ b/src/object/block.cpp @@ -53,7 +53,6 @@ Block::Block(Sprite* newsprite) { bbox.set_size(32, 32.1); set_group(COLGROUP_STATIC); - flags |= FLAG_SOLID; sound_manager->preload("sounds/upgrade.wav"); sound_manager->preload("sounds/brick.wav"); } @@ -92,7 +91,7 @@ Block::update(float elapsed_time) { if(!bouncing) return; - + float offset = original_y - get_pos().y; if(offset > BOUNCY_BRICK_MAX_OFFSET) { bounce_dir = BOUNCY_BRICK_SPEED; @@ -138,7 +137,7 @@ BonusBlock::BonusBlock(const Vector& pos, int data) log_warning << "Invalid box contents" << std::endl; contents = CONTENT_COIN; break; - } + } } BonusBlock::BonusBlock(const lisp::Lisp& lisp) @@ -182,12 +181,12 @@ BonusBlock::BonusBlock(const lisp::Lisp& lisp) } else { log_warning << "Invalid element '" << token << "' in bonusblock" << std::endl; } - } + } } if(contents == CONTENT_CUSTOM && object == 0) throw std::runtime_error("Need to specify content object for custom block"); - + bbox.set_pos(pos); } @@ -205,7 +204,7 @@ BonusBlock::hit(Player& ) HitResponse BonusBlock::collision(GameObject& other, const CollisionHit& hit){ BadGuy* badguy = dynamic_cast (&other); - if(badguy) { + if(badguy) { // hit contains no information for collisions with blocks. // Badguy's bottom has to be below the top of the bonusblock // +7 is required to slide over one tile gaps. @@ -223,9 +222,13 @@ BonusBlock::try_open() sound_manager->play("sounds/brick.wav"); return; } - + Sector* sector = Sector::current(); + assert(sector); + assert(sector->player); Player& player = *(sector->player); + Direction direction = (player.get_bbox().get_middle().x > get_bbox().get_middle().x) ? LEFT : RIGHT; + switch(contents) { case CONTENT_COIN: Sector::current()->add_object(new BouncyCoin(get_pos())); @@ -234,7 +237,7 @@ BonusBlock::try_open() case CONTENT_FIREGROW: if(player.get_status()->bonus == NO_BONUS) { - SpecialRiser* riser = new SpecialRiser(get_pos(), new GrowUp()); + SpecialRiser* riser = new SpecialRiser(get_pos(), new GrowUp(direction)); sector->add_object(riser); } else { SpecialRiser* riser = new SpecialRiser( @@ -246,22 +249,22 @@ BonusBlock::try_open() case CONTENT_ICEGROW: if(player.get_status()->bonus == NO_BONUS) { - SpecialRiser* riser = new SpecialRiser(get_pos(), new GrowUp()); - sector->add_object(riser); + SpecialRiser* riser = new SpecialRiser(get_pos(), new GrowUp(direction)); + sector->add_object(riser); } else { SpecialRiser* riser = new SpecialRiser( get_pos(), new Flower(ICE_BONUS)); sector->add_object(riser); - } + } sound_manager->play("sounds/upgrade.wav"); break; case CONTENT_STAR: - sector->add_object(new Star(get_pos() + Vector(0, -32))); + sector->add_object(new Star(get_pos() + Vector(0, -32), direction)); break; case CONTENT_1UP: - sector->add_object(new OneUp(get_pos())); + sector->add_object(new OneUp(get_pos(), direction)); break; case CONTENT_CUSTOM: @@ -296,7 +299,7 @@ Brick::hit(Player& ) { if(sprite->get_action() == "empty") return; - + try_break(true); } @@ -319,7 +322,7 @@ Brick::try_break(bool playerhit) { if(sprite->get_action() == "empty") return; - + sound_manager->play("sounds/brick.wav"); Sector* sector = Sector::current(); Player& player = *(sector->player); @@ -352,4 +355,3 @@ Brick::try_break(bool playerhit) } //IMPLEMENT_FACTORY(Brick, "brick"); -