- try_open();
-}
-
-void
-BonusBlock::try_open()
-{
- if(sprite->get_action_name() == "empty") {
- sound_manager->play_sound("brick");
- return;
- }
-
- Sector* sector = Sector::current();
- Player& player = *(sector->player);
- switch(contents) {
- case CONTENT_COIN:
- Sector::current()->add_object(new BouncyCoin(get_pos()));
- player.get_status()->incCoins();
- break;
-
- case CONTENT_FIREGROW:
- if(player.get_status()->bonus == NO_BONUS) {
- SpecialRiser* riser = new SpecialRiser(
- new GrowUp(get_pos() + Vector(0, -32)));
- sector->add_object(riser);
- } else {
- SpecialRiser* riser = new SpecialRiser(
- new Flower(get_pos() + Vector(0, -32), Flower::FIREFLOWER));
- sector->add_object(riser);
- }
- sound_manager->play_sound("upgrade");
- break;
-
- case CONTENT_ICEGROW:
- if(player.get_status()->bonus == NO_BONUS) {
- SpecialRiser* riser = new SpecialRiser(
- new GrowUp(get_pos() + Vector(0, -32)));
- sector->add_object(riser);
- } else {
- SpecialRiser* riser = new SpecialRiser(
- new Flower(get_pos() + Vector(0, -32), Flower::ICEFLOWER));
- sector->add_object(riser);
- }
- sound_manager->play_sound("upgrade");
- break;
-
- case CONTENT_STAR:
- sector->add_object(new Star(get_pos() + Vector(0, -32)));
- break;
-
- case CONTENT_1UP:
- sector->add_object(new OneUp(get_pos()));
- break;
-
- default:
- assert(false);
- }
-
- start_bounce();
- sprite->set_action("empty");
-}
-
-IMPLEMENT_FACTORY(BonusBlock, "bonusblock")
-
-//---------------------------------------------------------------------------
-
-Brick::Brick(const Vector& pos, int data)
- : Block(sprite_manager->create("brick")), breakable(false),
- coin_counter(0)
-{
- bbox.set_pos(pos);
- if(data == 1)
- coin_counter = 5;
- else
- breakable = true;
-}
-
-void
-Brick::hit(Player& )
-{
- if(sprite->get_action_name() == "empty")
- return;
-
- try_break(true);
-}
-
-void
-Brick::try_break(bool playerhit)
-{
- if(sprite->get_action_name() == "empty")
- return;
-
- sound_manager->play_sound("brick");
- Sector* sector = Sector::current();
- Player& player = *(sector->player);
- if(coin_counter > 0) {
- sector->add_object(new BouncyCoin(get_pos()));
- coin_counter--;
- player.get_status()->incCoins();
- if(coin_counter == 0)
- sprite->set_action("empty");
- start_bounce();
- } else if(breakable) {
- if(playerhit && !player.is_big()) {
- start_bounce();
- return;
- }
-
- sector->add_object(
- new BrokenBrick(new Sprite(*sprite), get_pos(), Vector(-100, -400)));
- sector->add_object(
- new BrokenBrick(new Sprite(*sprite), get_pos() + Vector(0, 16),
- Vector(-150, -300)));
- sector->add_object(
- new BrokenBrick(new Sprite(*sprite), get_pos() + Vector(16, 0),
- Vector(100, -400)));
- sector->add_object(
- new BrokenBrick(new Sprite(*sprite), get_pos() + Vector(16, 16),
- Vector(150, -300)));
- remove_me();
- }