#pragma once #include "balloon.h" class BalloonFormations; // lines 16-16 class Explosions; // lines 18-18 class BalloonManager { private: std::vector> balloons_; // Vector con los globos std::unique_ptr explosions_; // Objeto para dibujar explosiones std::unique_ptr balloon_formations_; // Objeto para gestionar las oleadas enemigas std::vector> balloon_textures_; // Vector con las texturas de los globos std::vector> explosions_textures_; // Vector con las texturas de las explosiones std::vector> balloon_animations_; // Vector con las animaciones de los globos std::vector> explosions_animations_; // Vector con las animaciones de las explosiones float balloon_speed_; // Velocidad a la que se mueven los enemigos float default_balloon_speed_; // Velocidad base de los enemigos, sin incrementar int balloon_deploy_counter_ = 0; // Cuando se lanza una formación, se le da un valor y no sale otra hasta que llegue a cero int balloons_popped_ = 0; // Lleva la cuenta de los globos explotados bool power_ball_enabled_ = false; // Indica si hay una powerball ya activa int power_ball_counter_ = 0; // Contador de formaciones enemigas entre la aparicion de una PowerBall y otra int last_balloon_deploy_ = 0; // Guarda cual ha sido la última formación desplegada para no repetir; // Inicializa void init(); public: // Constructor BalloonManager(); // Destructor ~BalloonManager() = default; // Actualiza void update(); // Renderiza los globos void renderBalloons(); // Vacia del vector de globos los globos que ya no sirven void freeBalloons(); // Crea una formación de enemigos void deployBalloonFormation(); // Actualiza la variable enemyDeployCounter void updateBalloonDeployCounter(); // Indica si se puede crear una powerball bool canPowerBallBeCreated(); // Calcula el poder actual de los globos en pantalla int calculateScreenPower(); // Crea un globo nuevo en el vector de globos std::shared_ptr createBalloon(float x, int y, BalloonType type, BalloonSize size, float velx, float speed, int creation_timer); // Crea un globo a partir de otro globo void createChildBalloon(const std::shared_ptr &balloon, const std::string &direction); // Crea una PowerBall void createPowerBall(); // Establece la velocidad de los globos void setBalloonSpeed(float speed); // Actualiza la velocidad de los globos en funcion del poder acumulado de la fase void checkAndUpdateBalloonSpeed(); // Explosiona un globo. Lo destruye y crea otros dos si es el caso void popBalloon(std::shared_ptr balloon); // Explosiona un globo. Lo destruye = no crea otros globos void destroyBalloon(std::shared_ptr &balloon); // Destruye todos los globos void destroyAllBalloons(); // Detiene todos los globos void stopAllBalloons(); // Pone en marcha todos los globos void startAllBalloons(); // Cambia el color de todos los globos void reverseColorsToAllBalloons(); // Cambia el color de todos los globos void normalColorsToAllBalloons(); // Recarga las texturas void reLoad(); // Crea dos globos gordos void createTwoBigBalloons(); };