#pragma once #include // Para string #include #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, std::string caption, std::string description, int icon, bool completed = false, bool obtainable = true) : id(id), caption(std::move(caption)), description(std::move(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 auto find(int id) -> int; // 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(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 auto get() -> Cheevos*; // 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 [[nodiscard]] auto list() const -> const std::vector& { return cheevos_list_; } // Devuelve el número total de logros desbloqueados auto getTotalUnlockedAchievements() -> int; // Devuelve el número total de logros auto size() -> int { return cheevos_list_.size(); } };