55 lines
1.9 KiB
C++
55 lines
1.9 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).
|
|
// `frame` és opcional i només l'emeten les entitats amb variants
|
|
// estàtiques (debris, columnes); fixa quin sub-sprite del atlas
|
|
// representa aquesta instància concreta.
|
|
struct Spawn {
|
|
std::string type;
|
|
std::optional<int> col;
|
|
std::optional<int> row;
|
|
std::optional<int> sarc_col;
|
|
std::optional<int> sarc_row;
|
|
std::optional<int> frame;
|
|
};
|
|
|
|
auto saveEntitiesBlock(const std::string& path, const std::vector<Spawn>& spawns) -> bool;
|
|
|
|
} // namespace EntityWriter
|
|
|
|
#endif // _DEBUG
|