afegida la classe Explosions

This commit is contained in:
2024-07-28 12:46:26 +02:00
parent 2948684ad3
commit 59680ce7c0
3 changed files with 73 additions and 18 deletions

View File

@@ -12,28 +12,79 @@ Explosions::~Explosions()
{
for (auto explosion : explosions)
{
if (explosion)
{
delete explosion;
}
}
}
// Actualiza la lógica de la clase
void Explosions::update()
{
for (auto explosion : explosions)
{
explosion->update();
}
// Vacia el vector de elementos finalizados
freeExplosions();
}
// Dibuja el objeto en pantalla
void Explosions::render()
{
for (auto explosion : explosions)
{
explosion->render();
}
}
// Añade texturas al objetp
void Explosions::addTexture(Texture *texture)
void Explosions::addTexture(int size, Texture *texture, std::vector<std::string> *animation)
{
textures.push_back(texture);
explosion_texture_t temp;
temp.size = size;
temp.texture = texture;
temp.animation = animation;
textures.push_back(temp);
}
// Añade una explosión
void Explosions::add(int x, int y, int size)
{
AnimatedSprite *sprite = new AnimatedSprite(textures[0]);
sprite->setPos({x,y});
const int index = getIndexBySize(size);
AnimatedSprite *sprite = new AnimatedSprite(textures[index].texture, "", textures[index].animation);
sprite->setPos({x, y});
explosions.push_back(sprite);
}
// Vacia el vector de elementos finalizados
void Explosions::freeExplosions()
{
if (explosions.empty() == false)
{
for (int i = explosions.size() - 1; i >= 0; --i)
{
if (explosions[i]->animationIsCompleted())
{
delete explosions[i];
explosions.erase(explosions.begin() + i);
}
}
}
}
// Busca una textura a partir del tamaño
int Explosions::getIndexBySize(int size)
{
for (int i = 0; i < (int)textures.size();++i)
{
if (size == textures[i].size)
{
return i;
}
}
return 0;
}