Пример #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
Haywire::collision_squished(GameObject& object)
{
  auto player = dynamic_cast<Player*>(&object);
  if (player && player->is_invincible()) {
    player->bounce (*this);
    kill_fall();
    return true;
  }

  if (is_stunned) {
    if (player)
      player->bounce (*this);
    return true;
  }

  if(WalkingBadguy::is_frozen()) {
    WalkingBadguy::unfreeze();
  }

  if (!is_exploding) {
    start_exploding();
  }

  time_stunned = TIME_STUNNED;
  is_stunned = true;
  physic.set_velocity_x(0.f);
  physic.set_acceleration_x(0.f);

  if (player)
    player->bounce (*this);

  return true;
}
Пример #3
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;
}
Пример #4
0
void Babar::damage (int damages)
{
    if (!is_invincible() )
    {
        m_hp -= damages;
        m_invincible = 20;
        if (m_hp <= 0)
            die();
    }
}
Пример #5
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()) {
    remove_me();
    Sector::current()->add_object(std::make_shared<Bomb>(get_pos(), dir, sprite_name));
  }
  kill_squished(object);
  return true;
}
Пример #6
0
HitResponse
HurtingPlatform::collision(GameObject& other, const CollisionHit& )
{
  auto player = dynamic_cast<Player*>(&other);
  if (player) {
    if (player->is_invincible()) {
      return ABORT_MOVE;
    }
    player->kill(false);
  }
  auto badguy = dynamic_cast<BadGuy*>(&other);
  if (badguy) {
    badguy->kill_fall();
  }

  return FORCE_MOVE;
}
Пример #7
0
void* Boss::collision(CollidingObject * o)
{
    if (is_invincible()) return NULL;
    
    Projectile* autre = dynamic_cast<Projectile*>(o);
    if ((autre != NULL) && (autre->get_shot_id() == Projectile::banker)){
        _get_hit(_sprite);
    }

    // Meure si ses points de vie tombent à 0
    if (_life <= 0) {
        EnemyFactory::reset_boss();
        EnemyFactory::next_level();
        _die();
        return new DropObject(_sprite.GetPosition(), CASH + sf::Randomizer::Random(1, EnemyFactory::level()));
    }
    return NULL;
}
Пример #8
0
HitResponse
IceCrusher::collision(GameObject& other, const CollisionHit& hit)
{
  auto player = dynamic_cast<Player*>(&other);

  // If the other object is the player, and the collision is at the
  // bottom of the ice crusher, hurt the player.
  if (player && hit.bottom) {
    SoundManager::current()->play("sounds/brick.wav");
    if (state == CRUSHING)
      set_state(RECOVERING);
    if (player->is_invincible()) {
      return ABORT_MOVE;
    }
    player->kill(false);
    return FORCE_MOVE;
  }
  auto badguy = dynamic_cast<BadGuy*>(&other);
  if (badguy) {
    badguy->kill_fall();
  }
  return FORCE_MOVE;
}