载入中...
搜索中...
未找到
HouseGen.cpp
浏览该文件的文档.
1#include "housegen/HouseGen.h"
2
3#include <simplesquirrel/simplesquirrel.hpp>
4
5#include <functional>
6
7namespace eve::housegen {
8
10
11bool HouseGen::loadComponentsFromJson(const std::string &json) { return library_.loadFromJson(json, &lastError_); }
12bool HouseGen::loadComponentsFromFile(const std::string &filename) { return library_.loadFromFile(filename, &lastError_); }
13void HouseGen::clearComponents() { library_.clear(); lastError_.clear(); }
14int HouseGen::getComponentCount() const { return library_.count(); }
18 if (!request || !layout) { lastError_ = "request and layout are required"; return false; }
19 HouseGenerator generator(&library_);
20 return generator.generate(*request, *layout, &lastError_);
21}
22std::string HouseGen::lastError() const { return lastError_; }
23
24void HouseGen::expose(ssq::Table &table) {
25 auto cls = table.addClass(name, HouseGen::create, false); expose(cls);
26 auto request = table.addClass<HouseRequest>("HouseRequest", std::function<HouseRequest *()>([] { return new HouseRequest(); }), true);
27 request.addFunc("setSeed", [](HouseRequest *r, int v) { r->seed = uint32_t(v); });
28 request.addFunc("setPlot", [](HouseRequest *r, int w, int d) { r->width = w; r->depth = d; });
29 request.addFunc("setFloors", [](HouseRequest *r, int v) { r->floors = v; });
30 request.addFunc("setStyle", [](HouseRequest *r, const std::string &v) { r->style = v; });
31 request.addFunc("setFootprint", [](HouseRequest *r, const std::string &v) { r->footprint = v; });
32 request.addFunc("setRoof", [](HouseRequest *r, const std::string &v) { r->roof = v; });
33 request.addFunc("setEntrance", [](HouseRequest *r, const std::string &v) { r->entrance = v; });
34 auto layout = table.addClass<HouseLayout>("HouseLayout", std::function<HouseLayout *()>([] { return new HouseLayout(); }), true);
35 layout.addFunc("toJson", &HouseLayout::toJson);
36 layout.addFunc("fromJson", [](HouseLayout *v, const std::string &json) { return v->fromJson(json, nullptr); });
37 layout.addFunc("getInstanceCount", [](HouseLayout *v) { return int(v->instances.size()); });
38 layout.addFunc("getDiagnosticCount", [](HouseLayout *v) { return int(v->diagnostics.size()); });
39}
40
41void HouseGen::expose(ssq::Class &cls) {
42 cls.addFunc("loadComponentsFromJson", &HouseGen::loadComponentsFromJson);
43 cls.addFunc("loadComponentsFromFile", &HouseGen::loadComponentsFromFile);
44 cls.addFunc("clearComponents", &HouseGen::clearComponents);
45 cls.addFunc("getComponentCount", &HouseGen::getComponentCount);
46 cls.addFunc("newRequest", &HouseGen::newRequest);
47 cls.addFunc("newLayout", &HouseGen::newLayout);
48 cls.addFunc("generate", &HouseGen::generate);
49 cls.addFunc("lastError", &HouseGen::lastError);
50}
51
52} // namespace eve::housegen
HSQOBJECT cls
Definition ECS.cpp:21
std::string layout
int w
#define Module_IMPL(ModuleName, newExpr)
Definition Module.h:24
const char * name
Definition RockMesh.cpp:21
int d
int v
bool loadFromFile(const std::string &filename, std::string *error=nullptr)
bool loadFromJson(const std::string &json, std::string *error=nullptr)
从 JSON / 文件加载组件。
程序化房屋生成模块(eve.HouseGen):组件库 + 布局生成。
Definition HouseGen.h:11
bool loadComponentsFromJson(const std::string &json)
从 JSON / 文件加载房屋组件库。
Definition HouseGen.cpp:11
HouseRequest * newRequest()
工厂:生成请求 / 布局。
Definition HouseGen.cpp:15
bool loadComponentsFromFile(const std::string &filename)
Definition HouseGen.cpp:12
int getComponentCount() const
组件数量。
Definition HouseGen.cpp:14
void clearComponents()
清空组件库。
Definition HouseGen.cpp:13
HouseLayout * newLayout()
Definition HouseGen.cpp:16
bool generate(HouseRequest *request, HouseLayout *layout)
按请求生成布局;失败返回 false 并记录 lastError。
Definition HouseGen.cpp:17
std::string lastError() const
最近一次失败原因。
Definition HouseGen.cpp:22
布局生成器:把 HouseRequest 解析为 HouseLayout(组件库驱动)。
bool generate(const HouseRequest &request, HouseLayout &out, std::string *error=nullptr) const
生成布局;失败返回 false 并写入 error。
一次生成的房屋布局:实例 + 房间 + 元信息,可 JSON 序列化 / 实例化。
Definition HouseLayout.h:16
std::string toJson() const
序列化为 JSON / 从 JSON 恢复。
一次房屋生成请求(参数集)。