bool
Haywire::collision_squished(GameObject& object)
{
  Player* player = dynamic_cast<Player*>(&object);
  if (player && player->is_invincible()) {
    player->bounce (*this);
    kill_fall();
    return true;
  }

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

  if (!is_exploding) {
    set_action ((dir == LEFT) ? "ticking-left" : "ticking-right", /* loops = */ -1);
    walk_left_action = "ticking-left";
    walk_right_action = "ticking-right";
    set_walk_speed (160);
    time_until_explosion = TIME_EXPLOSION;
    is_exploding = true;
  }

  time_stunned = TIME_STUNNED;
  is_stunned = true;

  player->bounce (*this);
  return true;
}
Example #2
0
bool
Haywire::collision_squished(GameObject& object)
{
  Player* 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) {
    set_action ((dir == LEFT) ? "ticking-left" : "ticking-right", /* loops = */ -1);
    walk_left_action = "ticking-left";
    walk_right_action = "ticking-right";
    set_walk_speed (160);
    time_until_explosion = TIME_EXPLOSION;
    is_exploding = true;

    ticking = SoundManager::current()->create_sound_source("sounds/fizz.wav");
    ticking->set_position(get_pos());
    ticking->set_looping(true);
    ticking->set_reference_distance(32);
    ticking->play();
    grunting = SoundManager::current()->create_sound_source("sounds/grunts.ogg");
    grunting->set_position(get_pos());
    grunting->set_looping(true);
    grunting->set_reference_distance(32);
    grunting->play();
  }

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

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

  return true;
}
Example #3
0
void
Haywire::stop_exploding()
{
  walk_left_action = "left";
  walk_right_action = "right";
  set_walk_speed(NORMAL_WALK_SPEED);
  time_until_explosion = 0.0f;
  is_exploding = false;

  if (ticking)
    ticking->stop();

  if (grunting)
    grunting->stop();
}
Example #4
0
void
Haywire::start_exploding()
{
  set_action ((dir == LEFT) ? "ticking-left" : "ticking-right", /* loops = */ -1);
  walk_left_action = "ticking-left";
  walk_right_action = "ticking-right";
  set_walk_speed (EXPLODING_WALK_SPEED);
  time_until_explosion = TIME_EXPLOSION;
  is_exploding = true;

  ticking = SoundManager::current()->create_sound_source("sounds/fizz.wav");
  ticking->set_position(get_pos());
  ticking->set_looping(true);
  ticking->set_reference_distance(32);
  ticking->play();
  grunting = SoundManager::current()->create_sound_source("sounds/grunts.ogg");
  grunting->set_position(get_pos());
  grunting->set_looping(true);
  grunting->set_reference_distance(32);
  grunting->play();
}