#pragma once #include #include // Para shared_ptr #include // Para string, basic_string #include // Para vector class SAnimatedSprite; // lines 10-10 class Surface; // lines 11-11 struct ScoreboardData { int items; // Lleva la cuenta de los objetos recogidos int lives; // Lleva la cuenta de las vidas restantes del jugador int rooms; // Lleva la cuenta de las habitaciones visitadas bool music; // Indica si ha de sonar la música durante el juego Uint8 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 por defecto ScoreboardData() : items(0), lives(0), rooms(0), music(true), color(0), ini_clock(0), jail_is_open(false) {} // Constructor parametrizado ScoreboardData(int items, int lives, int rooms, bool music, Uint8 color, Uint32 ini_clock, bool jail_is_open) : items(items), lives(lives), rooms(rooms), music(music), color(color), ini_clock(ini_clock), jail_is_open(jail_is_open) {} }; class Scoreboard { private: struct ClockData { int hours; int minutes; int seconds; std::string separator; // Constructor por defecto ClockData() : hours(0), minutes(0), seconds(0), separator(":") {} // Constructor parametrizado ClockData(int h, int m, int s, const std::string& sep) : hours(h), minutes(m), seconds(s), separator(sep) {} }; // Objetos y punteros std::shared_ptr player_sprite_; // Sprite para mostrar las vidas en el marcador std::shared_ptr item_surface_; // Surface con los graficos para los elementos del marcador std::shared_ptr data_; // Contiene las variables a mostrar en el marcador std::shared_ptr surface_; // Surface 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 Uint8 items_color_; // Color de la cantidad de items recogidos SDL_Rect surface_dest_; // Rectangulo donde dibujar la surface 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 surface void fillTexture(); public: // Constructor explicit Scoreboard(std::shared_ptr data); // Destructor ~Scoreboard() = default; // Pinta el objeto en pantalla void render(); // Actualiza las variables del objeto void update(); // Pone el marcador en modo pausa void setPaused(bool value); // Devuelve la cantidad de minutos de juego transcurridos int getMinutes(); };