70 lines
2.3 KiB
C++
70 lines
2.3 KiB
C++
#pragma once
|
|
|
|
#include <SDL3/SDL.h>
|
|
|
|
#include <memory> // Para shared_ptr
|
|
#include <string> // Para string
|
|
#include <utility>
|
|
|
|
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
|
|
bool jail_is_open{false}; // Indica si se puede entrar a la Jail
|
|
};
|
|
|
|
// Métodos públicos
|
|
explicit Scoreboard(std::shared_ptr<Data> 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
|
|
static constexpr float ITEMS_COLOR_BLINK_DURATION = 0.333F;
|
|
|
|
// 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 updateItemsColor(float delta_time);
|
|
void fillTexture();
|
|
|
|
// Objetos y punteros
|
|
std::shared_ptr<Data> data_;
|
|
std::shared_ptr<Surface> surface_;
|
|
|
|
// Variables de estado
|
|
bool is_paused_{false};
|
|
Uint32 paused_time_{0};
|
|
Uint32 paused_time_elapsed_{0};
|
|
ClockData clock_{};
|
|
Uint8 items_color_{VALUE_COLOR};
|
|
SDL_FRect surface_dest_{};
|
|
float items_color_timer_{0.0F};
|
|
};
|