#pragma once #include // Para Uint16, SDL_FRect, SDL_Renderer, SDL_Texture, Uint64, Uint8 #include // Para unique_ptr, shared_ptr #include // Para string #include // Para vector #include "color.h" // Para Color #include "fade.h" // Para Fade #include "path_sprite.h" // Para Path, PathSprite (ptr only) class Background; class Sprite; // --- Clase HiScoreTable: muestra la tabla de puntuaciones más altas --- // Esta clase gestiona un estado del programa. Se encarga de mostrar la tabla con las puntuaciones // más altas. Para ello utiliza un objeto que se encarga de pintar el fondo y una textura // sobre la que escribe las puntuaciones. Esta textura se recorre modificando la ventana de vista // para dar el efecto de que la textura se mueve sobre la pantalla. // Para mejorar la legibilidad de los textos, el objeto que dibuja el fondo es capaz de modificar // su atenuación. class HiScoreTable { public: // --- Constructor y destructor --- HiScoreTable(); ~HiScoreTable(); // --- Bucle principal --- void run(); private: // --- Constantes --- static constexpr Uint16 COUNTER_END = 800; // Valor final para el contador // --- Objetos y punteros --- SDL_Renderer *renderer_; // El renderizador de la ventana SDL_Texture *backbuffer_; // Textura para usar como backbuffer std::unique_ptr fade_; // Objeto para renderizar fades std::unique_ptr background_; // Objeto para dibujar el fondo del juego std::unique_ptr header_; // Sprite con la cabecera del texto std::vector> entry_names_; // Lista con los sprites de cada uno de los nombres de la tabla de records std::vector paths_; // Vector con los recorridos precalculados // --- Variables --- Uint16 counter_ = 0; // Contador Uint64 last_time_ = 0; // Último timestamp para calcular delta-time SDL_FRect view_area_; // Parte de la textura que se muestra en pantalla Fade::Mode fade_mode_; // Modo de fade a utilizar Color background_fade_color_; // Color de atenuación del fondo std::vector entry_colors_; // Colores para destacar las entradas en la tabla // --- Métodos internos --- void update(float delta_time); // Actualiza las variables void render(); // Pinta en pantalla static void checkEvents(); // Comprueba los eventos static void checkInput(); // Comprueba las entradas static auto format(int number) -> std::string; // Convierte un entero a un string con separadores de miles void fillTexture(); // Dibuja los sprites en la textura void updateFade(float delta_time); // Gestiona el fade void createSprites(); // Crea los sprites con los textos void updateSprites(float delta_time); // Actualiza las posiciones de los sprites de texto void initFade(); // Inicializa el fade void initBackground(); // Inicializa el fondo auto getEntryColor(int counter) -> Color; // Obtiene un color del vector de colores de entradas void iniEntryColors(); // Inicializa los colores de las entradas void glowEntryNames(); // Hace brillar los nombres de la tabla de records void updateCounter(); // Gestiona el contador float calculateDeltaTime(); // Calcula el tiempo transcurrido desde el último frame };