#include "item_tracker.h" // Destructor ItemTracker::~ItemTracker() { list.clear(); } // Comprueba si el objeto ya ha sido cogido bool ItemTracker::hasBeenPicked(std::string name, SDL_Point pos) { bool success = false; // Primero busca si ya hay una entrada con ese nombre const int index = findByName(name); if (index != -1) { // Luego busca si existe ya una entrada con esa posición if (findByPos(index, pos) != -1) { success = true; } } return success; } // Añade el objeto a la lista de objetos cogidos void ItemTracker::addItem(std::string name, SDL_Point pos) { // Comprueba si el objeto no ha sido recogido con anterioridad if (!hasBeenPicked(name, pos)) { // Primero busca si ya hay una entrada con ese nombre const int index = findByName(name); if (index != -1) { list[index].pos.push_back(pos); } // En caso contrario crea la entrada else { item_tracker_t item; item.name = name; item.pos.push_back(pos); list.push_back(item); } } } // Busca una entrada en la lista por nombre int ItemTracker::findByName(std::string name) { int i = 0; for (auto l : list) { if (l.name == name) { return i; } i++; } return -1; } // Busca una entrada en la lista por posición int ItemTracker::findByPos(int index, SDL_Point pos) { int i = 0; for (auto l : list[index].pos) { if ((l.x == pos.x) && (l.y == pos.y)) { return i; } i++; } return -1; }