#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 class Logo { public: // --- 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_SPEED = 350.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_ = nullptr; // Textura con los graficos "JAILGAMES" std::shared_ptr since_1998_surface_ = nullptr; // 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_ = nullptr; // 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 fadeF std::unique_ptr delta_timer_ = nullptr; // Timer para delta time State state_ = State::INITIAL; // Estado actual de la secuencia float state_time_ = 0.0F; // Tiempo acumulado en el estado actual // --- Funciones --- 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) [[nodiscard]] auto allJailgamesLinesInPosition() const -> bool; // Verifica si todas las líneas están en su posición destino static void endSection(); // Termina la sección void initColors(); // Inicializa el vector de colores void initSprites(); // Crea los sprites de cada linea };