bool MrBomb::collision_squished(GameObject& object) { auto player = dynamic_cast<Player*>(&object); if (player && player->is_invincible()) { player->bounce(*this); kill_fall(); return true; } if (is_valid()) { auto& bomb = Sector::get().add<Bomb>(get_pos(), m_dir, m_sprite_name); // Do not trigger dispenser because we need to wait for // the bomb instance to explode. if (get_parent_dispenser() != nullptr) { bomb.set_parent_dispenser(get_parent_dispenser()); set_parent_dispenser(nullptr); } remove_me(); } kill_squished(object); return true; }
bool MrBomb::collision_squished(GameObject& object) { auto player = dynamic_cast<Player*>(&object); if(player && player->is_invincible()) { player->bounce(*this); kill_fall(); return true; } if(is_valid()) { auto bomb = std::make_shared<Bomb>(get_pos(), dir, sprite_name); // Do not trigger dispenser because we need to wait for // the bomb instance to explode. if(this->get_parent_dispenser() != NULL) { bomb->set_parent_dispenser(this->get_parent_dispenser()); this->set_parent_dispenser(NULL); } remove_me(); Sector::current()->add_object(bomb); } kill_squished(object); return true; }