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 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; }
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; }
void Babar::damage (int damages) { if (!is_invincible() ) { m_hp -= damages; m_invincible = 20; if (m_hp <= 0) die(); } }
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; }
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; }
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; }
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; }