84 lines
2.3 KiB
C++
84 lines
2.3 KiB
C++
#pragma once
|
|
|
|
#include <string> // Para string
|
|
#include <vector> // Para vector
|
|
|
|
// Struct para los logros
|
|
struct Achievement
|
|
{
|
|
int id; // Identificador del logro
|
|
std::string caption; // Texto con el nombre del logro
|
|
std::string description; // Texto que describe el logro
|
|
int icon; // Indice del icono a utilizar en la notificación
|
|
bool completed; // Indica si se ha obtenido el logro
|
|
bool obtainable; // Indica si se puede obtener el logro
|
|
|
|
// Constructor vacío
|
|
Achievement() : id(0), icon(0), completed(false), obtainable(true) {}
|
|
|
|
// Constructor parametrizado
|
|
Achievement(int id, const std::string &caption, const std::string &description, int icon, bool completed = false, bool obtainable = true)
|
|
: id(id), caption(caption), description(description), icon(icon), completed(completed), obtainable(obtainable) {}
|
|
};
|
|
|
|
class Cheevos
|
|
{
|
|
private:
|
|
// [SINGLETON] Objeto privado
|
|
static Cheevos *cheevos_;
|
|
|
|
// Variables
|
|
std::vector<Achievement> 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
|
|
|
|
// Inicializa los logros
|
|
void init();
|
|
|
|
// Busca un logro por id y devuelve el índice
|
|
int find(int id);
|
|
|
|
// Carga el estado de los logros desde un fichero
|
|
void loadFromFile();
|
|
|
|
// Guarda el estado de los logros en un fichero
|
|
void saveToFile();
|
|
|
|
// Constructor
|
|
explicit Cheevos(const std::string &file);
|
|
|
|
// Destructor
|
|
~Cheevos();
|
|
|
|
public:
|
|
// [SINGLETON] Crearemos el objeto con esta función estática
|
|
static void init(const std::string &file);
|
|
|
|
// [SINGLETON] Destruiremos el objeto con esta función estática
|
|
static void destroy();
|
|
|
|
// [SINGLETON] Con este método obtenemos el objeto y podemos trabajar con él
|
|
static Cheevos *get();
|
|
|
|
// Desbloquea un logro
|
|
void unlock(int id);
|
|
|
|
// Invalida un logro
|
|
void setUnobtainable(int id);
|
|
|
|
// Elimina el estado "no obtenible"
|
|
void clearUnobtainableState();
|
|
|
|
// Habilita o deshabilita los logros
|
|
void enable(bool value) { enabled_ = value; }
|
|
|
|
// Lista los logros
|
|
const std::vector<Achievement>& list() const { return cheevos_list_; }
|
|
|
|
// Devuelve el número total de logros desbloqueados
|
|
int getTotalUnlockedAchievements();
|
|
|
|
// Devuelve el número total de logros
|
|
int size() { return cheevos_list_.size(); }
|
|
};
|