47 lines
2.3 KiB
C++
47 lines
2.3 KiB
C++
#pragma once
|
|
|
|
#include <SDL3/SDL.h>
|
|
|
|
#include <cstdint>
|
|
|
|
// 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(float dt_s); // 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 intern (frame-based)
|
|
float elapsed_s_ = 0.0F; // Acumulador de temps (time-based)
|
|
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
|
|
};
|