Пример #1
0
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;
}
Пример #2
0
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;
}