90 lines
1.8 KiB
C++
90 lines
1.8 KiB
C++
#include "explosions.h"
|
|
|
|
// Constructor
|
|
Explosions::Explosions()
|
|
{
|
|
textures.clear();
|
|
explosions.clear();
|
|
}
|
|
|
|
// Destructor
|
|
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(int size, Texture *texture, std::vector<std::string> *animation)
|
|
{
|
|
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)
|
|
{
|
|
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;
|
|
} |