#pragma once #include #include // Para shared_ptr #include // Para string #include class Surface; class Scoreboard { public: // Tipos anidados struct Data { int items{0}; // Lleva la cuenta de los objetos recogidos int lives{0}; // Lleva la cuenta de las vidas restantes del jugador int rooms{0}; // Lleva la cuenta de las habitaciones visitadas bool music{true}; // Indica si ha de sonar la música durante el juego Uint8 color{0}; // Color para escribir el texto del marcador Uint32 ini_clock{0}; // Tiempo inicial para calcular el tiempo transcurrido }; // Métodos públicos explicit Scoreboard(std::shared_ptr data); // Constructor ~Scoreboard() = default; // Destructor void render(); // Pinta el objeto en pantalla void update(float delta_time); // Actualiza las variables del objeto void setPaused(bool value); // Pone el marcador en modo pausa auto getMinutes() -> int; // Devuelve la cantidad de minutos de juego transcurridos private: // Tipos anidados struct ClockData { int hours{0}; int minutes{0}; int seconds{0}; std::string separator{":"}; }; // Constantes de tiempo // Posición de los elementos (2 líneas centradas verticalmente en surface de 24px) static constexpr int LINE1_Y = 5; static constexpr int LINE2_Y = 13; // Colores static constexpr Uint8 LABEL_COLOR = 11; static constexpr Uint8 VALUE_COLOR = 9; // Métodos privados auto getTime() -> ClockData; void fillTexture(); // Objetos y punteros std::shared_ptr data_; std::shared_ptr surface_; // Variables de estado bool is_paused_{false}; Uint32 paused_time_{0}; Uint32 paused_time_elapsed_{0}; ClockData clock_{}; SDL_FRect surface_dest_{}; };