#pragma once #include #include // Para std::function #include // Para shared_ptr #include // Para vector #include "utils/delta_timer.hpp" // Para DeltaTimer class SurfaceSprite; // Forward declaration class Surface; // Forward declaration class Logo { public: // --- Tipos --- using EasingFunction = std::function; // Función de easing (permite lambdas) // --- Enumeraciones --- enum class State { 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 }; // --- Constructor y Destructor --- Logo(); ~Logo() = default; // --- Bucle principal --- void run(); private: // --- Constantes de tiempo (en segundos) --- static constexpr float INITIAL_DELAY = 0.5F; // Tiempo antes de que empiece la animación 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_DURATION = 0.8F; // Duración de la animación de slide-in (segundos) // --- Métodos --- void update(); // Actualiza las variables void render(); // Dibuja en pantalla static void handleEvents(); // Comprueba el manejador de eventos static void handleInput(); // 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(State new_state); // Transiciona a un nuevo estado [[nodiscard]] auto getColorIndex(float progress) const -> int; // Calcula el índice de color según el progreso (0.0-1.0) static void endSection(); // Termina la sección void initColors(); // Inicializa el vector de colores void initSprites(); // Crea los sprites de cada linea // --- Variables miembro --- // Objetos y punteros a recursos 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::vector jailgames_initial_x_; // Posiciones X iniciales de cada línea (para interpolación con easing) std::shared_ptr since_1998_sprite_; // SSprite para manejar la textura2 std::unique_ptr delta_timer_; // Timer para delta time // Posiciones calculadas dinámicamente (centrado independiente del tamaño del canvas) int jailgames_dest_x_{0}; // Posición X de destino para JAILGAMES (centrado horizontal) int base_y_{0}; // Posición Y base para los sprites (centrado vertical) // Variables de estado de colores std::vector color_; // Vector con los colores para el fade 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 de la secuencia State state_{State::INITIAL}; // Estado actual de la secuencia float state_time_{0.0F}; // Tiempo acumulado en el estado actual EasingFunction easing_function_; // Función de easing para la animación del logo };