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; }
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; }
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(); }
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(); }