-}
-
-//---------------------------------------------------------------------------
-
-BonusBlock::BonusBlock(const Vector& pos, int data)
- : Block(sprite_manager->create("bonusblock"))
-{
- bbox.set_pos(pos);
- sprite->set_action("default");
- switch(data) {
- case 1: contents = CONTENT_COIN; break;
- case 2: contents = CONTENT_FIREGROW; break;
- case 3: contents = CONTENT_STAR; break;
- case 4: contents = CONTENT_1UP; break;
- case 5: contents = CONTENT_ICEGROW; break;
- default:
- std::cerr << "Invalid box contents!\n";
- contents = CONTENT_COIN;
- break;
- }
-}
-
-BonusBlock::BonusBlock(const lisp::Lisp& lisp)
- : Block(sprite_manager->create("bonusblock"))
-{
- Vector pos;
- lisp.get("x", pos.x);
- lisp.get("y", pos.y);
- bbox.set_pos(pos);
-
- std::string contentstring;
- contents = CONTENT_COIN;
- if(lisp.get("contents", contentstring)) {
- if(contentstring == "coin") {
- contents = CONTENT_COIN;
- } else if(contentstring == "firegrow") {
- contents = CONTENT_FIREGROW;
- } else if(contentstring == "icegrow") {
- contents = CONTENT_ICEGROW;
- } else if(contentstring == "star") {
- contents = CONTENT_STAR;
- } else if(contentstring == "1up") {
- contents = CONTENT_1UP;
- } else {
- std::cerr << "Invalid box contents '" << contentstring << "'.\n";
- }
- }
-}
-
-void
-BonusBlock::hit(Player& )
-{
- try_open();
-}
-
-void
-BonusBlock::try_open()
-{
- if(sprite->get_action_name() == "empty") {
- SoundManager::get()->play_sound(IDToSound(SND_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.size == SMALL) {
- 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);
- }
- SoundManager::get()->play_sound(IDToSound(SND_UPGRADE));
- break;
-
- case CONTENT_ICEGROW:
- if(player.size == SMALL) {
- 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);
- }
- SoundManager::get()->play_sound(IDToSound(SND_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;