56 lines
2.6 KiB
C++
56 lines
2.6 KiB
C++
#pragma once
|
|
|
|
#include <string> // Para string
|
|
#include <utility>
|
|
#include <vector> // Para vector
|
|
|
|
class Cheevos {
|
|
public:
|
|
// Tipos anidados (públicos porque se usan en la interfaz)
|
|
struct Achievement {
|
|
int id{0}; // Identificador del logro
|
|
std::string caption; // Texto con el nombre del logro
|
|
std::string description; // Texto que describe el logro
|
|
int icon{0}; // Indice del icono a utilizar en la notificación
|
|
bool completed{false}; // Indica si se ha obtenido el logro
|
|
bool obtainable{true}; // Indica si se puede obtener el logro
|
|
};
|
|
|
|
using Achievements = std::vector<Achievement>; // Type alias para vector de logros
|
|
|
|
// Gestión singleton
|
|
static void init(const std::string& file); // Inicialización
|
|
static void destroy(); // Destrucción
|
|
static auto get() -> Cheevos*; // Acceso al singleton
|
|
|
|
// Gestión de logros
|
|
void unlock(int id); // Desbloquea un logro
|
|
void setUnobtainable(int id); // Invalida un logro
|
|
void clearUnobtainableState(); // Elimina el estado "no obtenible"
|
|
void enable(bool value) { enabled_ = value; } // Habilita o deshabilita los logros
|
|
|
|
// Consultas
|
|
[[nodiscard]] auto list() const -> const Achievements& { return cheevos_list_; } // Lista los logros
|
|
auto getTotalUnlockedAchievements() -> int; // Devuelve logros desbloqueados
|
|
auto size() -> int { return cheevos_list_.size(); } // Devuelve número total de logros
|
|
|
|
private:
|
|
// Constantes singleton
|
|
static Cheevos* cheevos; // [SINGLETON] Objeto privado
|
|
|
|
// Métodos privados
|
|
void init(); // Inicializa los logros
|
|
auto find(int id) -> int; // Busca un logro por id y devuelve el índice
|
|
void loadFromFile(); // Carga el estado de los logros desde un fichero
|
|
void saveToFile(); // Guarda el estado de los logros en un fichero
|
|
|
|
// Constructor y destructor privados [SINGLETON]
|
|
explicit Cheevos(std::string file);
|
|
~Cheevos();
|
|
|
|
// Variables miembro
|
|
Achievements cheevos_list_; // Listado de logros
|
|
bool enabled_{true}; // Indica si los logros se pueden obtener
|
|
std::string file_; // Fichero donde leer/almacenar el estado de los logros
|
|
};
|