bool BombExplode::Explosion::explodeArea(glm::vec3 const& pos, float dx, float dy) { Part *part; std::string textureFire = ""; HasPlayer *putter; if ((part = (_pos->getBoardIn())->find_part(pos))) { std::list<Entity*> collides; Entity *explosion = EntityFactory::NewFire(_pos->getBoardIn(), pos, _hitbox->getSize()); if ((putter = _owner->getComponent<HasPlayer>())) explosion->addComponent(new HasPlayer(putter->getPlayer())); if (_owner->getComponent<Pierce>()) { explosion->addComponent(new Pierce); } part->collide(explosion, collides); if (std::for_each(collides.begin(), collides.end(), TryDestruct(explosion)).canDestruct()) { if ((dy * -1) == _range || (dy) == _range || (dx * -1) == _range || (dx) == _range) { chooseTexture(dx, dy, textureFire); chooseEnd(dx, dy, textureFire); } else { chooseTexture(dx, dy, textureFire); } explosion->addComponent(new GeometryDraw(textureFire)); explosion->addComponent(new LifeTimer(0.4f)); (_pos->getBoardIn())->addEntity(explosion); return (false); } else { delete explosion; } } return (true); }