#pragma once #include #include // Para shared_ptr #include // Para string, basic_string #include #include // Para vector class SurfaceAnimatedSprite; // lines 10-10 class Surface; // lines 11-11 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}; // Horas transcurridas int minutes{0}; // Minutos transcurridos int seconds{0}; // Segundos transcurridos std::string separator{":"}; // Separador para mostrar el tiempo }; // Constantes de tiempo static constexpr float ITEMS_COLOR_BLINK_DURATION = 0.333F; // Duración de cada estado del parpadeo (era 10 frames @ 60fps) static constexpr float SPRITE_WALK_CYCLE_DURATION = 0.667F; // Duración del ciclo de caminar (era 40 frames @ 60fps) static constexpr int SPRITE_WALK_FRAMES = 4; // Número de frames de animación // Métodos privados auto getTime() -> ClockData; // Obtiene el tiempo transcurrido de partida void updateItemsColor(float delta_time); // Actualiza el color de la cantidad de items recogidos void fillTexture(); // Dibuja los elementos del marcador en la surface // 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 de estado std::vector color_; // Vector con los colores del objeto bool is_paused_{false}; // Indica si el marcador esta en modo pausa Uint32 paused_time_{0}; // Milisegundos que ha estado el marcador en pausa Uint32 paused_time_elapsed_{0}; // Tiempo acumulado en pausa ClockData clock_{}; // Contiene las horas, minutos y segundos transcurridos desde el inicio de la partida Uint8 items_color_{0}; // Color de la cantidad de items recogidos SDL_FRect surface_dest_{}; // Rectangulo donde dibujar la surface del marcador float time_accumulator_{0.0F}; // Acumulador de tiempo para animaciones float items_color_timer_{0.0F}; // Timer para parpadeo de color de items };