#pragma once #include // Para SDL_Renderer #include // Para Uint32 #include // Para basic_string, string #include // Para vector #include "utils.h" // Para color_t #include // Para shared_ptr class AnimatedSprite; class Asset; class Resource; class Text; class Texture; struct ScoreboardData { int items; // Lleva la cuenta de los objetos recogidos int lives; // Lleva la cuenta de ls vidas restantes del jugador int rooms; // Lleva la cuenta de las habitaciones visitadas bool music; // Indica si ha de sonar la musica durante el juego Color color; // Color para escribir el texto del marcador Uint32 ini_clock; // Tiempo inicial para calcular el tiempo transcurrido bool jail_is_open; // Indica si se puede entrar a la Jail // Constructor ScoreboardData() : items(0), lives(3), rooms(0), music(true), color({0, 0, 0}), ini_clock(0), jail_is_open(false) {} }; class Scoreboard { private: struct ClockData { int hours; int minutes; int seconds; std::string separator; }; // Objetos y punteros SDL_Renderer *renderer_; // El renderizador de la ventana Resource *resource_; // Objeto con los recursos Asset *asset_; // Objeto con la ruta a todos los ficheros de recursos std::shared_ptr text_; // Objeto para escribir texto std::shared_ptr player_sprite_; // Sprite para mostrar las vidas en el marcador std::shared_ptr item_texture_; // Textura con los graficos para las vidas std::shared_ptr data_; // Contiene las variables a mostrar en el marcador SDL_Texture *texture_; // Textura donde dibujar el marcador; // Variables std::vector color_; // Vector con los colores del objeto int counter_; // Contador interno int change_color_speed_; // Cuanto mas alto, mas tarda en cambiar de color bool is_paused_; // Indica si el marcador esta en modo pausa Uint32 paused_time_; // Milisegundos que ha estado el marcador en pausa Uint32 paused_time_elapsed_; // Tiempo acumulado en pausa ClockData clock_; // Contiene las horas, minutos y segundos transcurridos desde el inicio de la partida Color items_color_; // Color de la cantidad de items recogidos SDL_Rect texture_dest_; // Rectangulo donde dibujar la textura del marcador // Obtiene el tiempo transcurrido de partida ClockData getTime(); // Actualiza el color de la cantidad de items recogidos void updateItemsColor(); // Dibuja los elementos del marcador en la textura void fillTexture(); public: // Constructor Scoreboard(std::shared_ptr data); // Destructor ~Scoreboard(); // Pinta el objeto en pantalla void render(); // Actualiza las variables del objeto void update(); // Recarga la textura void reLoadTexture(); // Recarga la paleta void reLoadPalette(); // Pone el marcador en modo pausa void pause(); // Quita el modo pausa del marcador void resume(); // Devuelve la cantidad de minutos de juego transcurridos int getMinutes(); };