treballant en sistema de portes i claus
This commit is contained in:
58
source/game/gameplay/door_tracker.hpp
Normal file
58
source/game/gameplay/door_tracker.hpp
Normal 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
|
||||
};
|
||||
Reference in New Issue
Block a user