forked from jaildesigner-jailgames/jaildoctors_dilemma
110 lines
4.1 KiB
C++
110 lines
4.1 KiB
C++
#pragma once
|
|
|
|
#include <SDL3/SDL.h>
|
|
|
|
#include <memory> // Para shared_ptr
|
|
#include <string> // Para string, basic_string
|
|
#include <utility>
|
|
#include <vector> // Para vector
|
|
class SurfaceAnimatedSprite; // 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, std::string sep)
|
|
: hours(h),
|
|
minutes(m),
|
|
seconds(s),
|
|
separator(std::move(sep)) {}
|
|
};
|
|
|
|
// Objetos y punteros
|
|
std::shared_ptr<SurfaceAnimatedSprite> player_sprite_; // Sprite para mostrar las vidas en el marcador
|
|
std::shared_ptr<Surface> item_surface_; // Surface con los graficos para los elementos del marcador
|
|
std::shared_ptr<ScoreboardData> data_; // Contiene las variables a mostrar en el marcador
|
|
std::shared_ptr<Surface> surface_; // Surface donde dibujar el marcador;
|
|
|
|
// Variables
|
|
std::vector<Uint8> 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_FRect surface_dest_; // Rectangulo donde dibujar la surface del marcador
|
|
|
|
// Obtiene el tiempo transcurrido de partida
|
|
auto getTime() -> ClockData;
|
|
|
|
// 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<ScoreboardData> 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
|
|
auto getMinutes() -> int;
|
|
};
|