81 lines
1.7 KiB
C++
81 lines
1.7 KiB
C++
#include "explosions.h"
|
|
#include <utility> // for move
|
|
#include "animated_sprite.h" // for SpriteAnimated
|
|
class Texture; // lines 3-3
|
|
|
|
// Constructor
|
|
Explosions::Explosions()
|
|
{
|
|
textures_.clear();
|
|
explosions_.clear();
|
|
}
|
|
|
|
// Destructor
|
|
Explosions::~Explosions()
|
|
{
|
|
explosions_.clear();
|
|
}
|
|
|
|
// 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 objeto
|
|
void Explosions::addTexture(int size, std::shared_ptr<Texture> texture, const std::vector<std::string> &animation)
|
|
{
|
|
textures_.emplace_back(ExplosionTexture(size, texture, animation));
|
|
}
|
|
|
|
// Añade una explosión
|
|
void Explosions::add(int x, int y, int size)
|
|
{
|
|
const auto index = getIndexBySize(size);
|
|
explosions_.emplace_back(std::make_unique<AnimatedSprite>(textures_[index].texture, textures_[index].animation));
|
|
explosions_.back()->setPos(x, y);
|
|
}
|
|
|
|
// 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())
|
|
{
|
|
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;
|
|
} |