#pragma once #include #include // Para shared_ptr #include // Para vector #include "utils/delta_timer.hpp" // Para DeltaTimer class SurfaceSprite; // Forward declaration class Surface; // Forward declaration // Estados de la secuencia del logo enum class LogoState { INITIAL, // Espera inicial JAILGAMES_SLIDE_IN, // Las líneas de JAILGAMES se deslizan hacia el centro SINCE_1998_FADE_IN, // Aparición gradual del texto "Since 1998" DISPLAY, // Logo completo visible FADE_OUT, // Desaparición gradual END // Fin de la secuencia }; class Logo { public: Logo(); // Constructor ~Logo() = default; // Destructor void run(); // Bucle principal private: // --- Constantes de tiempo (en segundos) --- static constexpr float INITIAL_DELAY = 0.5f; // Tiempo antes de que empiece la animación static constexpr float JAILGAMES_SLIDE_DURATION = 1.2f; // Duración del slide-in de JAILGAMES static constexpr float SINCE_1998_FADE_DURATION = 0.5f; // Duración del fade-in de "Since 1998" static constexpr float DISPLAY_DURATION = 3.5f; // Tiempo que el logo permanece visible static constexpr float FADE_OUT_DURATION = 0.5f; // Duración del fade-out final // --- Constantes de animación --- static constexpr float JAILGAMES_SLIDE_SPEED = 800.0f; // Velocidad de slide-in (pixels/segundo) static constexpr int JAILGAMES_DEST_X = 37; // Posición X de destino para JAILGAMES // --- Objetos y punteros --- std::shared_ptr jailgames_surface_; // Textura con los graficos "JAILGAMES" std::shared_ptr since_1998_surface_; // Textura con los graficos "Since 1998" std::vector> jailgames_sprite_; // Vector con los sprites de cada linea que forman el bitmap JAILGAMES std::shared_ptr since_1998_sprite_; // SSprite para manejar la textura2 Uint8 jailgames_color_ = 0; // Color para el sprite de "JAILGAMES" Uint8 since_1998_color_ = 0; // Color para el sprite de "Since 1998" // --- Variables de estado --- std::vector color_; // Vector con los colores para el fade std::unique_ptr delta_timer_; // Timer para delta time LogoState state_; // Estado actual de la secuencia float state_time_; // Tiempo acumulado en el estado actual // --- Funciones --- void update(); // Actualiza las variables void render(); // Dibuja en pantalla void checkEvents(); // Comprueba el manejador de eventos void checkInput(); // Comprueba las entradas void updateJAILGAMES(float delta_time); // Gestiona el logo de JAILGAME (time-based) void updateTextureColors(); // Gestiona el color de las texturas void updateState(float delta_time); // Actualiza el estado actual void transitionToState(LogoState new_state); // Transiciona a un nuevo estado int getColorIndex(float progress) const; // Calcula el índice de color según el progreso (0.0-1.0) void endSection(); // Termina la sección void initColors(); // Inicializa el vector de colores void initSprites(); // Crea los sprites de cada linea };