RoomSaver ja no reventa els yamals

This commit is contained in:
2026-04-02 11:52:53 +02:00
parent 0e61b94848
commit 3a5b16346b
4 changed files with 214 additions and 662 deletions

View File

@@ -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