fase 1 de zones
This commit is contained in:
55
source/game/gameplay/zone_manager.hpp
Normal file
55
source/game/gameplay/zone_manager.hpp
Normal 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
|
||||
};
|
||||
Reference in New Issue
Block a user