49 lines
1.8 KiB
C++
49 lines
1.8 KiB
C++
#pragma once
|
|
|
|
#include <SDL3/SDL.h>
|
|
|
|
#include <string> // Para string, basic_string
|
|
#include <utility>
|
|
#include <vector> // 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<SDL_FPoint> 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<Data> items_; // Lista con todos los objetos recogidos
|
|
}; |