void BadGuy::collision_tile(uint32_t tile_attributes) { // Don't kill badguys that have already been killed if (!is_active()) return; if (tile_attributes & Tile::WATER && !is_in_water()) { m_in_water = true; SoundManager::current()->play("sounds/splash.ogg", get_pos()); } if (!(tile_attributes & Tile::WATER) && is_in_water()) { m_in_water = false; } if (tile_attributes & Tile::HURTS && is_hurtable()) { if (tile_attributes & Tile::FIRE) { if (is_flammable()) ignite(); } else if (tile_attributes & Tile::ICE) { if (is_freezable()) freeze(); } else { kill_fall(); } } }
void BadGuy::collision_tile(uint32_t tile_attributes) { if(tile_attributes & Tile::HURTS) { if (tile_attributes & Tile::FIRE) { if (is_flammable()) ignite(); } else if (tile_attributes & Tile::ICE) { if (is_freezable()) freeze(); } else { kill_fall(); } } }
HitResponse BadGuy::collision_bullet(Bullet& bullet, const CollisionHit& hit) { if (is_frozen()) { if (bullet.get_type() == FIRE_BONUS) { // fire bullet thaws frozen badguys unfreeze(); bullet.remove_me(); return ABORT_MOVE; } else { // other bullets ricochet bullet.ricochet(*this, hit); return FORCE_MOVE; } } else if (is_ignited()) { if (bullet.get_type() == ICE_BONUS) { // ice bullets extinguish ignited badguys extinguish(); bullet.remove_me(); return ABORT_MOVE; } else { // other bullets are absorbed by ignited badguys bullet.remove_me(); return FORCE_MOVE; } } else if (bullet.get_type() == FIRE_BONUS && is_flammable()) { // fire bullets ignite flammable badguys ignite(); bullet.remove_me(); return ABORT_MOVE; } else if (bullet.get_type() == ICE_BONUS && is_freezable()) { // ice bullets freeze freezable badguys freeze(); bullet.remove_me(); return ABORT_MOVE; } else { // in all other cases, bullets ricochet bullet.ricochet(*this, hit); return FORCE_MOVE; } }
void BadGuy::collision_tile(uint32_t tile_attributes) { // Don't kill badguys that have already been killed if (!is_active()) return; if(tile_attributes & Tile::HURTS) { if (tile_attributes & Tile::FIRE) { if (is_flammable()) ignite(); } else if (tile_attributes & Tile::ICE) { if (is_freezable()) freeze(); } else { kill_fall(); } } }