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;
}

View File

@@ -5,15 +5,10 @@
#include "common/animatedsprite.h"
#include <vector>
struct explosion_t
{
AnimatedSprite *sprite; // Sprite para dibujar la explosión
bool ended; // Indica si la explosión ha terminado
};
struct explision_texture_t
struct explosion_texture_t
{
Texture *texture; // Textura para la explosión
std::vector<std::string> *animation; // Animación para la textura
int size; // Tamaño de la explosión
};
@@ -21,11 +16,15 @@ struct explision_texture_t
class Explosions
{
private:
// Objetos y punteros
// Variables
std::vector<Texture *> textures; // Vector con las texturas a utilizar
std::vector<explosion_t> explosions; // Lista con todas las explosiones
std::vector<explosion_texture_t> textures; // Vector con las texturas a utilizar
std::vector<AnimatedSprite *> explosions; // Lista con todas las explosiones
// Vacia el vector de elementos finalizados
void freeExplosions();
// Busca una textura a partir del tamaño
int getIndexBySize(int size);
public:
// Constructor
@@ -41,7 +40,7 @@ public:
void render();
// Añade texturas al objetp
void addTexture(Texture *texture);
void addTexture(int size, Texture *texture, std::vector<std::string> *animation);
// Añade una explosión
void add(int x, int y, int size);

View File

@@ -49,6 +49,11 @@ Game::Game(int playerID, int currentStage, SDL_Renderer *renderer, Screen *scree
n2500Sprite = new SmartSprite(gameTextTexture);
n5000Sprite = new SmartSprite(gameTextTexture);
explosions->addTexture(1, explosionsTextures[0], explosionsAnimations[0]);
explosions->addTexture(2, explosionsTextures[1], explosionsAnimations[1]);
explosions->addTexture(3, explosionsTextures[2], explosionsAnimations[2]);
explosions->addTexture(4, explosionsTextures[3], explosionsAnimations[3]);
canvas = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, playArea.w, playArea.h);
SDL_SetTextureBlendMode(canvas, SDL_BLENDMODE_BLEND);