RoomSaver ja no reventa els yamals
This commit is contained in:
@@ -5,32 +5,31 @@
|
||||
#include <string> // Para string
|
||||
|
||||
#include "external/fkyaml_node.hpp" // Para fkyaml::node
|
||||
#include "game/entities/enemy.hpp" // Para Enemy::Data
|
||||
#include "game/entities/item.hpp" // Para Item::Data
|
||||
#include "game/entities/player.hpp" // Para Player::SpawnData
|
||||
#include "game/gameplay/room.hpp" // Para Room::Data
|
||||
|
||||
/**
|
||||
* @brief Edición parcial de archivos YAML de habitaciones
|
||||
* @brief Guardado de archivos YAML de habitaciones para el editor de mapas
|
||||
*
|
||||
* Lee el YAML original, modifica solo los campos editados y serializa.
|
||||
* Preserva todos los campos que no se editan (name_ca, comentarios del formato, etc.)
|
||||
* Solo se usa en builds de debug (editor de mapas).
|
||||
* Lee el YAML original con fkyaml (para acceder a todos los campos: name_ca, name_en, etc.)
|
||||
* Genera el YAML como texto formateado compacto (idéntico al formato original de los ficheros).
|
||||
* Solo se usa en builds de debug.
|
||||
*/
|
||||
class RoomSaver {
|
||||
public:
|
||||
RoomSaver() = delete;
|
||||
|
||||
// Carga el YAML original desde disco (llamar al entrar al editor)
|
||||
// Carga el YAML original desde disco como nodo fkyaml (lee del filesystem, no del pack)
|
||||
static auto loadYAML(const std::string& file_path) -> fkyaml::node;
|
||||
|
||||
// Guarda el nodo YAML completo a disco
|
||||
static auto saveYAML(const std::string& file_path, const fkyaml::node& yaml) -> std::string;
|
||||
// Genera y guarda el YAML completo a disco
|
||||
// original_yaml: nodo fkyaml con los datos originales (para campos que no se editan: name_ca, etc.)
|
||||
// room_data: datos editados (posiciones de enemigos, items, etc.)
|
||||
static auto saveYAML(const std::string& file_path, const fkyaml::node& original_yaml, const Room::Data& room_data) -> std::string;
|
||||
|
||||
// Modificaciones puntuales sobre el nodo YAML (posiciones en pixels, se convierten a tiles)
|
||||
static void updateEnemyPosition(fkyaml::node& yaml, int index, float x, float y);
|
||||
static void updateEnemyBound1(fkyaml::node& yaml, int index, int x, int y);
|
||||
static void updateEnemyBound2(fkyaml::node& yaml, int index, int x, int y);
|
||||
static void updateItemPosition(fkyaml::node& yaml, int index, float x, float y);
|
||||
private:
|
||||
static auto buildYAML(const fkyaml::node& original_yaml, const Room::Data& room_data) -> std::string;
|
||||
static auto roomConnectionToYAML(const std::string& connection) -> std::string;
|
||||
static auto conveyorBeltToString(int direction) -> std::string;
|
||||
};
|
||||
|
||||
#endif // _DEBUG
|
||||
|
||||
Reference in New Issue
Block a user