102 lines
3.0 KiB
C++
102 lines
3.0 KiB
C++
#pragma once
|
|
|
|
#include <SDL2/SDL_rect.h> // Para SDL_Rect
|
|
#include <SDL2/SDL_render.h> // Para SDL_Renderer, SDL_Texture
|
|
#include <SDL2/SDL_stdinc.h> // Para Uint8, Uint16
|
|
#include <vector> // 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<SDL_Rect> 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; }
|
|
}; |