void 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); if(coin_counter > 0) { sector->add_object(new BouncyCoin(get_pos())); coin_counter--; player.get_status()->add_coins(1); if(coin_counter == 0) sprite->set_action("empty"); start_bounce(); } else if(breakable) { if(playerhit){ if(player.is_big()){ start_break(); return; } else { start_bounce(); return; } } break_me(); } }
void Brick::try_break(Player* player) { if(sprite->get_action() == "empty") return; SoundManager::current()->play("sounds/brick.wav"); Sector* sector = Sector::current(); Player& player_one = *(sector->player); if(coin_counter > 0 ){ sector->add_object(std::make_shared<BouncyCoin>(get_pos(), true)); coin_counter--; player_one.get_status()->add_coins(1); if(coin_counter == 0) sprite->set_action("empty"); start_bounce(player); } else if(breakable) { if(player){ if(player->is_big()){ start_break(player); return; } else { start_bounce(player); return; } } break_me(); } }
void InfoBlock::hit(Player& player) { start_bounce(&player); //if (!stopped) { // ringing->remove_me(); // stopped = true; //} if (dest_pct != 1) { // first hide all other InfoBlocks' messages in same sector Sector* parent = Sector::current(); if (!parent) return; for (Sector::GameObjects::iterator i = parent->gameobjects.begin(); i != parent->gameobjects.end(); ++i) { InfoBlock* block = dynamic_cast<InfoBlock*>(i->get()); if (!block) continue; if (block != this) block->hide_message(); } // show our message show_message(); } else { hide_message(); } }
void InvisibleBlock::hit(Player& player) { SoundManager::current()->play("sounds/brick.wav"); if(visible) return; sprite->set_action("empty"); start_bounce(&player); set_group(COLGROUP_STATIC); visible = true; }
void InvisibleBlock::hit(Player& ) { sound_manager->play("sounds/brick.wav"); if(visible) return; sprite->set_action("empty"); start_bounce(); flags |= FLAG_SOLID; set_group(COLGROUP_STATIC); visible = true; }
void 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); if(coin_counter > 0) { sector->add_object(new BouncyCoin(get_pos())); coin_counter--; player.get_status()->add_coins(1); 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(); } }
void BonusBlock::try_open() { if(sprite->get_action() == "empty") { 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())); player.get_status()->add_coins(1); break; case CONTENT_FIREGROW: if(player.get_status()->bonus == NO_BONUS) { SpecialRiser* riser = new SpecialRiser(get_pos(), new GrowUp(direction)); sector->add_object(riser); } else { SpecialRiser* riser = new SpecialRiser( get_pos(), new Flower(FIRE_BONUS)); sector->add_object(riser); } sound_manager->play("sounds/upgrade.wav"); break; case CONTENT_ICEGROW: if(player.get_status()->bonus == NO_BONUS) { 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), direction)); break; case CONTENT_1UP: sector->add_object(new OneUp(get_pos(), direction)); break; case CONTENT_CUSTOM: SpecialRiser* riser = new SpecialRiser(get_pos(), object); object = 0; sector->add_object(riser); sound_manager->play("sounds/upgrade.wav"); break; } start_bounce(); sprite->set_action("empty"); }
void BonusBlock::try_open(Player *player) { if(sprite->get_action() == "empty") { SoundManager::current()->play("sounds/brick.wav"); return; } Sector* sector = Sector::current(); assert(sector); if (player == NULL) player = sector->player; if (player == NULL) return; Direction direction = (player->get_bbox().get_middle().x > bbox.get_middle().x) ? LEFT : RIGHT; switch(contents) { case CONTENT_COIN: { Sector::current()->add_object(std::make_shared<BouncyCoin>(get_pos(), true)); player->get_status()->add_coins(1); if (hit_counter != 0) Sector::current()->get_level()->stats.coins++; break; } case CONTENT_FIREGROW: { raise_growup_bonus(player, FIRE_BONUS, direction); break; } case CONTENT_ICEGROW: { raise_growup_bonus(player, ICE_BONUS, direction); break; } case CONTENT_AIRGROW: { raise_growup_bonus(player, AIR_BONUS, direction); break; } case CONTENT_EARTHGROW: { raise_growup_bonus(player, EARTH_BONUS, direction); break; } case CONTENT_STAR: { sector->add_object(std::make_shared<Star>(get_pos() + Vector(0, -32), direction)); SoundManager::current()->play("sounds/upgrade.wav"); break; } case CONTENT_1UP: { sector->add_object(std::make_shared<OneUp>(get_pos(), direction)); SoundManager::current()->play("sounds/upgrade.wav"); break; } case CONTENT_CUSTOM: { auto riser = std::make_shared<SpecialRiser>(get_pos(), object); object = 0; sector->add_object(riser); SoundManager::current()->play("sounds/upgrade.wav"); break; } case CONTENT_SCRIPT: { break; } // because scripts always run, this prevents default contents from being assumed case CONTENT_LIGHT: { if(sprite->get_action() == "on") sprite->set_action("off"); else sprite->set_action("on"); SoundManager::current()->play("sounds/switch.ogg"); break; } case CONTENT_TRAMPOLINE: { auto riser = std::make_shared<SpecialRiser>(get_pos(), std::make_shared<Trampoline>(get_pos(), false)); sector->add_object(riser); SoundManager::current()->play("sounds/upgrade.wav"); break; } case CONTENT_RAIN: { hit_counter = 1; // multiple hits of coin rain is not allowed Sector::current()->add_object(std::make_shared<CoinRain>(get_pos(), true)); SoundManager::current()->play("sounds/upgrade.wav"); break; } case CONTENT_EXPLODE: { hit_counter = 1; // multiple hits of coin explode is not allowed Sector::current()->add_object(std::make_shared<CoinExplode>(get_pos() + Vector (0, -40))); SoundManager::current()->play("sounds/upgrade.wav"); break; } } if(!script.empty()) { // scripts always run if defined std::istringstream stream(script); Sector::current()->run_script(stream, "BonusBlockScript"); } start_bounce(player); if(hit_counter <= 0 || contents == CONTENT_LIGHT){ //use 0 to allow infinite hits }else if(hit_counter == 1){ sprite->set_action("empty"); }else{ hit_counter--; } }
void Block::start_break() { start_bounce(); breaking = true; }
void Block::start_break(GameObject* hitter) { start_bounce(hitter); breaking = true; }