81 lines
4.6 KiB
C++
81 lines
4.6 KiB
C++
#pragma once
|
|
|
|
#include <SDL3/SDL.h>
|
|
|
|
#include <functional> // Para std::function
|
|
#include <memory> // Para shared_ptr
|
|
#include <vector> // Para vector
|
|
|
|
#include "utils/delta_timer.hpp" // Para DeltaTimer
|
|
class SurfaceSprite; // Forward declaration
|
|
class Surface; // Forward declaration
|
|
|
|
class Logo {
|
|
public:
|
|
// --- Tipos ---
|
|
using EasingFunction = std::function<float(float)>; // Función de easing (permite lambdas)
|
|
|
|
// --- Enumeraciones ---
|
|
enum class State {
|
|
INITIAL, // Espera inicial
|
|
JAILGAMES_SLIDE_IN, // Las líneas de JAILGAMES se deslizan hacia el centro
|
|
SINCE_1998_FADE_IN, // Aparición gradual del texto "Since 1998"
|
|
DISPLAY, // Logo completo visible
|
|
FADE_OUT, // Desaparición gradual
|
|
END // Fin de la secuencia
|
|
};
|
|
|
|
// --- Constructor y Destructor ---
|
|
Logo();
|
|
~Logo() = default;
|
|
|
|
// --- Bucle principal ---
|
|
void run();
|
|
|
|
private:
|
|
// --- Constantes de tiempo (en segundos) ---
|
|
static constexpr float INITIAL_DELAY = 0.5F; // Tiempo antes de que empiece la animación
|
|
static constexpr float SINCE_1998_FADE_DURATION = 0.5F; // Duración del fade-in de "Since 1998"
|
|
static constexpr float DISPLAY_DURATION = 3.5F; // Tiempo que el logo permanece visible
|
|
static constexpr float FADE_OUT_DURATION = 0.5F; // Duración del fade-out final
|
|
|
|
// --- Constantes de animación ---
|
|
static constexpr float JAILGAMES_SLIDE_DURATION = 0.8F; // Duración de la animación de slide-in (segundos)
|
|
|
|
// --- Métodos ---
|
|
void update(); // Actualiza las variables
|
|
void render(); // Dibuja en pantalla
|
|
static void handleEvents(); // Comprueba el manejador de eventos
|
|
static void handleInput(); // Comprueba las entradas
|
|
void updateJAILGAMES(float delta_time); // Gestiona el logo de JAILGAME (time-based)
|
|
void updateTextureColors(); // Gestiona el color de las texturas
|
|
void updateState(float delta_time); // Actualiza el estado actual
|
|
void transitionToState(State new_state); // Transiciona a un nuevo estado
|
|
[[nodiscard]] auto getColorIndex(float progress) const -> int; // Calcula el índice de color según el progreso (0.0-1.0)
|
|
static void endSection(); // Termina la sección
|
|
void initColors(); // Inicializa el vector de colores
|
|
void initSprites(); // Crea los sprites de cada linea
|
|
|
|
// --- Variables miembro ---
|
|
// Objetos y punteros a recursos
|
|
std::shared_ptr<Surface> jailgames_surface_; // Textura con los graficos "JAILGAMES"
|
|
std::shared_ptr<Surface> since_1998_surface_; // Textura con los graficos "Since 1998"
|
|
std::vector<std::shared_ptr<SurfaceSprite>> jailgames_sprite_; // Vector con los sprites de cada linea que forman el bitmap JAILGAMES
|
|
std::vector<int> jailgames_initial_x_; // Posiciones X iniciales de cada línea (para interpolación con easing)
|
|
std::shared_ptr<SurfaceSprite> since_1998_sprite_; // SSprite para manejar la textura2
|
|
std::unique_ptr<DeltaTimer> delta_timer_; // Timer para delta time
|
|
|
|
// Posiciones calculadas dinámicamente (centrado independiente del tamaño del canvas)
|
|
int jailgames_dest_x_{0}; // Posición X de destino para JAILGAMES (centrado horizontal)
|
|
int base_y_{0}; // Posición Y base para los sprites (centrado vertical)
|
|
|
|
// Variables de estado de colores
|
|
std::vector<Uint8> color_; // Vector con los colores para el fade
|
|
Uint8 jailgames_color_{0}; // Color para el sprite de "JAILGAMES"
|
|
Uint8 since_1998_color_{0}; // Color para el sprite de "Since 1998"
|
|
|
|
// Variables de estado de la secuencia
|
|
State state_{State::INITIAL}; // Estado actual de la secuencia
|
|
float state_time_{0.0F}; // Tiempo acumulado en el estado actual
|
|
EasingFunction easing_function_; // Función de easing para la animación del logo
|
|
}; |