载入中...
搜索中...
未找到
GridMeshGraphScript.cpp
浏览该文件的文档.
2
6#include "procgen/GridGraph.h"
8#include "procgen/MeshGraph.h"
10#include "procgen/PointGraph.h"
11
12#include <simplesquirrel/simplesquirrel.hpp>
13
14#include <functional>
15
16namespace eve::procgen {
17
18void exposeGridMeshGraphs(ssq::Table& table) {
19 auto grid = table.addClass<GridGraph>("ProcgenGridGraph",
20 std::function<GridGraph*()>([]() -> GridGraph* { return nullptr; }), true);
21 const HSQUIRRELVM gridVm = grid.getHandle();
22 grid.addFunc("addNode", [gridVm](GridGraph* self, const std::string& id, const std::string& operation) {
23 return eve::script::projectResult(gridVm, self->addNode(id, operation));
24 });
25 grid.addFunc("connect", [gridVm](GridGraph* self, const std::string& from, const std::string& to, int slot) {
26 return eve::script::projectResult(gridVm, self->connect(from, to, slot));
27 });
28 grid.addFunc("setNodeGrid", [gridVm](GridGraph* self, const std::string& id, Grid2D* value) {
29 if (!value)
32 return eve::script::projectResult(gridVm, self->setNodeGrid(id, *value));
33 });
34 grid.addFunc("setNodeInt", [gridVm](GridGraph* self, const std::string& id, const std::string& key, int value) {
35 return eve::script::projectResult(gridVm, self->setNodeInt(id, key, value));
36 });
37 grid.addFunc("setNodeFloat", [gridVm](GridGraph* self, const std::string& id, const std::string& key, float value) {
38 return eve::script::projectResult(gridVm, self->setNodeFloat(id, key, value));
39 });
40 grid.addFunc("setNodeString",
41 [gridVm](GridGraph* self, const std::string& id, const std::string& key, const std::string& value) {
42 return eve::script::projectResult(gridVm, self->setNodeString(id, key, value));
43 });
44 grid.addFunc("setNodePointSubgraph", [gridVm](GridGraph* self, const std::string& id, PointGraph* nested,
45 const std::string& input, const std::string& output) {
46 if (!nested)
48 DiagnosticCode::InvalidArgument, "point graph is null")));
49 return eve::script::projectResult(gridVm, self->setNodePointSubgraph(id, *nested, input, output));
50 });
51 grid.addFunc("execute", [gridVm](GridGraph* self, const std::string& output) -> ssq::Table {
52 auto result = self->execute(output);
53 if (!result.ok()) return eve::script::projectStatusResult(gridVm, result.status());
54 auto value = std::move(result).takeValue();
55 ssq::Object object;
56 if (auto* outputGrid = std::get_if<Grid2D>(&value)) {
57 auto instance =
58 eve::script::makeOwnedSquirrelInstance<Grid2D>(gridVm, std::make_unique<Grid2D>(*outputGrid));
59 if (!instance.ok()) return eve::script::projectStatusResult(gridVm, instance.status());
60 object = std::move(instance).takeValue();
61 } else {
62 auto instance = eve::script::makeOwnedSquirrelInstance<PointSet>(
63 gridVm, std::make_unique<PointSet>(std::get<PointSet>(std::move(value))));
64 if (!instance.ok()) return eve::script::projectStatusResult(gridVm, instance.status());
65 object = std::move(instance).takeValue();
66 }
67 return eve::script::projectStatusResult(gridVm, Status::success(), std::move(object));
68 });
69 grid.addFunc("validate", [gridVm](GridGraph* self, const std::string& output) {
70 return eve::script::projectResult(gridVm, self->validate(output));
71 });
72 grid.addFunc("clearCache", &GridGraph::clearCache);
73 grid.addFunc("getRevision", [](GridGraph* self) { return self->revision(); });
74 grid.addFunc("serializeDefinition", &GridGraph::serializeDefinition);
75 grid.addFunc("deserializeDefinition", [gridVm](GridGraph* self, const std::string& definition) {
76 return eve::script::projectResult(gridVm, self->deserializeDefinition(definition));
77 });
78
79 auto mesh = table.addClass<MeshGraph>("ProcgenMeshGraph",
80 std::function<MeshGraph*()>([]() -> MeshGraph* { return nullptr; }), true);
81 const HSQUIRRELVM meshVm = mesh.getHandle();
82 mesh.addFunc("addNode", [meshVm](MeshGraph* self, const std::string& id, const std::string& operation) {
83 return eve::script::projectResult(meshVm, self->addNode(id, operation));
84 });
85 mesh.addFunc("connect", [meshVm](MeshGraph* self, const std::string& from, const std::string& to, int slot) {
86 return eve::script::projectResult(meshVm, self->connect(from, to, slot));
87 });
88 mesh.addFunc("setNodeGrid", [meshVm](MeshGraph* self, const std::string& id, Grid2D* value) {
89 if (!value)
92 return eve::script::projectResult(meshVm, self->setNodeGrid(id, *value));
93 });
94 mesh.addFunc("setNodePoints", [meshVm](MeshGraph* self, const std::string& id, PointSet* value) {
95 if (!value)
98 return eve::script::projectResult(meshVm, self->setNodePoints(id, *value));
99 });
100 mesh.addFunc("setNodeMesh", [meshVm](MeshGraph* self, const std::string& id, MeshBuild* value) {
101 if (!value)
104 return eve::script::projectResult(meshVm, self->setNodeMesh(id, *value));
105 });
106 mesh.addFunc("setNodeFloat", [meshVm](MeshGraph* self, const std::string& id, const std::string& key, float value) {
107 return eve::script::projectResult(meshVm, self->setNodeFloat(id, key, value));
108 });
109 mesh.addFunc("setNodeString",
110 [meshVm](MeshGraph* self, const std::string& id, const std::string& key, const std::string& value) {
111 return eve::script::projectResult(meshVm, self->setNodeString(id, key, value));
112 });
113 mesh.addFunc("execute", [meshVm](MeshGraph* self, const std::string& output) -> ssq::Table {
114 auto result = self->execute(output);
115 if (!result.ok()) return eve::script::projectStatusResult(meshVm, result.status());
116 auto instance = eve::script::makeOwnedSquirrelInstance<MeshBuild>(
117 meshVm, std::make_unique<MeshBuild>(std::move(result).takeValue()));
118 if (!instance.ok()) return eve::script::projectStatusResult(meshVm, instance.status());
119 return eve::script::projectStatusResult(meshVm, Status::success(), std::move(instance).takeValue());
120 });
121 mesh.addFunc("validate", [meshVm](MeshGraph* self, const std::string& output) {
122 return eve::script::projectResult(meshVm, self->validate(output));
123 });
124 mesh.addFunc("clearCache", &MeshGraph::clearCache);
125 mesh.addFunc("getRevision", [](MeshGraph* self) { return self->revision(); });
126 mesh.addFunc("serializeDefinition", &MeshGraph::serializeDefinition);
127 mesh.addFunc("deserializeDefinition", [meshVm](MeshGraph* self, const std::string& definition) {
128 return eve::script::projectResult(meshVm, self->deserializeDefinition(definition));
129 });
130
131 auto objects = table.addClass<ObjectBuildLayer>("ProcgenObjectBuildLayer", ssq::Class::Ctor<ObjectBuildLayer()>());
132 const HSQUIRRELVM objectsVm = objects.getHandle();
133 objects.addFunc("addAsset", [objectsVm](ObjectBuildLayer* self, const std::string& asset, float weight) {
134 return eve::script::projectResult(objectsVm, self->addAsset(asset, weight));
135 });
136 objects.addFunc("clearAssets", &ObjectBuildLayer::clearAssets);
137 objects.addFunc("setSeed", [](ObjectBuildLayer* self, std::uint32_t seed) { self->setSeed(seed); });
138 objects.addFunc("setLayerOffset",
139 [](ObjectBuildLayer* self, float x, float y, float z) { self->setLayerOffset(x, y, z); });
140 objects.addFunc("setLayerScale", [objectsVm](ObjectBuildLayer* self, float x, float y, float z) {
141 return eve::script::projectResult(objectsVm, self->setLayerScale(x, y, z));
142 });
143 objects.addFunc("setPositionRadius", [objectsVm](ObjectBuildLayer* self, float radius) {
144 return eve::script::projectResult(objectsVm, self->setPositionRadius(radius));
145 });
146 objects.addFunc("setRandomRotation", [objectsVm](ObjectBuildLayer* self, float minPitch, float maxPitch,
147 float minYaw, float maxYaw, float minRoll, float maxRoll) {
149 objectsVm, self->setRandomRotation(minPitch, maxPitch, minYaw, maxYaw, minRoll, maxRoll));
150 });
151 objects.addFunc("setRandomScale", [objectsVm](ObjectBuildLayer* self, float minX, float maxX, float minY,
152 float maxY, float minZ, float maxZ, bool uniform) {
153 return eve::script::projectResult(objectsVm, self->setRandomScale(minX, maxX, minY, maxY, minZ, maxZ, uniform));
154 });
155 objects.addFunc("setOrientation",
156 [objectsVm](ObjectBuildLayer* self, float cellSize, float yawOffset, bool invert) {
157 return eve::script::projectResult(objectsVm, self->setOrientation(cellSize, yawOffset, invert));
158 });
159 objects.addFunc("disableOrientation", [](ObjectBuildLayer* self) { self->disableOrientation(); });
160 objects.addFunc("setPlaceOnTop", [](ObjectBuildLayer* self, bool enabled, bool useLowest, float topOffset) {
161 self->setPlaceOnTop(enabled, useLowest, topOffset);
162 });
163 objects.addFunc("addChild", [objectsVm](ObjectBuildLayer* self, const std::string& asset, int count, float radius,
164 float minScale, float maxScale, float minYaw, float maxYaw) {
165 return eve::script::projectResult(objectsVm,
166 self->addChild(asset, count, radius, minScale, maxScale, minYaw, maxYaw));
167 });
168 objects.addFunc("clearChildRules", &ObjectBuildLayer::clearChildRules);
169 objects.addFunc("serializeDefinition", &ObjectBuildLayer::serializeDefinition);
170 objects.addFunc("deserializeDefinition", [objectsVm](ObjectBuildLayer* self, const std::string& definition) {
171 return eve::script::projectResult(objectsVm, self->deserializeDefinition(definition));
172 });
173 objects.addFunc("build", [objectsVm](ObjectBuildLayer* self, PointSet* source) -> ssq::Table {
174 if (!source)
176 objectsVm,
178 .status());
179 auto result = self->build(*source);
180 if (!result.ok()) return eve::script::projectStatusResult(objectsVm, result.status());
181 auto instance = eve::script::makeOwnedSquirrelInstance<PointSet>(
182 objectsVm, std::make_unique<PointSet>(std::move(result).takeValue()));
183 if (!instance.ok()) return eve::script::projectStatusResult(objectsVm, instance.status());
184 return eve::script::projectStatusResult(objectsVm, Status::success(), std::move(instance).takeValue());
185 });
186 objects.addFunc("buildOriented",
187 [objectsVm](ObjectBuildLayer* self, PointSet* source, PointSet* orientation) -> ssq::Table {
188 if (!source || !orientation)
191 "source or orientation is null"))
192 .status());
193 auto result = self->build(*source, orientation);
194 if (!result.ok()) return eve::script::projectStatusResult(objectsVm, result.status());
195 auto instance = eve::script::makeOwnedSquirrelInstance<PointSet>(
196 objectsVm, std::make_unique<PointSet>(std::move(result).takeValue()));
197 if (!instance.ok()) return eve::script::projectStatusResult(objectsVm, instance.status());
199 std::move(instance).takeValue());
200 });
201
202 auto execution = table.addClass<BuildLayerExecution>(
203 "ProcgenBuildLayerExecution",
204 std::function<BuildLayerExecution*()>([]() -> BuildLayerExecution* { return nullptr; }), true);
205 const HSQUIRRELVM executionVm = execution.getHandle();
206 execution.addFunc("getCount", [](BuildLayerExecution* self) { return self->getCount(); });
207 execution.addFunc("getId", &BuildLayerExecution::getId);
208 execution.addFunc("getType", &BuildLayerExecution::getType);
209 execution.addFunc("getMesh", [executionVm](BuildLayerExecution* self, int index) -> ssq::Table {
210 auto result = self->getMesh(index);
211 if (!result.ok()) return eve::script::projectStatusResult(executionVm, result.status());
212 auto instance = eve::script::makeOwnedSquirrelInstance<MeshBuild>(
213 executionVm, std::make_unique<MeshBuild>(std::move(result).takeValue()));
214 if (!instance.ok()) return eve::script::projectStatusResult(executionVm, instance.status());
215 return eve::script::projectStatusResult(executionVm, Status::success(), std::move(instance).takeValue());
216 });
217 execution.addFunc("getPoints", [executionVm](BuildLayerExecution* self, int index) -> ssq::Table {
218 auto result = self->getPoints(index);
219 if (!result.ok()) return eve::script::projectStatusResult(executionVm, result.status());
220 auto instance = eve::script::makeOwnedSquirrelInstance<PointSet>(
221 executionVm, std::make_unique<PointSet>(std::move(result).takeValue()));
222 if (!instance.ok()) return eve::script::projectStatusResult(executionVm, instance.status());
223 return eve::script::projectStatusResult(executionVm, Status::success(), std::move(instance).takeValue());
224 });
225
226 auto stack = table.addClass<BuildLayerStack>("ProcgenBuildLayerStack", ssq::Class::Ctor<BuildLayerStack()>());
227 const HSQUIRRELVM stackVm = stack.getHandle();
228 stack.addFunc("addTileLayer", [stackVm](BuildLayerStack* self, const std::string& id, bool enabled, float cellSize,
229 float height, const std::string& group) {
230 return eve::script::projectResult(stackVm, self->addTileLayer(id, enabled, cellSize, height, group));
231 });
232 stack.addFunc("addObjectLayer", [stackVm](BuildLayerStack* self, const std::string& id, bool enabled,
234 if (!layer)
236 DiagnosticCode::InvalidArgument, "object layer is null")));
237 return eve::script::projectResult(stackVm, self->addObjectLayer(id, enabled, *layer));
238 });
239 stack.addFunc("setEnabled", [stackVm](BuildLayerStack* self, const std::string& id, bool enabled) {
240 return eve::script::projectResult(stackVm, self->setEnabled(id, enabled));
241 });
242 stack.addFunc("clear", &BuildLayerStack::clear);
243 stack.addFunc("getLayerCount", [](BuildLayerStack* self) { return self->getLayerCount(); });
244 stack.addFunc("getLayerId", &BuildLayerStack::getLayerId);
245 stack.addFunc("getLayerType", &BuildLayerStack::getLayerType);
246 stack.addFunc("isLayerEnabled", [](BuildLayerStack* self, int index) { return self->isLayerEnabled(index); });
247 stack.addFunc("serializeDefinition", &BuildLayerStack::serializeDefinition);
248 stack.addFunc("deserializeDefinition", [stackVm](BuildLayerStack* self, const std::string& definition) {
249 return eve::script::projectResult(stackVm, self->deserializeDefinition(definition));
250 });
251 stack.addFunc("execute", [stackVm](BuildLayerStack* self, Grid2D* grid, PointSet* points) -> ssq::Table {
252 if (!grid || !points)
254 stackVm, Result<void>::failure(
255 Diagnostic::error(DiagnosticCode::InvalidArgument, "grid or points input is null"))
256 .status());
257 auto result = self->execute(*grid, *points);
258 if (!result.ok()) return eve::script::projectStatusResult(stackVm, result.status());
259 auto instance = eve::script::makeOwnedSquirrelInstance<BuildLayerExecution>(
260 stackVm, std::make_unique<BuildLayerExecution>(std::move(result).takeValue()));
261 if (!instance.ok()) return eve::script::projectStatusResult(stackVm, instance.status());
262 return eve::script::projectStatusResult(stackVm, Status::success(), std::move(instance).takeValue());
263 });
264 stack.addFunc(
265 "executeOriented",
266 [stackVm](BuildLayerStack* self, Grid2D* grid, PointSet* points, PointSet* orientation) -> ssq::Table {
267 if (!grid || !points || !orientation)
269 stackVm, Result<void>::failure(
270 Diagnostic::error(DiagnosticCode::InvalidArgument, "build-layer input is null"))
271 .status());
272 auto result = self->execute(*grid, *points, orientation);
273 if (!result.ok()) return eve::script::projectStatusResult(stackVm, result.status());
274 auto instance = eve::script::makeOwnedSquirrelInstance<BuildLayerExecution>(
275 stackVm, std::make_unique<BuildLayerExecution>(std::move(result).takeValue()));
276 if (!instance.ok()) return eve::script::projectStatusResult(stackVm, instance.status());
277 return eve::script::projectStatusResult(stackVm, Status::success(), std::move(instance).takeValue());
278 });
279
280 auto delta = table.addClass<IncrementalBuildDelta>(
281 "ProcgenIncrementalBuildDelta",
282 std::function<IncrementalBuildDelta*()>([]() -> IncrementalBuildDelta* { return nullptr; }), true);
283 const HSQUIRRELVM deltaVm = delta.getHandle();
284 delta.addFunc("getCount", [](IncrementalBuildDelta* self) { return self->getCount(); });
285 delta.addFunc("getClusterX", [](IncrementalBuildDelta* self, int index) { return self->getClusterX(index); });
286 delta.addFunc("getClusterZ", [](IncrementalBuildDelta* self, int index) { return self->getClusterZ(index); });
287 delta.addFunc("isRemoved", [](IncrementalBuildDelta* self, int index) { return self->isRemoved(index); });
288 delta.addFunc("getArtifacts", [deltaVm](IncrementalBuildDelta* self, int index) -> ssq::Table {
289 auto result = self->getArtifacts(index);
290 if (!result.ok()) return eve::script::projectStatusResult(deltaVm, result.status());
291 auto instance = eve::script::makeOwnedSquirrelInstance<BuildLayerExecution>(
292 deltaVm, std::make_unique<BuildLayerExecution>(std::move(result).takeValue()));
293 if (!instance.ok()) return eve::script::projectStatusResult(deltaVm, instance.status());
294 return eve::script::projectStatusResult(deltaVm, Status::success(), std::move(instance).takeValue());
295 });
296
297 auto incremental = table.addClass<IncrementalBuildExecutor>("ProcgenIncrementalBuildExecutor",
298 ssq::Class::Ctor<IncrementalBuildExecutor()>());
299 const HSQUIRRELVM incrementalVm = incremental.getHandle();
300 incremental.addFunc("clear", &IncrementalBuildExecutor::clear);
301 incremental.addFunc("getCachedClusterCount",
302 [](IncrementalBuildExecutor* self) { return self->getCachedClusterCount(); });
303 incremental.addFunc("getCachedArtifacts",
304 [incrementalVm](IncrementalBuildExecutor* self, int x, int z) -> ssq::Table {
305 auto result = self->getCachedArtifacts(x, z);
306 if (!result.ok()) return eve::script::projectStatusResult(incrementalVm, result.status());
307 auto instance = eve::script::makeOwnedSquirrelInstance<BuildLayerExecution>(
308 incrementalVm,
309 std::make_unique<BuildLayerExecution>(std::move(result).takeValue()));
310 if (!instance.ok())
311 return eve::script::projectStatusResult(incrementalVm, instance.status());
313 std::move(instance).takeValue());
314 });
315 incremental.addFunc(
316 "update",
317 [incrementalVm](IncrementalBuildExecutor* self, BuildLayerStack* buildStack, Grid2D* grid, PointSet* points,
318 int clusterSizeCells, float cellSizeWorld) -> ssq::Table {
319 if (!buildStack || !grid || !points)
322 "incremental build input is null"))
323 .status());
324 auto result = self->update(*buildStack, *grid, *points, clusterSizeCells, cellSizeWorld);
325 if (!result.ok()) return eve::script::projectStatusResult(incrementalVm, result.status());
326 auto instance = eve::script::makeOwnedSquirrelInstance<IncrementalBuildDelta>(
327 incrementalVm, std::make_unique<IncrementalBuildDelta>(std::move(result).takeValue()));
328 if (!instance.ok()) return eve::script::projectStatusResult(incrementalVm, instance.status());
329 return eve::script::projectStatusResult(incrementalVm, Status::success(), std::move(instance).takeValue());
330 });
331 incremental.addFunc(
332 "updateOriented",
333 [incrementalVm](IncrementalBuildExecutor* self, BuildLayerStack* buildStack, Grid2D* grid, PointSet* points,
334 int clusterSizeCells, float cellSizeWorld, PointSet* orientation) -> ssq::Table {
335 if (!buildStack || !grid || !points || !orientation)
338 "incremental build input is null"))
339 .status());
340 auto result =
341 self->update(*buildStack, *grid, *points, clusterSizeCells, cellSizeWorld, orientation);
342 if (!result.ok()) return eve::script::projectStatusResult(incrementalVm, result.status());
343 auto instance = eve::script::makeOwnedSquirrelInstance<IncrementalBuildDelta>(
344 incrementalVm, std::make_unique<IncrementalBuildDelta>(std::move(result).takeValue()));
345 if (!instance.ok()) return eve::script::projectStatusResult(incrementalVm, instance.status());
346 return eve::script::projectStatusResult(incrementalVm, Status::success(), std::move(instance).takeValue());
347 });
348}
349
350} // namespace eve::procgen
ActionParameterOperation operation
double value
float y
Definition AnimClip.cpp:738
float x
Definition AnimClip.cpp:738
float z
Definition AnimClip.cpp:738
std::string output
std::string from
building::EdgeCurveGroup group
struct SQVM * HSQUIRRELVM
EvpackChunkInput input
Definition Evpack.cpp:170
std::uint32_t key
wgpu::PopErrorScopeStatus status
HexCoordinates to
Cell the unit walks towards on this segment.
Definition HexUnits.cpp:64
std::uint32_t height
TileLayer * layer
float radius
std::uint32_t seed
Definition PointSet.cpp:807
std::shared_ptr< const std::vector< glm::vec2 > > points
Mesh * mesh
std::uint32_t count
The single Squirrel projection for common Result, Status and Value.
Explicit Value/Owned/Borrowed semantics at the Squirrel boundary.
Json object
uint32_t index
const UnitySourceAsset & source
static Diagnostic error(DiagnosticCode code, std::string message, std::string path={}, DiagnosticDetails details={}, std::string source={})
Construct an error diagnostic with the standard error severity.
Definition Diagnostic.h:125
Move-only operation result carrying either a value or Status.
Definition Result.h:155
static Status success(StatusCode code=StatusCode::Ok)
Construct a successful status with an explicit non-error outcome.
Definition Status.h:81
Immutable-by-convention result of one complete build-stack execution.
std::string getType(int index) const
Returns the type.
std::string getId(int index) const
Returns the id.
Ordered, versioned executor for procedural tile and object build layers.
std::string serializeDefinition() const
Serialize ordered definitions using EVPCG_BUILD_LAYERS schema version 1.
std::string getLayerId(int index) const
Returns the layer id.
std::string getLayerType(int index) const
Returns the layer type.
Intermediate 2D generation result. cells store semantic ids (see Semantic.h), not tile GIDs — convert...
Definition Grid2D.h:36
Deterministic data-flow graph for grid generation and explicit grid-to-point composition.
Definition GridGraph.h:35
Result< void > setNodeFloat(std::string_view id, std::string key, float value)
Set one floating-point parameter declared by the node operation.
std::uint64_t revision() const noexcept
Monotonic authoring revision; successful mutations increment it.
Definition GridGraph.h:68
Result< GridGraphValue > execute(std::string_view outputId)
Validate and evaluate one output into an independent owning value.
std::string serializeDefinition() const
Serialize topology and scalar parameters using the versioned EVPCG grid schema.
Result< void > deserializeDefinition(std::string_view definition)
Atomically replace this graph from a versioned definition.
Result< void > connect(std::string_view fromId, std::string_view toId, int inputIndex=0)
Connect one node output to a typed input slot.
void clearCache()
Remove all cached node values while retaining topology and parameters.
Result< void > setNodeGrid(std::string_view id, const Grid2D &grid)
Assign an owning copy to a grid.input node.
Result< void > addNode(std::string id, std::string operation)
Add a reflected operation under a stable, non-empty node id.
Result< void > setNodePointSubgraph(std::string_view id, const PointGraph &graph, std::string inputNode, std::string outputNode)
Bind an owning PointGraph copy to a point.subgraph bridge.
Result< void > setNodeString(std::string_view id, std::string key, std::string value)
Set one string parameter declared by the node operation.
Result< void > validate(std::string_view outputId) const
Validate topology, required inputs and cross-graph bindings without evaluating values.
Result< void > setNodeInt(std::string_view id, std::string key, int value)
Set one integer parameter declared by the node operation.
Ordered changes required to synchronize a scene-side cluster cache.
Derived cluster cache that incrementally executes a BuildLayerStack.
CPU triangle mesh from procedural mesh recipes (e.g. marching cubes). Positions/normals are xyz-packe...
Definition MeshBuild.h:19
Typed procedural mesh graph composing grid, point and topology domains.
Definition MeshGraph.h:21
void clearCache()
Clears cache.
std::string serializeDefinition() const
Serialize topology and scalar parameters using the versioned EVPCG mesh schema.
Deterministic TileWorldCreator-style object build layer.
std::string serializeDefinition() const
Serialize all layer settings using the versioned EVPCG object-layer schema.
void clearChildRules()
Clears child rules.
EVENGINE_API_DOMAINS public API.
Definition PointGraph.h:66
Script-friendly collection of attributed 3D samples.
Definition PointSet.h:59
void exposeGridMeshGraphs(ssq::Table &table)
Expose grid mesh graphs.
ssq::Table projectStatusResult(HSQUIRRELVM vm, const Status &status)
Project a checked native status that carries no payload.
ssq::Table projectResult(HSQUIRRELVM vm, Result< void > &&result)
Consume and project a void native Result using the common schema.
bool enabled