Files
coffee-crisis/source/core/rendering/fade.h
T

45 lines
2.4 KiB
C++

#pragma once
#include <SDL3/SDL.h>
// 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
};