#pragma once #include // Para SDL_FPoint, Uint64 #include // Para unique_ptr, shared_ptr #include // Para vector #include "color.h" // Para Color #include "sprite.h" // Para Sprite class Texture; // --- Clase Logo: dibuja el logo de JAILGAMES con efectos visuales --- // Esta clase gestiona un estado del programa. Se encarga de dibujar por pantalla el // logo de "JAILGAMES" utilizando un sencillo efecto consistente en generar un sprite por // cada línea del bitmap que forma la palabra "JAILGAMES". Posteriormente realiza una // modulación de color sobre la textura para simular un fade to black al estilo // ZX Spectrum. class Logo { public: // --- Constructor y destructor --- Logo(); ~Logo(); // --- Bucle principal --- void run(); private: // --- Constantes --- static constexpr int SHOW_SINCE_SPRITE_COUNTER_MARK = 70; // Tiempo del contador en el que empieza a verse el sprite de "SINCE 1998" static constexpr int INIT_FADE_COUNTER_MARK = 300; // Tiempo del contador cuando inicia el fade a negro static constexpr int END_LOGO_COUNTER_MARK = 400; // Tiempo del contador para terminar el logo static constexpr int POST_LOGO_DURATION = 20; // Tiempo que dura el logo con el fade al máximo static constexpr int SPEED = 8; // Velocidad de desplazamiento de cada línea // --- Objetos y punteros --- std::shared_ptr since_texture_; // Textura con los gráficos "Since 1998" std::unique_ptr since_sprite_; // Sprite para manejar la since_texture std::shared_ptr jail_texture_; // Textura con los gráficos "JAILGAMES" std::vector> jail_sprite_; // Vector con los sprites de cada línea que forman el bitmap JAILGAMES // --- Variables --- std::vector color_; // Vector con los colores para el fade int counter_ = 0; // Contador Uint64 ticks_ = 0; // Contador de ticks para ajustar la velocidad del programa SDL_FPoint dest_; // Posición donde dibujar el logo // --- Métodos internos --- void update(); // Actualiza las variables void render(); // Dibuja en pantalla static void checkEvents(); // Comprueba el manejador de eventos static void checkInput(); // Comprueba las entradas void updateJAILGAMES(); // Gestiona el logo de JAILGAMES void renderJAILGAMES(); // Renderiza el logo de JAILGAMES void updateTextureColors(); // Gestiona el color de las texturas };