#pragma once #include #include // Para string, basic_string #include #include // Para vector class ItemTracker { public: // Gestión singleton static void init(); // Inicialización static void destroy(); // Destrucción static auto get() -> ItemTracker*; // Acceso al singleton // Gestión de items auto hasBeenPicked(const std::string& name, SDL_FPoint pos) -> bool; // Comprueba si el objeto ya ha sido cogido void addItem(const std::string& name, SDL_FPoint pos); // Añade el objeto a la lista private: // Tipos anidados privados struct Data { std::string name; // Nombre de la habitación donde se encuentra el objeto std::vector pos; // Lista de objetos cogidos de la habitación // Constructor para facilitar creación con posición inicial Data(std::string name, const SDL_FPoint& position) : name(std::move(name)) { pos.push_back(position); } }; // Constantes privadas static constexpr int NOT_FOUND = -1; // Valor de retorno cuando no se encuentra un elemento // Constantes singleton static ItemTracker* item_tracker; // [SINGLETON] Objeto privado // Métodos privados auto findByName(const std::string& name) -> int; // Busca una entrada en la lista por nombre auto findByPos(int index, SDL_FPoint pos) -> int; // Busca una entrada en la lista por posición // Constructor y destructor privados [SINGLETON] ItemTracker() = default; ~ItemTracker() = default; // Variables miembro std::vector items_; // Lista con todos los objetos recogidos };