fase 1 de zones

This commit is contained in:
2026-04-10 13:58:59 +02:00
parent 12ace89890
commit 4b4bfdf314
9 changed files with 197 additions and 0 deletions

View File

@@ -0,0 +1,55 @@
#pragma once
#include <string> // Para string
#include <vector> // Para vector
#include "game/gameplay/zone.hpp" // Para Zone::Data
/**
* @brief Singleton que carga y gestiona el catálogo de zonas
*
* Carga data/zones/zones.yaml en init() y permite consultar zonas por nombre.
* El loader usa Resource::Helper::loadFile, que soporta tanto el resource pack
* como el filesystem (modo desarrollo). Por eso ZoneManager no depende del
* Resource::Cache y puede inicializarse en cualquier momento antes de
* RoomLoader::loadYAML.
*/
class ZoneManager {
public:
// Gestión singleton
static void init(); // Carga zones.yaml y crea el singleton
static void destroy(); // Destruye el singleton
static auto get() -> ZoneManager*; // Acceso al singleton
/**
* @brief Devuelve la zona con el nombre indicado, o nullptr si no existe
*/
[[nodiscard]] auto getZone(const std::string& name) const -> const Zone::Data*;
/**
* @brief Devuelve la zona por defecto (primera del fichero), o nullptr si no hay zonas
*
* Se usa como fallback cuando una room.yaml no especifica zone o especifica
* una zona desconocida.
*/
[[nodiscard]] auto getDefaultZone() const -> const Zone::Data*;
/**
* @brief Devuelve la lista de nombres de todas las zonas (para validación en editor)
*/
[[nodiscard]] auto getZoneNames() const -> std::vector<std::string>;
private:
// Constantes singleton
static ZoneManager* zone_manager; // [SINGLETON] Objeto privado
// Constructor y destructor privados [SINGLETON]
ZoneManager() = default;
~ZoneManager() = default;
// Carga el yaml y rellena zones_
void loadFromFile(const std::string& file_path);
// Variables miembro
std::vector<Zone::Data> zones_; // Catálogo de zonas
};