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