#pragma once #include #include // Clase Fade class Fade { public: enum class Type : std::uint8_t { FULLSCREEN, CENTER, RANDOM_SQUARE }; 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(Type fade_type); // Establece el tipo de fade private: void renderFadeFullscreen(); // Helper de render: tipo FULLSCREEN void renderFadeCenter(); // Helper de render: tipo CENTER void renderFadeRandomSquare(); // Helper de render: tipo RANDOM_SQUARE SDL_Renderer *renderer_ = nullptr; // El renderizador de la ventana SDL_Texture *backbuffer_ = nullptr; // Textura para usar como backbuffer Type fade_type_{Type::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 RANDOM_SQUARE Uint32 last_square_ticks_ = 0; // Ticks del último cuadrado dibujado (RANDOM_SQUARE) Uint16 squares_drawn_ = 0; // Número de cuadrados dibujados (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 };