75 lines
2.0 KiB
C++
75 lines
2.0 KiB
C++
#include "item_tracker.h"
|
|
|
|
// [SINGLETON]
|
|
ItemTracker* ItemTracker::item_tracker_ = nullptr;
|
|
|
|
// [SINGLETON] Crearemos el objeto con esta función estática
|
|
void ItemTracker::init() {
|
|
ItemTracker::item_tracker_ = new ItemTracker();
|
|
}
|
|
|
|
// [SINGLETON] Destruiremos el objeto con esta función estática
|
|
void ItemTracker::destroy() {
|
|
delete ItemTracker::item_tracker_;
|
|
}
|
|
|
|
// [SINGLETON] Con este método obtenemos el objeto y podemos trabajar con él
|
|
ItemTracker* ItemTracker::get() {
|
|
return ItemTracker::item_tracker_;
|
|
}
|
|
|
|
// Comprueba si el objeto ya ha sido cogido
|
|
bool ItemTracker::hasBeenPicked(const std::string& name, SDL_FPoint pos) {
|
|
// Primero busca si ya hay una entrada con ese nombre
|
|
if (const int index = findByName(name); index != -1) {
|
|
// Luego busca si existe ya una entrada con esa posición
|
|
if (findByPos(index, pos) != -1) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
// Añade el objeto a la lista de objetos cogidos
|
|
void ItemTracker::addItem(const std::string& name, SDL_FPoint 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
|
|
if (const int index = findByName(name); index != -1) {
|
|
item_list_.at(index).pos.push_back(pos);
|
|
}
|
|
// En caso contrario crea la entrada
|
|
else {
|
|
item_list_.emplace_back(name, pos);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Busca una entrada en la lista por nombre
|
|
int ItemTracker::findByName(const std::string& name) {
|
|
int i = 0;
|
|
|
|
for (const auto& l : item_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_FPoint pos) {
|
|
int i = 0;
|
|
|
|
for (const auto& l : item_list_[index].pos) {
|
|
if ((l.x == pos.x) && (l.y == pos.y)) {
|
|
return i;
|
|
}
|
|
i++;
|
|
}
|
|
|
|
return -1;
|
|
} |