50 lines
2.9 KiB
C++
50 lines
2.9 KiB
C++
#pragma once // Evita inclusiones múltiples del archivo de encabezado
|
|
|
|
#include <SDL3/SDL_stdinc.h> // Incluye definiciones estándar de SDL, como Uint64
|
|
#include <memory> // Proporciona soporte para punteros inteligentes (shared_ptr, unique_ptr)
|
|
#include "s_sprite.h" // Declara la clase SSprite, utilizada para manejar sprites
|
|
|
|
class Surface; // Declaración adelantada de la clase Surface
|
|
|
|
// Clase Logo: Maneja la lógica principal de un logotipo animado o interactivo
|
|
class Logo
|
|
{
|
|
private:
|
|
enum class LogoState
|
|
{
|
|
BLACK,
|
|
LINES,
|
|
FLASH,
|
|
COMPLETE,
|
|
END
|
|
};
|
|
|
|
Uint64 ticks = 0; // Contador de ticks para medir el tiempo o controlar animaciones
|
|
std::shared_ptr<Surface> logo_surface = nullptr; // Superficie del logotipo, compartida entre múltiples objetos
|
|
std::unique_ptr<SSprite> logo_sprite = nullptr; // Sprite del logotipo, propiedad exclusiva de esta clase
|
|
LogoState state = LogoState::BLACK; // Gestiona los estados del logo
|
|
Uint64 init_time = 0, elapsed_time = 0; // Para medir el tiempo transcurrido
|
|
int steps[70] = {0}; // Lleva la cuenta del paso en el que se encuentra cada color de la paleta
|
|
int max_step = 8; // Cantidad total de pasos para el efecto de paleta del borde de las letras
|
|
int flash_step = 0; // Paso en el que se encuentra el flash final
|
|
int max_flash_step = 48; // Cantidad de pasos para efectuar el flash del final
|
|
|
|
// Métodos privados para manejar el ciclo de vida y la lógica del logotipo
|
|
void init(); // Inicializa los recursos necesarios para el logotipo
|
|
void close(); // Libera los recursos utilizados por el logotipo
|
|
void checkEvents(); // Maneja los eventos de entrada (teclado, ratón, etc.)
|
|
void update(); // Actualiza el estado del logotipo (animaciones, lógica, etc.)
|
|
void render(); // Renderiza el logotipo en pantalla
|
|
|
|
// Métodos específicos
|
|
void blackOutPalette(); // Transforma todos los colores de la paleta a negro
|
|
void updateState(); // Gestiona los diferentes estados del logo
|
|
bool advancePaletteStep(int size, int steps[], int maxStep); // Pasa los colores de la paleta de negro a blanco
|
|
void initSteps(); // Inicializa las variables para gestionar los pasos en que se encuentran las animaciones de paleta
|
|
bool flashPalette(int step, int max_steps); // Modifica los colores de la paleta para simular un flash
|
|
|
|
public:
|
|
Logo(); // Constructor: Inicializa la clase Logo
|
|
~Logo(); // Destructor: Limpia los recursos utilizados por la clase Logo
|
|
int run(); // Método principal que ejecuta el ciclo de vida del logotipo
|
|
}; |