#pragma once #include // Para SDL_FRect #include // Para SDL_Renderer, SDL_Texture #include // Para Uint16, Uint32, Uint8 #include // Para unique_ptr, shared_ptr #include // Para string #include // Para vector #include "utils.h" class Background; class Fade; class PathSprite; class Sprite; enum class FadeMode : Uint8; struct Path; /* 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. */ // Clase HiScoreTable class HiScoreTable { public: // Constructor HiScoreTable(); // Destructor ~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 ticks_; // Contador de ticks para ajustar la velocidad del programa SDL_FRect view_area_; // Parte de la textura que se muestra en pantalla FadeMode 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(); // Actualiza las variables void render(); // Pinta en pantalla void checkEvents(); // Comprueba los eventos void checkInput(); // Comprueba las entradas std::string format(int number); // Convierte un entero a un string con separadores de miles void fillTexture(); // Dibuja los sprites en la textura void updateFade(); // Gestiona el fade void createSprites(); // Crea los sprites con los textos void updateSprites(); // Actualiza las posiciones de los sprites de texto void initFade(); // Inicializa el fade void initBackground(); // Inicializa el fondo Color getEntryColor(int counter_); // 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 };