treballant en sistema de portes i claus

This commit is contained in:
2026-04-10 09:47:48 +02:00
parent 9aff4432df
commit 97c30bf9a1
37 changed files with 1236 additions and 110 deletions

View File

@@ -0,0 +1,58 @@
#pragma once
#include <SDL3/SDL.h>
#include <string> // Para string, basic_string
#include <utility>
#include <vector> // Para vector
/**
* @brief Tracker global de puertas abiertas (singleton)
*
* Mantiene un registro por habitación de las posiciones de las puertas que
* ya han sido abiertas, de modo que al volver a entrar a una habitación las
* puertas ya abiertas se reconstruyen directamente en estado OPENED.
* Mismo patrón que ItemTracker.
*/
class DoorTracker {
public:
// Gestión singleton
static void init(); // Inicialización
static void destroy(); // Destrucción
static auto get() -> DoorTracker*; // Acceso al singleton
// Gestión de puertas abiertas
auto hasBeenOpened(const std::string& name, SDL_FPoint pos) -> bool; // Comprueba si la puerta ya está abierta
void addDoor(const std::string& name, SDL_FPoint pos); // Marca la puerta como abierta
void clear(); // Vacía el tracker (reset de partida)
private:
// Tipos anidados privados
struct Data {
std::string name; // Nombre de la habitación
std::vector<SDL_FPoint> pos; // Lista de posiciones de puertas abiertas
// 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 DoorTracker* door_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]
DoorTracker() = default;
~DoorTracker() = default;
// Variables miembro
std::vector<Data> doors_; // Lista de puertas abiertas por habitación
};