#pragma once #include // Para unique_ptr, shared_ptr #include "animated_sprite.h" // Para AnimatedSprite #include "smart_sprite.h" // Para SmartSprite #include "sprite.h" // Para Sprite class Texture; // lines 7-7 // Clase GameLogo class GameLogo { private: enum class Status { DISABLED, MOVING, SHAKING, FINISHED, }; struct Shake { int desp = 1; // Pixels de desplazamiento para agitar la pantalla en el eje x int delay = 2; // Retraso entre cada desplazamiento de la pantalla al agitarse int lenght = 8; // Cantidad de desplazamientos a realizar int remaining = lenght; // Cantidad de desplazamientos pendientes a realizar int counter = delay; // Contador para el retraso int origin; // Valor inicial de la pantalla para dejarla igual tras el desplazamiento // Constructor por defect Shake() = default; // Constructor Shake(int d, int de, int l, int o) : desp(d), delay(de), lenght(l), remaining(l), counter(de), origin(o) {} // Inicializa los miembros void init(int d, int de, int l, int o) { desp = d; delay = de; lenght = l; remaining = l; counter = de; origin = o; } }; // Objetos y punteros std::shared_ptr dust_texture_; // Textura con los graficos del polvo std::shared_ptr coffee_texture_; // Textura con los graficos de la palabra "COFFEE" std::shared_ptr crisis_texture_; // Textura con los graficos de la plabra "CRISIS" std::shared_ptr arcade_edition_texture_; // Textura con los graficos de "Arcade Edition" std::unique_ptr dust_left_sprite_; // Sprite con la el polvo que aparece al colisionar el texto de la pantalla de titulo std::unique_ptr dust_right_sprite_; // Sprite con la el polvo que aparece al colisionar el texto de la pantalla de titulo std::unique_ptr coffee_sprite_; // Sprite con la palabra "COFFEE" para la pantalla de titulo std::unique_ptr crisis_sprite_; // Sprite con la palabra "CRISIS" para la pantalla de titulo std::unique_ptr arcade_edition_sprite_; // Sprite con los graficos de "Arcade Edition" // Variables int x_; // Posición donde dibujar el logo int y_; // Posición donde dibujar el logo float zoom_; // Zoom aplicado al texto "ARCADE EDITION" int post_finished_counter_ = 1; // Contador final una vez terminada las animaciones de los logos Status coffee_crisis_status_ = Status::DISABLED; // Estado en el que se encuentra el texto "COFFEE CRISIS" Status arcade_edition_status_ = Status::DISABLED; // Estado en el que se encuentra el texto "ARCADE_EDITION" Shake shake_; // Estructura para generar el efecto de agitación // Inicializa las variables void init(); // Calcula el desplazamiento vertical inicial int getInitialVerticalDesp(); public: // Constructor GameLogo(int x, int y); // Destructor ~GameLogo() = default; // Pinta la clase en pantalla void render(); // Actualiza la lógica de la clase void update(); // Activa la clase void enable(); // Indica si ha terminado la animación bool hasFinished() const; // Recarga las texturas void reLoad(); };