#pragma once #include // Para string #include // Para vector class Screen; struct options_t; // 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 valid; // Indica si se puede obtener el logro // Constructor vacío Achievement() : id(0), icon(0), completed(false), valid(true) {} // Constructor parametrizado Achievement(int id, const std::string &caption, const std::string &description, int icon, bool completed = false, bool valid = true) : id(id), caption(caption), description(description), icon(icon), completed(completed), valid(valid) {} }; class Cheevos { private: // Variables std::vector cheevos_; // 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(); public: // Constructor Cheevos(const std::string &file); // Destructor ~Cheevos(); // Desbloquea un logro void unlock(int id); // Invalida un logro void invalidate(int id); // Habilita o deshabilita los logros void enable(bool value) { enabled_ = value; } // Lista los logros std::vector list() { return cheevos_; } // Devuelve el número total de logros desbloqueados int unlocked(); // Devuelve el número total de logros int count() { return cheevos_.size(); } };