载入中...
搜索中...
未找到
JsonExport.cpp
浏览该文件的文档.
2
3#include "procgen/Semantic.h"
4
5#include <fstream>
6#include <sstream>
7
8namespace eve::procgen {
9namespace {
10
11std::string escapeJson(const std::string &s) {
12 std::string out;
13 out.reserve(s.size() + 8);
14 for (char c : s) {
15 switch (c) {
16 case '\\': out += "\\\\"; break;
17 case '"': out += "\\\""; break;
18 case '\n': out += "\\n"; break;
19 case '\r': out += "\\r"; break;
20 case '\t': out += "\\t"; break;
21 default: out += c; break;
22 }
23 }
24 return out;
25}
26
27} // namespace
28
29std::string gridToJson(const Grid2D &grid) {
30 std::ostringstream oss;
31 oss << "{\"width\":" << grid.getWidth() << ",\"height\":" << grid.getHeight()
32 << ",\"algorithm\":\"" << escapeJson(grid.getMeta("algorithm", "")) << "\",\"cells\":[";
33 const auto &cells = grid.cells();
34 for (size_t i = 0; i < cells.size(); ++i) {
35 if (i) oss << ',';
36 oss << cells[i];
37 }
38 oss << "],\"semantics\":[";
39 for (size_t i = 0; i < cells.size(); ++i) {
40 if (i) oss << ',';
41 oss << '"' << semanticName(cells[i]) << '"';
42 }
43 oss << "],\"objects\":[";
44 for (int i = 0; i < grid.getObjectCount(); ++i) {
45 if (i) oss << ',';
46 oss << "{\"name\":\"" << escapeJson(grid.getObjectName(i)) << "\",\"type\":\""
47 << escapeJson(grid.getObjectType(i)) << "\",\"x\":" << grid.getObjectX(i)
48 << ",\"y\":" << grid.getObjectY(i) << ",\"width\":" << grid.getObjectWidth(i)
49 << ",\"height\":" << grid.getObjectHeight(i) << ",\"gid\":" << grid.getObjectGid(i)
50 << '}';
51 }
52 oss << "]}";
53 return oss.str();
54}
55
56bool writeGridJson(const Grid2D &grid, const std::string &path, std::string *error) {
57 if (path.empty()) {
58 if (error) *error = "json path is empty";
59 return false;
60 }
61 std::ofstream ofs(path, std::ios::binary);
62 if (!ofs) {
63 if (error) *error = "failed to open json path: " + path;
64 return false;
65 }
66 ofs << gridToJson(grid);
67 if (!ofs) {
68 if (error) *error = "failed to write json path: " + path;
69 return false;
70 }
71 return true;
72}
73
74} // namespace eve::procgen
std::string error
uint32_t c
uint32_t s
Definition Weather.cpp:28
Intermediate 2D generation result. cells store semantic ids (see Semantic.h), not tile GIDs — convert...
Definition Grid2D.h:16
std::string getObjectType(int i) const
Definition Grid2D.cpp:79
int getWidth() const
Definition Grid2D.cpp:20
float getObjectWidth(int i) const
Definition Grid2D.cpp:91
float getObjectY(int i) const
Definition Grid2D.cpp:87
float getObjectX(int i) const
Definition Grid2D.cpp:83
int getObjectCount() const
Definition Grid2D.cpp:73
int getObjectGid(int i) const
Definition Grid2D.cpp:99
float getObjectHeight(int i) const
Definition Grid2D.cpp:95
std::string getObjectName(int i) const
Definition Grid2D.cpp:75
int getHeight() const
Definition Grid2D.cpp:21
std::string getMeta(const std::string &key, const std::string &defaultValue) const
Definition Grid2D.cpp:49
const std::vector< uint32_t > & cells() const
Definition Grid2D.h:52
bool writeGridJson(const Grid2D &grid, const std::string &path, std::string *error)
const char * semanticName(uint32_t id)
Definition Semantic.cpp:22
std::string gridToJson(const Grid2D &grid)
Compact JSON for debugging / reload workflows (not full Tiled).