Files
aee-arcade/source/game/entities/entity_writer.hpp
T

51 lines
1.7 KiB
C++

#pragma once
#ifdef _DEBUG
#include <optional>
#include <string>
#include <vector>
// Reescriu NOMÉS el bloc `entities:` d'un YAML de nivell, preservant byte
// a byte la resta del fitxer: comentaris, ordre de claus, format del
// `geometry:` i `data:`, encoding i line endings entre línies no tocades.
// Pensat exclusivament per a l'editor (Debug).
//
// Format de sortida (estable, llegible a l'editor de text):
// entities:
// - type: torch
// position: [4, 2]
// - type: sarcophagus
// sarc_position: [0, 0]
// - type: door
//
// Semàntica del bloc origen:
// - Línia de capçalera: primera aparició de "entities:" a columna 0.
// Si manca, el writer FALLA i no toca el fitxer.
// - Contingut: línies indentades (espai o tab). Una línia buida o una
// línia a columna 0 marquen la fi del bloc.
//
// Si el fitxer original no té el bloc `entities:`, el writer no inventa
// ubicació: retorna false per que el caller decidisca (mostrar error,
// avortar, etc.) — no és funció del writer escollir l'estil del YAML.
//
// Escriptura atòmica: via `<path>.tmp` + `std::filesystem::rename`. Si
// l'escriptura falla a meitat, el YAML original queda intacte.
namespace EntityWriter {
// Cada spawn duplica l'estructura mínima del que el lector espera:
// type sempre, i un dels (position, sarc_position) o cap (cas door).
struct Spawn {
std::string type;
std::optional<int> col;
std::optional<int> row;
std::optional<int> sarc_col;
std::optional<int> sarc_row;
};
auto saveEntitiesBlock(const std::string& path, const std::vector<Spawn>& spawns) -> bool;
} // namespace EntityWriter
#endif // _DEBUG