forked from jaildesigner-jailgames/jaildoctors_dilemma
64 lines
2.5 KiB
C++
64 lines
2.5 KiB
C++
#pragma once
|
||
|
||
#include <string> // Para string
|
||
#include <vector> // Para vector
|
||
|
||
#include "game/entities/enemy.hpp" // Para Enemy::Data
|
||
#include "game/entities/item.hpp" // Para Item::Data
|
||
#include "game/gameplay/room.hpp" // Para Room::Data
|
||
|
||
/**
|
||
* @brief Cargador de archivos de habitaciones en formato YAML
|
||
*
|
||
* Responsabilidades:
|
||
* - Cargar archivos de room en formato YAML unificado (.yaml)
|
||
* - Parsear datos de room, tilemap, enemies e items
|
||
* - Convertir tipos de datos (tiles, posiciones, colores)
|
||
* - Validar y propagar errores de carga
|
||
*
|
||
* Esta clase contiene solo métodos estáticos y no debe instanciarse.
|
||
*/
|
||
class RoomLoader {
|
||
public:
|
||
// Constructor eliminado para prevenir instanciación
|
||
RoomLoader() = delete;
|
||
~RoomLoader() = delete;
|
||
RoomLoader(const RoomLoader&) = delete;
|
||
auto operator=(const RoomLoader&) -> RoomLoader& = delete;
|
||
RoomLoader(RoomLoader&&) = delete;
|
||
auto operator=(RoomLoader&&) -> RoomLoader& = delete;
|
||
|
||
/**
|
||
* @brief Carga un archivo de room en formato YAML
|
||
* @param file_path Ruta al archivo YAML de habitación
|
||
* @param verbose Si true, muestra información de debug
|
||
* @return Room::Data con todos los datos de la habitación incluyendo:
|
||
* - Configuración de la habitación (nombre, colores, etc.)
|
||
* - Tilemap completo (convertido de 2D a 1D)
|
||
* - Lista de enemigos con todas sus propiedades
|
||
* - Lista de items con todas sus propiedades
|
||
*
|
||
* El formato YAML esperado incluye:
|
||
* - room: configuración general
|
||
* - tilemap: array 2D de 16x32 tiles (convertido a vector 1D de 512 elementos)
|
||
* - enemies: lista de enemigos (opcional)
|
||
* - items: lista de items (opcional)
|
||
*/
|
||
static auto loadYAML(const std::string& file_path, bool verbose = false) -> Room::Data;
|
||
|
||
private:
|
||
/**
|
||
* @brief Convierte room connection de YAML a formato con extensión
|
||
* @param value Valor del YAML (null o "02")
|
||
* @return String con extensión YAML ("0" para null, "02.yaml" para "02")
|
||
*/
|
||
static auto convertRoomConnection(const std::string& value) -> std::string;
|
||
|
||
/**
|
||
* @brief Convierte un tilemap 2D a vector 1D flat
|
||
* @param tilemap_2d Array 2D de tiles (16 rows × 32 cols)
|
||
* @return Vector 1D flat con 512 elementos
|
||
*/
|
||
static auto flattenTilemap(const std::vector<std::vector<int>>& tilemap_2d) -> std::vector<int>;
|
||
};
|