#pragma once #include // Para SDL_Rect #include // Para SDL_Renderer, SDL_Texture #include // Para Uint8, Uint16 #include // Para vector // Tipos de fundido enum class FadeType : Uint8 { FULLSCREEN = 0, CENTER = 1, RANDOM_SQUARE = 2, VENETIAN = 3, }; // Modos de fundido enum class FadeMode : Uint8 { IN = 0, OUT = 1, }; // Estados del objeto enum class FadeState : Uint8 { NOT_ENABLED = 0, PRE = 1, FADING = 2, POST = 3, FINISHED = 4, }; // Clase Fade class Fade { private: // Objetos y punteros SDL_Renderer *renderer_; // El renderizador de la ventana SDL_Texture *backbuffer_; // Textura para usar como backbuffer con SDL_TEXTUREACCESS_TARGET // Variables FadeType type_; // Tipo de fade a realizar FadeMode mode_; // Modo de fade a realizar FadeState state_ = FadeState::NOT_ENABLED; // Estado actual del objeto Uint16 counter_; // Contador interno Uint8 r_, g_, b_, a_; // Colores para el fade SDL_Rect rect1_; // Rectangulo usado para crear los efectos de transición SDL_Rect rect2_; // Rectangulo usado para crear los efectos de transición int num_squares_width_; // Cantidad total de cuadraditos en horizontal para el FadeType::RANDOM_SQUARE int num_squares_height_; // Cantidad total de cuadraditos en vertical para el FadeType::RANDOM_SQUARE std::vector square_; // Vector con los indices de los cuadrados para el FadeType::RANDOM_SQUARE int fade_random_squares_delay_; // Duración entre cada pintado de cuadrados int fade_random_squares_mult_; // Cantidad de cuadrados que se pintaran cada vez int post_duration_ = 0; // Duración posterior del fade tras finalizar int post_counter_ = 0; // Contador para la duración posterior int pre_duration_ = 0; // Duración previa del fade antes de iniciar int pre_counter_ = 0; // Contador para la duración previa int value_ = 0; // Estado actual del fade entre 0 y 100 // Inicializa las variables void init(); // Limpia el backbuffer void cleanBackbuffer(Uint8 r, Uint8 g, Uint8 b, Uint8 a); // Calcula el valor del estado del fade int calculateValue(int min, int max, int current); public: // Constructor Fade(); // Destructor ~Fade(); // Resetea algunas variables para volver a hacer el fade sin perder ciertos parametros void reset(); // Pinta una transición en pantalla void render(); // Actualiza las variables internas void update(); // Activa el fade void activate(); // Establece el color del fade void setColor(Uint8 r, Uint8 g, Uint8 b); // Getters int getValue() const { return value_; } bool isEnabled() const { return state_ != FadeState::NOT_ENABLED; } bool hasEnded() const { return state_ == FadeState::FINISHED; } // Setters void setType(FadeType type) { type_ = type; } void setMode(FadeMode mode) { mode_ = mode; } void setPostDuration(int value) { post_duration_ = value; } void setPreDuration(int value) { pre_duration_ = value; } };