Files
coffee_crisis_arcade_edition/source/explosions.cpp
Sergio 28df97ea94 Pasaeta de "include-what-you-use" per arreglar els includes
Renombrats alguns fitxers per consistencia
2024-09-29 06:24:11 +02:00

92 lines
1.8 KiB
C++

#include "explosions.h"
#include "animated_sprite.h" // for AnimatedSprite
class Texture;
// 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;
}