#pragma once #include // Para string #include // 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 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& 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(); } };