#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; // lines 10-10 class Fade; // lines 11-11 class PathSprite; class Sprite; enum class FadeMode : Uint8; // lines 13-13 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 puntuacions. 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 { 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 spritres 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 // Actualiza las variables void update(); // Pinta en pantalla void render(); // Comprueba los eventos void checkEvents(); // Comprueba las entradas void checkInput(); // Convierte un entero a un string con separadores de miles std::string format(int number); // Dibuja los sprites en la textura void fillTexture(); // Gestiona el fade void updateFade(); // Crea los sprites con los textos void createSprites(); // Actualiza las posiciones de los sprites de texto void updateSprites(); // Inicializa el fade void initFade(); // Inicializa el fondo void initBackground(); // Obtiene un color del vector de colores de entradas Color getEntryColor(int counter_); // Inicializa los colores de las entradas void iniEntryColors(); // Hace brillar los nombres de la tabla de records void glowEntryNames(); // Gestiona la musica void updateMusic(); // Gestiona el contador void updateCounter(); public: // Constructor HiScoreTable(); // Destructor ~HiScoreTable(); // Bucle principal void run(); };