#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 { private: SDL_Renderer *mRenderer = nullptr; // El renderizador de la ventana SDL_Texture *mBackbuffer = nullptr; // Textura para usar como backbuffer Uint8 mFadeType = FADE_FULLSCREEN; // Tipo de fade a realizar Uint16 mCounter = 0; // Contador interno bool mEnabled = false; // Indica si el fade está activo bool mFinished = false; // Indica si ha terminado la transición Uint8 mR = 0, mG = 0, mB = 0; // Colores para el fade Uint8 mROriginal = 0, mGOriginal = 0, mBOriginal = 0; // Colores originales para FADE_RANDOM_SQUARE Uint32 mLastSquareTicks = 0; // Ticks del último cuadrado dibujado (FADE_RANDOM_SQUARE) Uint16 mSquaresDrawn = 0; // Número de cuadrados dibujados (FADE_RANDOM_SQUARE) bool mFullscreenDone = false; // Indica si el fade fullscreen ha terminado la fase de fundido SDL_Rect mRect1{}; // Rectangulo usado para crear los efectos de transición SDL_Rect mRect2{}; // Rectangulo usado para crear los efectos de transición public: // Constructor explicit Fade(SDL_Renderer *renderer); // Destructor ~Fade(); // Inicializa las variables void init(Uint8 r, Uint8 g, Uint8 b); // Pinta una transición en pantalla void render(); // Actualiza las variables internas void update(); // Activa el fade void activateFade(); // Comprueba si ha terminado la transicion bool hasEnded(); // Comprueba si está activo bool isEnabled(); // Establece el tipo de fade void setFadeType(Uint8 fadeType); };