#pragma once #include // Tipos de fundido constexpr int FADE_FULLSCREEN = 0; constexpr int FADE_CENTER = 1; constexpr int FADE_RANDOM_SQUARE = 2; // Clase Fade class Fade { public: explicit Fade(SDL_Renderer *renderer); // Constructor ~Fade(); // Destructor void init(Uint8 r, Uint8 g, Uint8 b); // Inicializa las variables void render(); // Pinta una transición en pantalla void update(); // Actualiza las variables internas void activateFade(); // Activa el fade [[nodiscard]] auto hasEnded() const -> bool; // Comprueba si ha terminado la transicion [[nodiscard]] auto isEnabled() const -> bool; // Comprueba si está activo void setFadeType(Uint8 fade_type); // Establece el tipo de fade private: void renderFadeFullscreen(); // Helper de render: tipo FADE_FULLSCREEN void renderFadeCenter(); // Helper de render: tipo FADE_CENTER void renderFadeRandomSquare(); // Helper de render: tipo FADE_RANDOM_SQUARE SDL_Renderer *renderer_ = nullptr; // El renderizador de la ventana SDL_Texture *backbuffer_ = nullptr; // Textura para usar como backbuffer Uint8 fade_type_ = FADE_FULLSCREEN; // Tipo de fade a realizar Uint16 counter_ = 0; // Contador interno bool enabled_ = false; // Indica si el fade está activo bool finished_ = false; // Indica si ha terminado la transición Uint8 r_ = 0, g_ = 0, b_ = 0; // Colores para el fade Uint8 r_original_ = 0, g_original_ = 0, b_original_ = 0; // Colores originales para FADE_RANDOM_SQUARE Uint32 last_square_ticks_ = 0; // Ticks del último cuadrado dibujado (FADE_RANDOM_SQUARE) Uint16 squares_drawn_ = 0; // Número de cuadrados dibujados (FADE_RANDOM_SQUARE) bool fullscreen_done_ = false; // Indica si el fade fullscreen ha terminado la fase de fundido SDL_Rect rect1_{}; // Rectangulo usado para crear los efectos de transición SDL_Rect rect2_{}; // Rectangulo usado para crear los efectos de transición };