载入中...
搜索中...
未找到
Procgen.cpp
浏览该文件的文档.
77eve::Result<T> procgenBindingFailure(eve::DiagnosticCode code, std::string message, std::string path = {}) {
120ssq::Table makeOwnedNativeProxy(HSQUIRRELVM vm, eve::Result<Ref>&& reference, Resolve&& resolve, Release&& release) {
153 ref, [ref, release = std::forward<Release>(release)]() mutable { return std::invoke(release, ref); }});
164 auto result = eve::script::projectStatusResult(vm, eve::Status::success(eve::StatusCode::Applied));
173ssq::Table projectBorrowedResult(HSQUIRRELVM vm, eve::script::Borrowed<T> borrowed, const char* objectName) {
180 auto result = eve::script::projectStatusResult(vm, eve::Status::success(eve::StatusCode::Applied));
186ssq::Table makeOwnedPointSetProxy(HSQUIRRELVM vm, eve::Result<ProcgenPointSetHandleRef>&& reference) {
189 vm, std::move(reference), [module](ProcgenPointSetHandleRef ref) { return module->resolvePointSet(ref); },
212ssq::Table makeOwnedSpatialProxy(HSQUIRRELVM vm, eve::Result<ProcgenSpatialDataHandleRef>&& reference) {
215 vm, std::move(reference), [module](ProcgenSpatialDataHandleRef ref) { return module->resolveSpatialData(ref); },
240 for (const ArtifactId& dependency : artifact.dependencies) dependencies.emplace_back(dependency.format());
245 result.emplace("schemaVersion", eve::Value(static_cast<std::int64_t>(artifact.schemaVersion.value())));
252 result.emplace("partCount", eve::Value(static_cast<std::int64_t>(composite ? composite->children.size() : 0)));
277 std::invoke(std::forward<Release>(release), ref).ignore("rollback failed owned procgen allocation");
281 auto result = eve::script::projectStatusResult(vm, eve::Status::success(eve::StatusCode::Applied));
296ssq::Table projectDecodedTerrainResult(HSQUIRRELVM vm, eve::Result<DecodedTerrainFile>&& decoded) {
329ssq::Table projectRecipeDescriptorResult(HSQUIRRELVM vm, eve::Result<RecipeDescriptor>&& result) {
347eve::Result<eve::script::RuntimeHandleRef<Tag>> ownProcgenObject(eve::script::RuntimeObjectRegistry<T, Tag>& registry,
413 eve::DiagnosticCode::StaleHandle, "Procgen module is no longer loaded", "params", {}, "procgen.squirrel"));
428eve::script::Borrowed<OutputSpec> Procgen::resolveOutput(ProcgenOutputHandleRef reference) noexcept {
437 eve::DiagnosticCode::StaleHandle, "Procgen module is no longer loaded", "output", {}, "procgen.squirrel"));
448 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "procedural grid dimensions must be positive",
466 eve::DiagnosticCode::StaleHandle, "Procgen module is no longer loaded", "grid", {}, "procgen.squirrel"));
492eve::Result<ProcgenPointSetHandleRef> Procgen::sampleGridHandle(int width, int depth, float spacing, uint32_t seed,
496 eve::DiagnosticCode::InvalidArgument, "sampleGrid requires positive dimensions and spacing", "pointSet", {},
502eve::Result<ProcgenPointSetHandleRef> Procgen::filterHeightHandle(ProcgenPointSetHandleRef input, float minHeight,
507 eve::Diagnostic::error(eve::DiagnosticCode::StaleHandle, "filterHeight input point-set handle is stale",
513eve::Result<ProcgenPointSetHandleRef> Procgen::filterDensityHandle(ProcgenPointSetHandleRef input, float minDensity,
518 eve::Diagnostic::error(eve::DiagnosticCode::StaleHandle, "filterDensity input point-set handle is stale",
524eve::Result<ProcgenPointSetHandleRef> Procgen::filterBoxHandle(ProcgenPointSetHandleRef input, float minX, float minY,
530 eve::Diagnostic::error(eve::DiagnosticCode::StaleHandle, "filterBox input point-set handle is stale",
536eve::Result<ProcgenPointSetHandleRef> Procgen::filterSlopeHandle(ProcgenPointSetHandleRef input, float minDegrees,
541 eve::Diagnostic::error(eve::DiagnosticCode::StaleHandle, "filterSlope input point-set handle is stale",
547eve::Result<ProcgenPointSetHandleRef> Procgen::filterPolygonHandle(ProcgenPointSetHandleRef input,
553 eve::DiagnosticCode::StaleHandle, "filterPolygon input handle is stale", "input", {}, "procgen.squirrel"));
558eve::Result<ProcgenPointSetHandleRef> Procgen::filterSplineDistanceHandle(ProcgenPointSetHandleRef input,
565 eve::Diagnostic::error(eve::DiagnosticCode::StaleHandle, "filterSplineDistance input handle is stale",
567 return ownProcgenObject(ownership_->points, std::make_unique<PointSet>(filterPointsBySplineDistance(
571eve::Result<ProcgenPointSetHandleRef> Procgen::excludeRadiusHandle(ProcgenPointSetHandleRef input, float x, float z,
576 eve::Diagnostic::error(eve::DiagnosticCode::StaleHandle, "excludeRadius input point-set handle is stale",
578 return ownProcgenObject(ownership_->points, std::make_unique<PointSet>(excludePointRadius(*view, x, z, radius)));
581eve::Result<ProcgenPointSetHandleRef> Procgen::jitterPointsHandle(ProcgenPointSetHandleRef input, uint32_t seed,
586 eve::Diagnostic::error(eve::DiagnosticCode::StaleHandle, "jitterPoints input point-set handle is stale",
592eve::Result<ProcgenPointSetHandleRef> Procgen::selfPruneHandle(ProcgenPointSetHandleRef input, float radius) {
596 eve::Diagnostic::error(eve::DiagnosticCode::StaleHandle, "selfPrune input point-set handle is stale",
598 return ownProcgenObject(ownership_->points, std::make_unique<PointSet>(selfPrunePoints(*view, radius)));
601eve::Result<ProcgenPointSetHandleRef> Procgen::projectToHeightmapHandle(ProcgenPointSetHandleRef input,
609 eve::Diagnostic::error(eve::DiagnosticCode::StaleHandle, "projectToHeightmap input handle is stale",
613 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "projectToHeightmap cellSize must be positive",
615 return ownProcgenObject(ownership_->points, std::make_unique<PointSet>(projectPointsToHeightmap(
619eve::Result<ProcgenPointSetHandleRef> Procgen::sampleSplineHandle(ProcgenPointSetHandleRef controlPoints, float spacing,
624 eve::Diagnostic::error(eve::DiagnosticCode::StaleHandle, "sampleSpline control point-set handle is stale",
628 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "sampleSpline spacing must be positive",
640 eve::DiagnosticCode::StaleHandle, "mergePoints input handle is stale", "points", {}, "procgen.squirrel"));
641 return ownProcgenObject(ownership_->points, std::make_unique<PointSet>(mergePointSets(*a, *b)));
650 eve::Diagnostic::error(eve::DiagnosticCode::StaleHandle, "unionPoints requires live point sets", "points",
652 return ownProcgenObject(ownership_->points, std::make_unique<PointSet>(unionPointSets(*a, *b)));
655eve::Result<ProcgenPointSetHandleRef> Procgen::intersectPointsHandle(ProcgenPointSetHandleRef first,
661 eve::Diagnostic::error(eve::DiagnosticCode::StaleHandle, "intersectPoints requires live point sets",
663 return ownProcgenObject(ownership_->points, std::make_unique<PointSet>(intersectPointSets(*a, *b)));
666eve::Result<ProcgenPointSetHandleRef> Procgen::differencePointsHandle(ProcgenPointSetHandleRef first,
672 eve::Diagnostic::error(eve::DiagnosticCode::StaleHandle, "differencePoints requires live point sets",
674 return ownProcgenObject(ownership_->points, std::make_unique<PointSet>(differencePointSets(*a, *b)));
677eve::Result<ProcgenPointSetHandleRef> Procgen::transformPointsHandle(ProcgenPointSetHandleRef input, float translateX,
684 eve::Diagnostic::error(eve::DiagnosticCode::StaleHandle, "transformPoints input handle is stale", "input",
691eve::Result<ProcgenPointSetHandleRef> Procgen::transformPoints3DHandle(ProcgenPointSetHandleRef input, float translateX,
699 eve::Diagnostic::error(eve::DiagnosticCode::StaleHandle, "transformPoints3D input handle is stale", "input",
713 eve::DiagnosticCode::StaleHandle, "copyPoints requires live point sets", "points", {}, "procgen.squirrel"));
718eve::Result<ProcgenPointSetHandleRef> Procgen::remapDensityHandle(ProcgenPointSetHandleRef input, float inputMin,
724 eve::Diagnostic::error(eve::DiagnosticCode::StaleHandle, "remapDensity point-set handle is stale", "points",
726 if (!std::isfinite(inputMin) || !std::isfinite(inputMax) || inputMin == inputMax || !std::isfinite(outputMin) ||
729 eve::DiagnosticCode::InvalidArgument, "remapDensity requires finite non-zero input range", "inputRange", {},
735eve::Result<ProcgenPointSetHandleRef> Procgen::mathFloatAttributeHandle(ProcgenPointSetHandleRef input,
743 eve::Diagnostic::error(eve::DiagnosticCode::StaleHandle, "mathFloatAttribute point-set handle is stale",
758eve::Result<ProcgenPointSetHandleRef> Procgen::filterFloatAttributeHandle(ProcgenPointSetHandleRef input,
765 "filterFloatAttribute requires a live input and attribute name", "input", {}, "procgen.squirrel"));
766 return ownProcgenObject(ownership_->points, std::make_unique<PointSet>(filterPointFloatAttribute(
770eve::Result<ProcgenPointSetHandleRef> Procgen::filterStringAttributeHandle(ProcgenPointSetHandleRef input,
783 ProcgenPointSetHandleRef input, ProcgenGridHandleRef mask, float originX, float originZ, float cellSize,
794 auto filtered = excludePointsByGridMask(*points, *grid, originX, originZ, cellSize, semantic, clearance,
800eve::Result<ProcgenPointSetHandleRef> Procgen::densityCullHandle(ProcgenPointSetHandleRef input, uint32_t seed,
805 eve::DiagnosticCode::StaleHandle, "densityCull input handle is stale", "input", {}, "procgen.squirrel"));
806 return ownProcgenObject(ownership_->points, std::make_unique<PointSet>(densityCullPoints(*view, seed, multiplier)));
809eve::Result<ProcgenPointSetHandleRef> Procgen::projectToWorldHandle(ProcgenPointSetHandleRef input, float maxY,
815 eve::Diagnostic::error(eve::DiagnosticCode::StaleHandle, "projectToWorld point-set handle is stale",
819 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "projectToWorld requires finite maxY >= minY",
824 eve::DiagnosticCode::Unsupported, "projectToWorld requires an IProcgenWorldQuery provider", "worldQuery",
834 eve::Diagnostic::error(eve::DiagnosticCode::Failed, "world-query provider failed to execute projection",
839 std::move(output.appendPointFrom(*points, sourceIndex)).expect("projectToWorld attribute schema");
850 std::move(output.appendPointFrom(*points, sourceIndex)).expect("projectToWorld attribute schema");
857eve::Result<ProcgenPointSetHandleRef> Procgen::poissonDiskHandle(int width, int depth, float radius, uint32_t seed,
873 return "pcg-" + std::to_string(point.seed) + "-" + std::to_string(seedOccurrences[point.seed]++);
899static eve::Result<std::vector<eve::ProcgenInstanceDesc>> sceneInstanceDescs(const PointSet& points,
909 auto instance = sceneInstanceDesc(points, pointIndex, assetAttribute, defaultAsset, seedOccurrences);
914 if (requireStablePointIds && (instance.sourcePointId == 0 || !pointIds.insert(instance.sourcePointId).second))
916 eve::DiagnosticCode::Conflict, "procedural Scene snapshot requires unique non-zero source PointIds",
923eve::Result<void> Procgen::publishInstances(const std::string& batchId, ProcgenPointSetHandleRef points,
929 "publishInstances requires a batch id and a live point-set handle", {}, {}, "procgen.squirrel"));
933 eve::DiagnosticCode::Failed, "publishInstances scene sink is unavailable", {}, {}, "procgen.squirrel"));
939 eve::DiagnosticCode::Failed, "publishInstances scene sink rejected batch", {}, {}, "procgen.squirrel"));
947 eve::DiagnosticCode::InvalidArgument, "removeInstances requires a batch id", {}, {}, "procgen.squirrel"));
950 eve::DiagnosticCode::Failed, "removeInstances scene sink is unavailable", {}, {}, "procgen.squirrel"));
953 eve::DiagnosticCode::Failed, "removeInstances scene sink rejected batch", {}, {}, "procgen.squirrel"));
957eve::Result<void> Procgen::publishCellInstances(const std::string& prefix, const ProcgenCellRequest& request,
969eve::Result<uint64_t> Procgen::publishCellSnapshot(const std::string& prefix, const ProcgenCellRequest& request,
981 eve::DiagnosticCode::Failed, "publishCellSnapshot scene sink is unavailable", {}, {}, "procgen.squirrel"));
989eve::Result<uint64_t> Procgen::publishCellInstanceDelta(const std::string& prefix, const ProcgenCellRequest& request,
994 return eve::Result<uint64_t>::failure(eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument,
1005 eve::Diagnostic::error(eve::DiagnosticCode::Failed, "publishCellInstanceDelta scene sink is unavailable",
1029eve::Result<uint64_t> Procgen::synchronizeCellInstances(const std::string& prefix, const RuntimeGeneration& runtime,
1034 return eve::Result<uint64_t>::failure(eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument,
1044 eve::DiagnosticCode::NotFound, "synchronizeCellInstances requires an active runtime cell", "cell", {},
1050 eve::Diagnostic::error(eve::DiagnosticCode::Failed, "synchronizeCellInstances scene sink is unavailable",
1058 eve::Diagnostic::error(eve::DiagnosticCode::Conflict, "Scene cell revision is ahead of RuntimeGeneration",
1064 return publishCellInstanceDelta(prefix, request, *delta, targetRevision, assetAttribute, defaultAsset);
1080 "synchronizeCellInstancesAtomic requires a prefix and equally sized non-empty runtime/request lists",
1085 eve::DiagnosticCode::Failed, "synchronizeCellInstancesAtomic scene sink is unavailable", {}, {},
1096 eve::DiagnosticCode::InvalidArgument, "synchronizeCellInstancesAtomic contains a null cell", "cells",
1105 eve::DiagnosticCode::NotFound, "synchronizeCellInstancesAtomic contains an inactive cell", "cells", {},
1111 eve::Diagnostic::error(eve::DiagnosticCode::Conflict, "synchronizeCellInstancesAtomic repeats a cell",
1116 eve::DiagnosticCode::Conflict, "Scene cell revision is ahead of RuntimeGeneration", "revision", {},
1127eve::Result<void> Procgen::removeCellInstances(const std::string& prefix, const ProcgenCellRequest& request) {
1130 eve::DiagnosticCode::InvalidArgument, "removeCellInstances requires a prefix", {}, {}, "procgen.squirrel"));
1140 eve::DiagnosticCode::InvalidArgument, "removeCellInstancesAtomic requires a prefix and cleanup requests",
1145 eve::Diagnostic::error(eve::DiagnosticCode::Failed, "removeCellInstancesAtomic scene sink is unavailable",
1152 eve::DiagnosticCode::InvalidArgument, "removeCellInstancesAtomic contains a null request", "requests",
1166 "completeCellCleanupAtomic requires a prefix and equally sized runtime/request arrays", "requests", {},
1171 eve::Diagnostic::error(eve::DiagnosticCode::Failed, "completeCellCleanupAtomic scene sink is unavailable",
1187 eve::DiagnosticCode::InvalidArgument, "completeCellCleanupAtomic contains a null runtime or request",
1229eve::Result<ProcgenSpatialDataHandleRef> Procgen::pointDataHandle(ProcgenPointSetHandleRef points) {
1233 eve::DiagnosticCode::StaleHandle, "pointData point-set handle is stale", "points", {}, "procgen.squirrel"));
1237eve::Result<ProcgenSpatialDataHandleRef> Procgen::boxVolumeHandle(float minX, float minY, float minZ, float maxX,
1239 return spatialData_.emplace(std::make_unique<SpatialData>(SpatialData::box(minX, minY, minZ, maxX, maxY, maxZ)));
1242eve::Result<ProcgenSpatialDataHandleRef> Procgen::sphereVolumeHandle(float x, float y, float z, float radius) {
1245 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "sphereVolume radius must be positive",
1247 return spatialData_.emplace(std::make_unique<SpatialData>(SpatialData::sphere(x, y, z, radius)));
1250eve::Result<ProcgenSpatialDataHandleRef> Procgen::polygonVolumeHandle(ProcgenPointSetHandleRef controlPoints,
1253 if (!points.isBound() || points->getCount() < 3 || !std::isfinite(minY) || !std::isfinite(maxY))
1258 return spatialData_.emplace(std::make_unique<SpatialData>(SpatialData::polygon(*points, minY, maxY)));
1261eve::Result<ProcgenSpatialDataHandleRef> Procgen::splineDataHandle(ProcgenPointSetHandleRef controlPoints,
1267 "splineData requires a live set with at least two points and non-negative radius", "controlPoints", {},
1269 return spatialData_.emplace(std::make_unique<SpatialData>(SpatialData::spline(*view, radius)));
1272eve::Result<ProcgenSpatialDataHandleRef> Procgen::heightfieldDataHandle(ProcgenHeightmapHandleRef heightmap,
1282 std::make_unique<SpatialData>(SpatialData::heightfield(*view, originX, originZ, cellSize, heightScale)));
1298eve::Result<ProcgenSpatialDataHandleRef> Procgen::meshSurfaceDataHandle(ProcgenMeshBuildHandleRef mesh,
1301 if (!view.isBound() || view->getVertexCount() < 3 || view->getIndexCount() < 3 || tolerance < 0.f)
1306 return spatialData_.emplace(std::make_unique<SpatialData>(SpatialData::meshSurface(*view, tolerance)));
1309eve::Result<ProcgenSpatialDataHandleRef> Procgen::unionSpatialHandle(ProcgenSpatialDataHandleRef left,
1315 eve::DiagnosticCode::StaleHandle, "unionSpatial input handle is stale", "spatial", {}, "procgen.squirrel"));
1319eve::Result<ProcgenSpatialDataHandleRef> Procgen::intersectSpatialHandle(ProcgenSpatialDataHandleRef left,
1325 eve::Diagnostic::error(eve::DiagnosticCode::StaleHandle, "intersectSpatial input handle is stale",
1330eve::Result<ProcgenSpatialDataHandleRef> Procgen::differenceSpatialHandle(ProcgenSpatialDataHandleRef left,
1336 eve::Diagnostic::error(eve::DiagnosticCode::StaleHandle, "differenceSpatial input handle is stale",
1341eve::Result<ProcgenPointSetHandleRef> Procgen::sampleSpatialHandle(ProcgenSpatialDataHandleRef spatial, float spacing,
1347 "sampleSpatial requires live spatial data and positive spacing", "spatial", {}, "procgen.squirrel"));
1351eve::Result<ProcgenPointSetHandleRef> Procgen::filterSpatialHandle(ProcgenPointSetHandleRef input,
1357 eve::DiagnosticCode::StaleHandle, "filterSpatial input handle is stale", "input", {}, "procgen.squirrel"));
1358 return ownership_->points.emplace(std::make_unique<PointSet>(domain->filter(*points, invert)));
1361eve::Result<ProcgenPointSetHandleRef> Procgen::projectToSpatialHandle(ProcgenPointSetHandleRef input,
1367 eve::Diagnostic::error(eve::DiagnosticCode::StaleHandle, "projectToSpatial input handle is stale", "input",
1376eve::Result<void> Procgen::release(ProcgenSpatialDataHandleRef reference) { return spatialData_.erase(reference); }
1378bool Procgen::isStale(ProcgenSpatialDataHandleRef reference) const noexcept { return spatialData_.isStale(reference); }
1380eve::Result<ProcgenRuntimeGenerationHandleRef> Procgen::newRuntimeGenerationHandle(uint32_t worldSeed) {
1439eve::Result<void> Procgen::release(ProcgenPointGraphHandleRef reference) { return pointGraphs_.erase(reference); }
1449eve::Result<void> Procgen::release(ProcgenSplinePathHandleRef reference) { return splinePaths_.erase(reference); }
1450eve::Result<void> Procgen::release(ProcgenGridGraphHandleRef reference) { return gridGraphs_.erase(reference); }
1451eve::Result<void> Procgen::release(ProcgenMeshGraphHandleRef reference) { return meshGraphs_.erase(reference); }
1452eve::Result<void> Procgen::release(ProcgenBiomeRulesHandleRef reference) { return biomeRules_.erase(reference); }
1453eve::Result<void> Procgen::release(ProcgenShapeGrammarHandleRef reference) { return shapeGrammars_.erase(reference); }
1454eve::Result<void> Procgen::release(ProcgenLSystemHandleRef reference) { return lsystems_.erase(reference); }
1459bool Procgen::isStale(ProcgenPointGraphHandleRef reference) const noexcept { return pointGraphs_.isStale(reference); }
1469bool Procgen::isStale(ProcgenSplinePathHandleRef reference) const noexcept { return splinePaths_.isStale(reference); }
1470bool Procgen::isStale(ProcgenGridGraphHandleRef reference) const noexcept { return gridGraphs_.isStale(reference); }
1471bool Procgen::isStale(ProcgenMeshGraphHandleRef reference) const noexcept { return meshGraphs_.isStale(reference); }
1472bool Procgen::isStale(ProcgenBiomeRulesHandleRef reference) const noexcept { return biomeRules_.isStale(reference); }
1476bool Procgen::isStale(ProcgenLSystemHandleRef reference) const noexcept { return lsystems_.isStale(reference); }
1482eve::Result<ProcgenContextHandleRef> Procgen::beginSystemHandle(const std::string& name, uint32_t seed) {
1497eve::Result<ProcgenContextHandleRef> Procgen::beginCachedSystemHandle(const std::string& name, uint32_t seed,
1509 eve::DiagnosticCode::InvalidArgument, module->lastError_, "buildKey", {}, "procgen.squirrel"));
1514 found != module->systems_.end() && found->second.seed == normalizedSeed && found->second.buildKey == buildKey;
1530 eve::DiagnosticCode::StaleHandle, "Procgen module is no longer loaded", "context", {}, "procgen.squirrel"));
1548 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::PreconditionViolation,
1554 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::Failed, "commitSystem: " + error,
1597 eve::DiagnosticCode::NotFound, "procgen system was not committed", "system", {}, "procgen.squirrel"));
1601bool Procgen::hasSystem(const std::string& name) const { return systems_.find(name) != systems_.end(); }
1645 eve::DiagnosticCode::NotFound, "procgen system is not committed", "system", {}, "procgen.squirrel"));
1649 eve::DiagnosticCode::NotFound, "procgen system output was not found", "output", {}, "procgen.squirrel"));
1653eve::Result<ProcgenPointSetHandleRef> Procgen::getSystemDebugStageHandle(const std::string& name,
1658 eve::DiagnosticCode::NotFound, "procgen system is not committed", "system", {}, "procgen.squirrel"));
1662 eve::DiagnosticCode::NotFound, "procgen debug stage was not found", "stage", {}, "procgen.squirrel"));
1666eve::Result<ProcgenPointSetHandleRef> Procgen::getPreviousSystemDebugStageHandle(const std::string& name,
1671 eve::Diagnostic::error(eve::DiagnosticCode::NotFound, "procgen system has no previous revision", "system",
1676 eve::Diagnostic::error(eve::DiagnosticCode::NotFound, "previous procgen debug stage was not found", "stage",
1693 report << " stageCache=" << snapshot.stageCacheHits << " hit/" << snapshot.stageCacheMisses << " miss";
1695 report << "\n " << trace.name << " input=" << trace.inputCount << " output=" << trace.outputCount
1699 report << "\n output " << outputName << " points=" << snapshot.outputs.at(outputName).getCount();
1714 report << name << " revision=" << previous->second.revision << " -> " << current->second.revision;
1718 const int oldCount = oldStage == previous->second.debugStages.end() ? 0 : oldStage->second.getCount();
1746 eve::DiagnosticCode::StaleHandle, "generate parameters handle is stale", "params", {}, "procgen.squirrel"));
1750 eve::Diagnostic::error(eve::DiagnosticCode::Failed, lastError_.empty() ? "generate failed" : lastError_,
1755eve::Result<void> Procgen::generateTo(const std::string& algorithmId, ProcgenParamsHandleRef params,
1765 eve::DiagnosticCode::StaleHandle, "generateTo output handle is stale", "output", {}, "procgen.squirrel"));
1775 eve::DiagnosticCode::InvalidArgument, "generateTo: target 'grid' has no sink; use generateHandle()",
1786 eve::Diagnostic::error(eve::DiagnosticCode::Failed, lastError_, "output", {}, "procgen.squirrel"));
1792 eve::Diagnostic::error(eve::DiagnosticCode::Failed, lastError_, "output.path", {}, "procgen.squirrel"));
1796 eve::DiagnosticCode::InvalidArgument, "generateTo: unknown target '" + target + "' (use grid|tilelayer|json)",
1800eve::Result<void> Procgen::applyToLayer(ProcgenGridHandleRef grid, const std::string& palette, map::TileLayer& layer) {
1804 eve::DiagnosticCode::StaleHandle, "applyToLayer grid handle is stale", "grid", {}, "procgen.squirrel"));
1807 eve::Diagnostic::error(eve::DiagnosticCode::Failed, lastError_, "palette", {}, "procgen.squirrel"));
1844eve::Result<RecipeDescriptor> Procgen::getAlgorithmSchema(const std::string& algorithmId) const {
1848 eve::DiagnosticCode::NotFound, "algorithm schema was not found", "algorithm", {}, "procgen.squirrel"));
1877std::string Procgen::getAlgorithmParamDescription(const std::string& algorithmId, int index) const {
1882std::string Procgen::getAlgorithmParamCategory(const std::string& algorithmId, int index) const {
1900std::string Procgen::getAlgorithmParamDefault(const std::string& algorithmId, int index) const {
1940std::string Procgen::getAlgorithmParamChoice(const std::string& algorithmId, int paramIndex, int choiceIndex) const {
1946eve::Result<void> Procgen::applyAlgorithmDefaults(const std::string& algorithmId, ProcgenParamsHandleRef params) const {
1954 eve::DiagnosticCode::NotFound, "algorithm schema was not found", "algorithm", {}, "procgen.squirrel"));
1962 eve::DiagnosticCode::StaleHandle, "autotileGrid grid handle is stale", "grid", {}, "procgen.squirrel"));
1965 eve::Diagnostic::error(eve::DiagnosticCode::Failed, "autotileGrid failed", "grid", {}, "procgen.squirrel"));
1975 eve::DiagnosticCode::StaleHandle, "gridToJson grid handle is stale", "grid", {}, "procgen.squirrel"));
1984 eve::Diagnostic::error(eve::DiagnosticCode::StaleHandle, "generateImage parameters handle is stale",
1991 eve::DiagnosticCode::Failed, lastError_.empty() ? "generateImage failed" : lastError_, "recipe", {},
1996eve::script::Borrowed<image::ImageData> Procgen::resolve(ProcgenImageHandleRef reference) noexcept {
2005 eve::DiagnosticCode::StaleHandle, "Procgen module is no longer loaded", "image", {}, "procgen.squirrel"));
2015eve::Result<ProcgenNormalImageHandleRef> Procgen::generateNormalImageHandle(const std::string& recipeId,
2020 eve::Diagnostic::error(eve::DiagnosticCode::StaleHandle, "generateNormalImage parameters handle is stale",
2031 eve::Diagnostic::error(eve::DiagnosticCode::StaleHandle, "generated albedo image handle is stale", "image",
2052eve::script::Borrowed<image::ImageData> Procgen::resolve(ProcgenNormalImageHandleRef reference) noexcept {
2072eve::script::Borrowed<graphics::Texture> Procgen::generateTextureBorrowed(const std::string& recipeId,
2113eve::Result<RecipeDescriptor> Procgen::getTextureRecipeSchema(const std::string& recipeId) const {
2118 eve::DiagnosticCode::NotFound, "texture recipe schema was not found", "recipe", {}, "procgen.squirrel"));
2132 eve::DiagnosticCode::NotFound, "texture recipe schema was not found", "recipe", {}, "procgen.squirrel"));
2168eve::Result<float> Procgen::cloudCoverageAt(ProcgenCloudFieldHandleRef field, float x, float z, float time) {
2172 eve::DiagnosticCode::StaleHandle, "cloud field handle is stale", "field", {}, "procgen.squirrel"));
2176eve::Result<float> Procgen::cloudShadowFactor(ProcgenCloudShadowHandleRef shadow, float x, float z, float time) {
2180 eve::DiagnosticCode::StaleHandle, "cloud shadow handle is stale", "shadow", {}, "procgen.squirrel"));
2184eve::Result<void> Procgen::sampleCloud(ProcgenCloudFieldHandleRef field, std::span<float> out, int w, int h, float time,
2189 eve::DiagnosticCode::StaleHandle, "cloud field handle is stale", "field", {}, "procgen.squirrel"));
2198eve::Result<void> Procgen::sampleCloudShadow(ProcgenCloudShadowHandleRef shadow, std::span<float> out, int w, int h,
2203 eve::DiagnosticCode::StaleHandle, "cloud shadow handle is stale", "shadow", {}, "procgen.squirrel"));
2212eve::Result<ProcgenPbrMaterialHandleRef> Procgen::generatePbrMaterialHandle(const std::string& recipeId,
2217 eve::Diagnostic::error(eve::DiagnosticCode::StaleHandle, "generatePbrMaterial parameters handle is stale",
2224 eve::DiagnosticCode::Failed, lastError_.empty() ? "generatePbrMaterial failed" : lastError_, "recipe", {},
2266 eve::DiagnosticCode::NotFound, "PBR recipe schema was not found", "recipe", {}, "procgen.squirrel"));
2270eve::Result<void> Procgen::applyPbrRecipeDefaults(const std::string& recipeId, ProcgenParamsHandleRef params) const {
2279 eve::DiagnosticCode::NotFound, "PBR recipe schema was not found", "recipe", {}, "procgen.squirrel"));
2299 eve::DiagnosticCode::Failed, "generated artifact has no mesh payload", "recipe", {}, "procgen.squirrel"));
2305 eve::DiagnosticCode::Failed, published.status().describe(), "artifact", {}, "procgen.squirrel"));
2322eve::Result<GeneratedArtifact> Procgen::buildArtifact(const std::string& recipeId, ProcgenParamsHandleRef params,
2327 eve::Diagnostic::error(eve::DiagnosticCode::StaleHandle, "buildArtifact parameters handle is stale",
2332eve::Result<ArtifactPublishReceipt> Procgen::publishArtifact(const std::string& recipeId, ProcgenParamsHandleRef params,
2348eve::script::Borrowed<graphics::Mesh> Procgen::generateMeshBorrowed(const std::string& recipeId,
2360eve::script::Borrowed<graphics::Mesh> Procgen::uploadMeshBorrowed(const MeshBuild& mesh, graphics::Graphics& gfx) {
2362 graphics::Mesh* uploaded = gfx.newMeshFromArraysColored(mesh.positions().data(), mesh.normals().data(),
2370 const GtsTerrainLodSet& lods,int tileIndex,graphics::Renderable3D& renderable,graphics::Graphics& gfx,
2373 if(!tile||tile->levels.empty()||tile->levels.size()>graphics::Renderable3D::MeshRenderer::kMaxLodLevels||
2375 verticalFovDegrees<=0.f||verticalFovDegrees>=180.f||!std::isfinite(originX)||!std::isfinite(originY)||!std::isfinite(originZ))
2379 for(const auto& level:tile->levels){auto mesh=uploadMeshBorrowed(level,gfx);if(!mesh.isBound())
2381 "GTS terrain tile contains an empty or unuploadable LOD","procgen.configureGtsTerrainTileLods"));uploaded.push_back(mesh.get());}
2383 for(int level=0;level<static_cast<int>(uploaded.size());++level){float distance=level==0?0.f:lods.getLevelSwitchDistance(level-1,worldDiameter,verticalFovDegrees);renderable.setMeshLod(level,uploaded[level],distance);}
2384 renderable.setMeshLodCullDistance(lods.getLevelSwitchDistance(static_cast<int>(uploaded.size())-1,worldDiameter,verticalFovDegrees));
2420 const float distance = level == 0 ? 0.F : lods.getSwitchDistance(level - 1, worldDiameter, verticalFovDegrees);
2440 const float cullDistance = lods.getSwitchDistance(count - 1, worldDiameter, verticalFovDegrees);
2475 eve::DiagnosticCode::NotFound, "mesh recipe schema was not found", "recipe", {}, "procgen.squirrel"));
2479eve::Result<void> Procgen::applyMeshRecipeDefaults(const std::string& recipeId, ProcgenParamsHandleRef params) const {
2488 eve::DiagnosticCode::NotFound, "mesh recipe schema was not found", "recipe", {}, "procgen.squirrel"));
2512 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "heightmap dimensions must be positive",
2520 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "decoded heightmap has no samples",
2537eve::Result<ProcgenHeightmapHandleRef> Procgen::generateHeightmapHandle(ProcgenParamsHandleRef params) {
2541 eve::Diagnostic::error(eve::DiagnosticCode::StaleHandle, "generateHeightmap parameters handle is stale",
2544 return ownProcgenObject(ownership_->heightmaps, std::make_unique<Heightmap>(Heightmap::generate(
2554 eve::DiagnosticCode::StaleHandle, "heightmap handle is stale", "heightmap", {}, "procgen.squirrel"));
2568bool Procgen::erodeTerrainThermal(Heightmap* heightmap, int iterations, float talus, float strength) {
2578bool Procgen::erodeTerrainHydraulic(Heightmap* heightmap, int iterations, float rainfall, float evaporation,
2585 TerrainPipeline::erodeHydraulic(*heightmap, {iterations, rainfall, evaporation, capacity, erosion, deposition});
2589bool Procgen::erodeTerrainFluvial(Heightmap* heightmap, int iterations, float riverThreshold, float incision,
2591 return erodeTerrainFluvialAdvanced(heightmap, iterations, riverThreshold, incision, maxDepth, bankWidth,
2595bool Procgen::erodeTerrainFluvialAdvanced(Heightmap* heightmap, int iterations, float riverThreshold, float incision,
2597 return erodeTerrainFluvialScaled(heightmap, iterations, riverThreshold, incision, maxDepth, bankWidth,
2601bool Procgen::erodeTerrainFluvialScaled(Heightmap* heightmap, int iterations, float riverThreshold, float incision,
2613 *heightmap, {iterations, riverThreshold, incision, maxDepth, bankWidth, maxBreachDepth, coordinateScale});
2617TerrainErosionMap* Procgen::erodeTerrainFluvialDetailed(Heightmap* heightmap, int iterations, float riverThreshold,
2630 *heightmap, {iterations, riverThreshold, incision, maxDepth, bankWidth, maxBreachDepth, coordinateScale});
2638TerrainLayers* Procgen::analyzeTerrain(Heightmap* heightmap, float riverThreshold, float seaLevel, float latitude) {
2642TerrainLayers* Procgen::analyzeTerrainScaled(Heightmap* heightmap, float riverThreshold, float seaLevel, float latitude,
2653 HydrologyMap hydrology = TerrainPipeline::buildHydrology(*heightmap, riverThreshold, seaLevel, coordinateScale);
2654 ClimateMap climate = TerrainPipeline::buildClimate(*heightmap, hydrology, seaLevel, latitude, coordinateScale);
2658data::ByteData* Procgen::bakeTerrainAsset(Heightmap* heightmap, TerrainLayers* layers, int chunkSize) {
2665 if (!TerrainAsset::bake(*heightmap, layers->hydrology(), layers->climate(), chunkSize, bytes, &lastError_))
2670TerrainMeshChunk* Procgen::buildTerrainChunk(Heightmap* heightmap, TerrainLayers* layers, int originX, int originY,
2695int Procgen::selectTerrainLod(Heightmap* heightmap, int originX, int originY, int cellsX, int cellsY, int maxLod,
2710 const int lod = TerrainLodSelector::select(*heightmap, settings, maxLod, cameraDistance, viewportHeight,
2716graphics::Mesh* Procgen::generateTerrainChunkMesh(TerrainMeshChunk* chunk, graphics::Graphics* gfx) {
2723 return gfx->newMeshFromArrays(mesh.positions().data(), mesh.normals().data(), mesh.uvs().data(),
2727graphics::Mesh* Procgen::generateTerrainRiverMesh(Heightmap* heightmap, TerrainLayers* layers, graphics::Graphics* gfx,
2731 return generateTerrainRiverMeshAdvanced(heightmap, layers, gfx, originX, originY, cellsX, cellsY, cellSize,
2735graphics::Mesh* Procgen::generateTerrainRiverMeshAdvanced(Heightmap* heightmap, TerrainLayers* layers,
2758 if (!TerrainRiverMeshBuilder::build(*heightmap, *layers, settings, river, &lastError_) || river.empty())
2760 return gfx->newMeshFromArrays(river.positions().data(), river.normals().data(), river.uvs().data(),
2764graphics::Mesh* Procgen::generateTerrainLakeMesh(Heightmap* heightmap, TerrainLayers* layers, graphics::Graphics* gfx,
2782 if (!TerrainLakeMeshBuilder::build(*heightmap, *layers, settings, lake, &lastError_) || lake.empty())
2784 return gfx->newMeshFromArrays(lake.positions().data(), lake.normals().data(), lake.uvs().data(),
2870 const size_t percentile = std::min(positive.size() - 1, size_t(std::floor(float(positive.size() - 1) * 0.99f)));
2877image::ImageData* erosionDiagnosticImage(TerrainErosionMap* map, float exposure, ErosionImageMode mode) {
2878 if (!map || map->width <= 0 || map->height <= 0 || map->wear.size() != size_t(map->width) * size_t(map->height) ||
2911image::ImageData* Procgen::generateTerrainErosionMap(TerrainErosionMap* erosion, float exposure) {
2913 image::ImageData* result = erosionDiagnosticImage(erosion, exposure, ErosionImageMode::Combined);
2925image::ImageData* Procgen::generateTerrainDepositionMap(TerrainErosionMap* erosion, float exposure) {
2927 image::ImageData* result = erosionDiagnosticImage(erosion, exposure, ErosionImageMode::Deposit);
2989 "ProcgenRecipeSchema", std::function<RecipeDescriptor*()>([]() -> RecipeDescriptor* { return nullptr; }), true);
3010 table.addClass<Params>("ProcgenParams", std::function<Params*()>([]() -> Params* { return nullptr; }), true);
3038 table.addClass<Grid2D>("ProcgenGrid2D", std::function<Grid2D*()>([]() -> Grid2D* { return nullptr; }), true);
3060 gridVm, eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument,
3085 grid.addFunc("setMeta", [gridVm](Grid2D* value, const std::string& key, const std::string& data) {
3147 points.addFunc("getPointId", [](PointSet* value, int index) { return std::to_string(value->getPointId(index)); });
3151 std::from_chars(namespaceText.data(), namespaceText.data() + namespaceText.size(), namespaceId);
3152 if (error != std::errc{} || end != namespaceText.data() + namespaceText.size() || namespaceId == 0)
3153 throw std::invalid_argument("assignPointIds: namespace must be a non-zero unsigned decimal string");
3155 if (!assigned.ok()) throw std::invalid_argument("assignPointIds: point set contains duplicate identities");
3180 lsystem.addFunc("addRules", [](LSystem* ls, char symbol, ssq::Array productions, ssq::Array weights) {
3203 "ProcgenSpatialData", std::function<SpatialData*()>([]() -> SpatialData* { return nullptr; }), true);
3215 "ProcgenPointDelta", std::function<PointDelta*()>([]() -> PointDelta* { return nullptr; }), true);
3216 pointDelta.addFunc("getAddedCount", [](PointDelta* value) { return value->added.getCount(); });
3217 pointDelta.addFunc("getUpdatedCount", [](PointDelta* value) { return value->updated.getCount(); });
3218 pointDelta.addFunc("getRemovedCount", [](PointDelta* value) { return int(value->removed.size()); });
3219 pointDelta.addFunc("getTargetCount", [](PointDelta* value) { return int(value->targetOrder.size()); });
3221 pointDelta.addFunc("getUpdated", [](PointDelta* value) { return new PointSet(value->updated); });
3232 pointDelta.addFunc("getBaseFingerprint", [](PointDelta* value) { return std::to_string(value->baseFingerprint); });
3239 "ProcgenContext", std::function<ProcgenContext*()>([]() -> ProcgenContext* { return nullptr; }), true);
3296 eve::DiagnosticCode::StaleHandle, std::string("owned procgen ") + "params" + " handle is stale",
3302 eve::DiagnosticCode::StaleHandle, std::string("owned procgen ") + "params" + " handle is stale",
3312 eve::DiagnosticCode::StaleHandle, std::string("owned procgen ") + "params" + " handle is stale",
3318 eve::DiagnosticCode::StaleHandle, std::string("owned procgen ") + "params" + " handle is stale",
3324 ownedParams.addFunc("setInt", [vm](ScriptProcgenParams* value, const std::string& key, int number) {
3328 eve::DiagnosticCode::StaleHandle, std::string("owned procgen ") + "params" + " handle is stale",
3334 eve::DiagnosticCode::StaleHandle, std::string("owned procgen ") + "params" + " handle is stale",
3340 ownedParams.addFunc("setFloat", [vm](ScriptProcgenParams* value, const std::string& key, float number) {
3344 eve::DiagnosticCode::StaleHandle, std::string("owned procgen ") + "params" + " handle is stale",
3350 eve::DiagnosticCode::StaleHandle, std::string("owned procgen ") + "params" + " handle is stale",
3356 ownedParams.addFunc("setBool", [vm](ScriptProcgenParams* value, const std::string& key, bool flag) {
3360 eve::DiagnosticCode::StaleHandle, std::string("owned procgen ") + "params" + " handle is stale",
3366 eve::DiagnosticCode::StaleHandle, std::string("owned procgen ") + "params" + " handle is stale",
3372 ownedParams.addFunc("setString", [vm](ScriptProcgenParams* value, const std::string& key, const std::string& text) {
3376 eve::DiagnosticCode::StaleHandle, std::string("owned procgen ") + "params" + " handle is stale",
3382 eve::DiagnosticCode::StaleHandle, std::string("owned procgen ") + "params" + " handle is stale",
3404 ownedParams.addFunc("getInt", [](ScriptProcgenParams* value, const std::string& key, int fallback) {
3408 ownedParams.addFunc("getFloat", [](ScriptProcgenParams* value, const std::string& key, float fallback) {
3412 ownedParams.addFunc("getBool", [](ScriptProcgenParams* value, const std::string& key, bool fallback) {
3435 ownedGrid.addFunc("isStale", [](ScriptProcgenGrid* value) { return !value || Procgen::isStale(value->reference); });
3567 ownedGrid.addFunc("getMeta", [](ScriptProcgenGrid* value, const std::string& key, const std::string& fallback) {
3571 ownedGrid.addFunc("setMeta", [vm](ScriptProcgenGrid* value, const std::string& key, const std::string& data) {
3607 auto view = value ? Procgen::resolve(value->reference) : eve::script::Borrowed<ProcgenContext>();
3611 auto view = value ? Procgen::resolve(value->reference) : eve::script::Borrowed<ProcgenContext>();
3615 auto view = value ? Procgen::resolve(value->reference) : eve::script::Borrowed<ProcgenContext>();
3619 auto view = value ? Procgen::resolve(value->reference) : eve::script::Borrowed<ProcgenContext>();
3623 auto view = value ? Procgen::resolve(value->reference) : eve::script::Borrowed<ProcgenContext>();
3626 ownedContext.addFunc("beginTrace", [](ScriptProcgenContext* value, const std::string& stage, int inputCount) {
3627 auto view = value ? Procgen::resolve(value->reference) : eve::script::Borrowed<ProcgenContext>();
3631 auto view = value ? Procgen::resolve(value->reference) : eve::script::Borrowed<ProcgenContext>();
3634 ownedContext.addFunc("publish", [](ScriptProcgenContext* value, const std::string& name, PointSet* points) {
3635 auto view = value ? Procgen::resolve(value->reference) : eve::script::Borrowed<ProcgenContext>();
3638 ownedContext.addFunc("captureDebug", [](ScriptProcgenContext* value, const std::string& name, PointSet* points) {
3639 auto view = value ? Procgen::resolve(value->reference) : eve::script::Borrowed<ProcgenContext>();
3644 [](ScriptProcgenContext* value, const std::string& name, const std::string& cacheKey) -> PointSet* {
3645 auto view = value ? Procgen::resolve(value->reference) : eve::script::Borrowed<ProcgenContext>();
3650 auto view = value ? Procgen::resolve(value->reference) : eve::script::Borrowed<ProcgenContext>();
3654 auto view = value ? Procgen::resolve(value->reference) : eve::script::Borrowed<ProcgenContext>();
3696 auto object = eve::script::makeOwnedSquirrelInstance<MeshBuild>(vm, self->copyGroup(groupIndex));
3714 mesh.addFunc("hasVertexColors", [](const MeshBuild* self) { return self && self->hasVertexColors(); });
3718 mesh.addFunc("setColor", [vm](MeshBuild* self, int vertex, float r, float g, float b, float a) {
3730 auto splitResult=table.addClass("GtsMeshSplitResult",ssq::Class::Ctor<GtsMeshSplitResult()>());
3731 splitResult.addFunc("getColumnCount",[](const GtsMeshSplitResult* value){return value?value->getColumnCount():0;});
3732 splitResult.addFunc("getRowCount",[](const GtsMeshSplitResult* value){return value?value->getRowCount():0;});
3733 splitResult.addFunc("getTileCount",[](const GtsMeshSplitResult* value){return value?value->getTileCount():0;});
3734 splitResult.addFunc("getTileOffsetX",[](const GtsMeshSplitResult* value,int index){return value?value->getTileOffsetX(index):0.f;});
3735 splitResult.addFunc("getTileOffsetZ",[](const GtsMeshSplitResult* value,int index){return value?value->getTileOffsetZ(index):0.f;});
3736 splitResult.addFunc("copyTileMesh",[vm](const GtsMeshSplitResult* self,int index)->ssq::Object {
3739 if(!object){object.ignore("failed to create split mesh Squirrel instance");return ssq::Object(vm);}
3743 "splitGtsMesh", [vm](GtsMeshSplitResult* output, const MeshBuild* source, int xSplits, int zSplits, int pivot) {
3752 auto pcgMeshTransform=table.addClass("PcgMeshTransform",ssq::Class::Ctor<PcgMeshTransform()>());
3753 pcgMeshTransform.addFunc("setElement", [vm](PcgMeshTransform* self, int row, int column, float value) {
3763 auto pcgMeshCombinePlan=table.addClass("PcgMeshCombinePlan",ssq::Class::Ctor<PcgMeshCombinePlan()>());
3764 pcgMeshCombinePlan.addFunc("appendSource", [vm](PcgMeshCombinePlan* self, const MeshBuild* source,
3777 table.addFunc("combinePcgStaticMeshes", [vm](MeshBuild* output, const PcgMeshCombinePlan* plan) {
3783 !output ? "Pcg mesh combine output is required" : "Pcg mesh combine plan is required", "mesh", {},
3818 meshMergePlan.addFunc("setContactBlend", [vm](MeshMergePlan* self, float edgeRadius, float materialRadius,
3866 DiagnosticCode::InvalidArgument, "MeshMergePlan is required", "merge", {}, "procgen.squirrel"));
3874 return eve::script::projectStatusResult(vm, Status::success(), std::move(instance).takeValue());
3878 meshAdhereLive.addFunc("activate", [vm](MeshAdhereLive* self, const MeshBuild* source, const MeshBuild* surface) {
3886 meshAdhereLive.addFunc("isActive", [](const MeshAdhereLive* self) { return self && self->isActive(); });
3889 meshAdhereLive.addFunc("setParams", [vm](MeshAdhereLive* self, float edgeRadius, float materialRadius,
3935 meshAdhereLive.addFunc("isDirty", [](const MeshAdhereLive* self) { return self && self->isDirty(); });
3942 DiagnosticCode::InvalidArgument, "MeshAdhereLive is required", "adhere", {}, "procgen.squirrel"));
3950 return eve::script::projectStatusResult(vm, Status::success(), std::move(instance).takeValue());
3955 DiagnosticCode::InvalidArgument, "MeshAdhereLive is required", "adhere", {}, "procgen.squirrel"));
3963 return eve::script::projectStatusResult(vm, Status::success(), std::move(instance).takeValue());
3966 auto pcgMeshLodBackup=table.addClass("PcgMeshLodBackup",ssq::Class::Ctor<PcgMeshLodBackup()>());
3967 pcgMeshLodBackup.addFunc("capture", [vm](PcgMeshLodBackup* self, graphics::Renderable3D* renderable) {
3975 pcgMeshLodBackup.addFunc("restore", [vm](PcgMeshLodBackup* self, graphics::Renderable3D* renderable) {
3984 pcgMeshLodBackup.addFunc("isCaptured",[](const PcgMeshLodBackup* self){return self&&self->isCaptured();});
3985 pcgMeshLodBackup.addFunc("getEntityId",[](const PcgMeshLodBackup* self){return self?self->getEntityId():0u;});
3990 auto pcgMeshLodProfile=table.addClass("PcgMeshLodProfile",ssq::Class::Ctor<PcgMeshLodProfile()>());
3991 pcgMeshLodProfile.addFunc("appendLevel",[vm](PcgMeshLodProfile* self,float transition,float fade,float quality,
3993 return eve::script::projectResult(vm,self->appendLevel(transition,fade,quality,combineMeshes,combineSubMeshes));
3996 pcgMeshLodProfile.addFunc("getLevelCount",[](const PcgMeshLodProfile* self){return self->getLevelCount();});
3998 const auto* level=self?self->levelAt(index):nullptr;return level?level->screenRelativeTransitionHeight:-1.F;
4001 const auto* level=self?self->levelAt(index):nullptr;return level?level->fadeTransitionWidth:-1.F;
4006 pcgMeshLodProfile.addFunc("setLevelRendererState", [vm](PcgMeshLodProfile* self, int index, int skinQuality,
4017 pcgMeshLodProfile.addFunc("getLevelRendererState",[](const PcgMeshLodProfile* self,int index,int field){
4020 pcgMeshLodProfile.addFunc("setFadePolicy", [vm](PcgMeshLodProfile* self, int mode, bool animate, float duration) {
4028 pcgMeshLodProfile.addFunc("getFadeMode",[](const PcgMeshLodProfile* self){return self->getFadeMode();});
4036 pcgMeshLods.addFunc("getLevelCount",[](const PcgMeshLodSet* self){return self->getLevelCount();});
4037 pcgMeshLods.addFunc("getTransitionHeight",[](const PcgMeshLodSet* self,int index){return self->getTransitionHeight(index);});
4038 pcgMeshLods.addFunc("getFadeWidth",[](const PcgMeshLodSet* self,int index){return self->getFadeWidth(index);});
4039 pcgMeshLods.addFunc("getQuality",[](const PcgMeshLodSet* self,int index){return self->getQuality(index);});
4040 pcgMeshLods.addFunc("selectLevel",[](const PcgMeshLodSet* self,float height){return self->selectLevel(height);});
4041 pcgMeshLods.addFunc("getSwitchDistance",[](const PcgMeshLodSet* self,int level,float diameter,float fov){
4046 auto object=eve::script::makeOwnedSquirrelInstance<MeshBuild>(vm,std::make_unique<MeshBuild>(*mesh));
4047 if(!object){object.ignore("failed to create Pcg LOD mesh Squirrel instance");return ssq::Object(vm);}
4051 "buildPcgMeshLods", [vm](PcgMeshLodSet* output, const MeshBuild* source, const PcgMeshLodProfile* profile) {
4059 table.addFunc("buildPcgCombinedMeshLods", [vm](PcgMeshLodSet* output, const PcgMeshCombinePlan* plan,
4064 DiagnosticCode::InvalidArgument, "Pcg combined mesh LOD output, plan and profile are required",
4069 "configurePcgMeshLods", [vm](Procgen* self, const PcgMeshLodSet* lods, graphics::Renderable3D* renderable,
4076 return eve::script::projectResult(vm, self->configurePcgMeshLods(*lods, *renderable, *gfx, diameter, fov));
4079 auto terrainMeshSettings=table.addClass("GtsTerrainMeshSettings",ssq::Class::Ctor<GtsTerrainMeshSettings()>());
4080 terrainMeshSettings.addFunc("getSaveResolution",[](const GtsTerrainMeshSettings* self){return self->getSaveResolution();});
4081 terrainMeshSettings.addFunc("setSaveResolution",[vm](GtsTerrainMeshSettings* self,int value){return eve::script::projectResult(vm,self->setSaveResolution(value));});
4082 terrainMeshSettings.addFunc("getLodCount",[](const GtsTerrainMeshSettings* self){return self->getLodCount();});
4083 terrainMeshSettings.addFunc("setLodCount",[vm](GtsTerrainMeshSettings* self,int value){return eve::script::projectResult(vm,self->setLodCount(value));});
4084 terrainMeshSettings.addFunc("getSubTiles",[](const GtsTerrainMeshSettings* self){return self->getSubTiles();});
4085 terrainMeshSettings.addFunc("setSubTiles",[vm](GtsTerrainMeshSettings* self,int value){return eve::script::projectResult(vm,self->setSubTiles(value));});
4086 terrainMeshSettings.addFunc("getLodQuality",[](const GtsTerrainMeshSettings* self,int index){return self->getLodQuality(index);});
4087 terrainMeshSettings.addFunc("setLodQuality",[vm](GtsTerrainMeshSettings* self,int index,float value){return eve::script::projectResult(vm,self->setLodQuality(index,value));});
4088 terrainMeshSettings.addFunc("getLodTransitionHeight",[](const GtsTerrainMeshSettings* self,int index){return self->getLodTransitionHeight(index);});
4089 terrainMeshSettings.addFunc("snapshotJson",[vm](const GtsTerrainMeshSettings* self){return eve::script::projectResult(vm,self->snapshotJson(),[](const std::string&value){return value;});});
4090 terrainMeshSettings.addFunc("restoreJson",[vm](GtsTerrainMeshSettings* self,const std::string&json){return eve::script::projectResult(vm,self->restoreJson(json));});
4091 auto terrainExportSettings=table.addClass("GtsTerrainExportSettings",ssq::Class::Ctor<GtsTerrainExportSettings()>());
4092 terrainExportSettings.addFunc("appendSourcePreset",[vm](GtsTerrainExportSettings* self,int mode,int level,float quality,float transition){return eve::script::projectResult(vm,self->appendSourcePreset(mode,level,quality,transition));});
4093 terrainExportSettings.addFunc("appendImpostorPreset",[vm](GtsTerrainExportSettings* self,int mode,int level,float quality,float transition){return eve::script::projectResult(vm,self->appendImpostorPreset(mode,level,quality,transition));});
4094 terrainExportSettings.addFunc("getSourceLodCount",[](const GtsTerrainExportSettings* self){return self->getSourceLodCount();});
4095 terrainExportSettings.addFunc("getImpostorLodCount",[](const GtsTerrainExportSettings* self){return self->getImpostorLodCount();});
4096 terrainExportSettings.addFunc("snapshotJson",[vm](const GtsTerrainExportSettings* self){return eve::script::projectResult(vm,self->snapshotJson(),[](const std::string& value){return value;});});
4097 terrainExportSettings.addFunc("restoreJson",[vm](GtsTerrainExportSettings* self,const std::string& json){return eve::script::projectResult(vm,self->restoreJson(json));});
4103 terrainLods.addFunc("getTileOffsetX",[](const GtsTerrainLodSet* self,int tile){auto* value=self?self->tileAt(tile):nullptr;return value?value->offsetX:0.f;});
4104 terrainLods.addFunc("getTileOffsetZ",[](const GtsTerrainLodSet* self,int tile){auto* value=self?self->tileAt(tile):nullptr;return value?value->offsetZ:0.f;});
4105 terrainLods.addFunc("getLevelQuality",[](const GtsTerrainLodSet* self,int level){auto* value=self?self->levelAt(level):nullptr;return value?value->quality:0.f;});
4106 terrainLods.addFunc("getLevelTransitionHeight",[](const GtsTerrainLodSet* self,int level){auto* value=self?self->levelAt(level):nullptr;return value?value->screenRelativeTransitionHeight:0.f;});
4111 return eve::script::projectResult(vm,self->snapshotJson(),[](const std::string& value){return value;});
4116 terrainLods.addFunc("copyLevelMesh",[vm](const GtsTerrainLodSet* self,int tile,int level)->ssq::Object{
4117 auto* value=self?self->tileAt(tile):nullptr;if(!value||level<0||level>=static_cast<int>(value->levels.size()))return ssq::Object(vm);
4120 if(!object){object.ignore("failed to create terrain LOD mesh Squirrel instance");return ssq::Object(vm);}
4123 table.addFunc("buildDefaultGtsTerrainLods", [vm](GtsTerrainLodSet* output, const MeshBuild* source, int xSplits,
4130 auto built=buildGtsTerrainLods(*source,xSplits,zSplits,static_cast<GtsMeshPivot>(pivot),defaultGtsTerrainLodLevels());
4135 table.addFunc("buildGtsTerrainBaseMesh", [vm](MeshBuild* output, const Heightmap* heightmap, int resolution,
4145 table.addFunc("buildDefaultGtsTerrainLodsFromHeightmap", [vm](GtsTerrainLodSet* output, const Heightmap* heightmap,
4153 return eve::script::projectResult(vm,buildDefaultGtsTerrainLodsFromHeightmapInto(*output,*heightmap,
4154 static_cast<GtsTerrainSaveResolution>(resolution),sizeX,sizeY,sizeZ,subTiles,static_cast<GtsMeshPivot>(pivot)));
4156 table.addFunc("buildGtsTerrainLodsFromHeightmap", [vm](GtsTerrainLodSet* output, const Heightmap* heightmap,
4162 DiagnosticCode::InvalidArgument, "GTS terrain LOD output, heightmap and settings are required",
4164 return eve::script::projectResult(vm,buildGtsTerrainLodsFromHeightmapInto(*output,*heightmap,*settings,
4167 table.addFunc("buildGtsTerrainExportLodsFromHeightmap", [vm](GtsTerrainLodSet* output, const Heightmap* heightmap,
4175 return eve::script::projectResult(vm,buildGtsTerrainExportLodsFromHeightmapInto(*output,*heightmap,*settings,
4178 table.addFunc("buildGtsTerrainColliderMeshFromHeightmap", [vm](MeshBuild* output, const Heightmap* heightmap,
4189 table.addFunc("encodeGtsTerrainObj", [vm](const Heightmap* heightmap, int resolution, float sizeX, float sizeY,
4197 return eve::script::projectResult(vm,encodeGtsTerrainObj(*heightmap,static_cast<GtsTerrainSaveResolution>(resolution),
4198 sizeX,sizeY,sizeZ,static_cast<GtsTerrainObjFaceMode>(faceMode)),[](const std::string& value){return value;});
4200 table.addFunc("encodeGtsMaskedTerrainObj", [vm](const Heightmap* heightmap, const Heightmap* maskmap,
4207 DiagnosticCode::InvalidArgument, "GTS masked OBJ heightmap and maskmap are required", "heightmap",
4212 static_cast<GtsTerrainObjFaceMode>(faceMode),threshold,invert),[](const std::string& value){return value;});
4222 DiagnosticCode::InvalidArgument, "GTS vertex-color output, source and texture are required", "mesh",
4225 return eve::script::projectResult(vm,bakeGtsTerrainVertexColorsInto(*output,*source,*bakedTexture,
4226 static_cast<GtsTerrainNormalEdgeMode>(edgeMode),smoothingIterations,terrainSizeX,terrainSizeZ,linearize),
4229 auto terrainLodRuntime=table.addClass("GtsTerrainLodRuntime",ssq::Class::Ctor<GtsTerrainLodRuntime()>());
4230 terrainLodRuntime.addFunc("replace", [vm](GtsTerrainLodRuntime* self, const GtsTerrainLodSet* lods,
4237 DiagnosticCode::InvalidArgument, "GTS terrain runtime replace arguments are required", "runtime",
4240 return eve::script::projectResult(vm,self->replace(*lods,*procgen,*gfx,diameter,fov,x,y,z),[](std::uint64_t v){return static_cast<std::int64_t>(v);});
4242 terrainLodRuntime.addFunc("replaceAndHideSource", [vm](GtsTerrainLodRuntime* self, const GtsTerrainLodSet* lods,
4253 return eve::script::projectResult(vm,self->replaceAndHideSource(*lods,*procgen,*gfx,*source,diameter,fov,x,y,z),
4256 terrainLodRuntime.addFunc("clear",[vm](GtsTerrainLodRuntime* self){return eve::script::projectResult(vm,self->clear(),[](int v){return v;});});
4257 terrainLodRuntime.addFunc("applyMaterial", [vm](GtsTerrainLodRuntime* self, graphics::Material* material) {
4270 auto terrainLodAssets=table.addClass("GtsTerrainLodAssetPlan",ssq::Class::Ctor<GtsTerrainLodAssetPlan()>());
4277 table.addFunc("planGtsTerrainLodAssets", [vm](GtsTerrainLodAssetPlan* output, const GtsTerrainLodSet* lods,
4282 DiagnosticCode::InvalidArgument, "GTS terrain export output and LOD set are required", "assets",
4288 "ProcgenTerrainSampler", std::function<TerrainSampler*()>([]() -> TerrainSampler* { return nullptr; }), true);
4335 "ProcgenTerrainLayers", std::function<TerrainLayers*()>([]() -> TerrainLayers* { return nullptr; }), true);
4352 "ProcgenTerrainErosionMap", std::function<TerrainErosionMap*()>([]() -> TerrainErosionMap* { return nullptr; }),
4361 "ProcgenTerrainMeshChunk", std::function<TerrainMeshChunk*()>([]() -> TerrainMeshChunk* { return nullptr; }),
4386 terrainMesh.addFunc("getIndex", [](const TerrainMeshChunk* c, int i) { return c ? c->mesh().getIndex(i) : 0; });
4389 "ProcgenCloudField", std::function<CloudField*()>([]() -> CloudField* { return nullptr; }), true);
4402 "ProcgenCloudShadow", std::function<CloudShadow*()>([]() -> CloudShadow* { return nullptr; }), true);
4409 "ProcgenPbrMaterial", std::function<PbrTextureSet*()>([]() -> PbrTextureSet* { return nullptr; }), true);
4420 pbr.addFunc("getRoughnessWidth", [](const PbrTextureSet* s) { return s->roughness->getWidth(); });
4421 pbr.addFunc("getMetallicWidth", [](const PbrTextureSet* s) { return s->metallic->getWidth(); });
4435 vm, Procgen::newParamsHandle(), [](ProcgenParamsHandleRef ref) { return Procgen::release(ref); });
4443 vm, module->newOutputHandle(), [module](ProcgenOutputHandleRef ref) { return module->resolveOutput(ref); },
4480 cls.addFunc("filterHeight", [vm = cls.getHandle()](Procgen* value, PointSet* input, float minimum, float maximum) {
4489 cls.addFunc("filterDensity", [vm = cls.getHandle()](Procgen* value, PointSet* input, float minimum, float maximum) {
4498 cls.addFunc("filterBox", [vm = cls.getHandle()](Procgen* value, PointSet* input, float minX, float minY, float minZ,
4504 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "filterBox requires owned points",
4509 cls.addFunc("excludeBox", [vm = cls.getHandle()](Procgen* value, PointSet* input, float minX, float minY,
4515 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "excludeBox requires owned points",
4517 return makeOwnedPointSetProxy(vm, value->filterBoxHandle(*reference, minX, minY, minZ, maxX, maxY, maxZ, true));
4519 cls.addFunc("filterSlope", [vm = cls.getHandle()](Procgen* value, PointSet* input, float minimum, float maximum) {
4529 "excludeRadius", [vm = cls.getHandle()](Procgen* value, PointSet* input, float x, float z, float radius) {
4539 [vm = cls.getHandle()](Procgen* value, PointSet* input, uint32_t seed, float amountX, float amountZ) {
4546 return makeOwnedPointSetProxy(vm, value->jitterPointsHandle(*reference, seed, amountX, amountZ));
4548 cls.addFunc("poissonDisk", [vm = cls.getHandle()](Procgen* value, int width, int depth, float radius, uint32_t seed,
4551 return makeOwnedPointSetProxy(vm, eve::Result<ProcgenPointSetHandleRef>::failure(eve::Diagnostic::error(
4554 return makeOwnedPointSetProxy(vm, value->poissonDiskHandle(width, depth, radius, seed, maxPoints));
4556 cls.addFunc("mergePoints", [vm = cls.getHandle()](Procgen* value, PointSet* first, PointSet* second) {
4566 cls.addFunc("unionPoints", [vm = cls.getHandle()](Procgen* value, PointSet* first, PointSet* second) {
4576 cls.addFunc("intersectPoints", [vm = cls.getHandle()](Procgen* value, PointSet* first, PointSet* second) {
4582 eve::DiagnosticCode::InvalidArgument, "intersectPoints requires owned point sets", "points", {},
4586 cls.addFunc("differencePoints", [vm = cls.getHandle()](Procgen* value, PointSet* first, PointSet* second) {
4596 cls.addFunc("transformPoints", [vm = cls.getHandle()](Procgen* value, PointSet* input, float x, float y, float z,
4607 cls.addFunc("transformPoints3D", [vm = cls.getHandle()](Procgen* value, PointSet* input, float x, float y, float z,
4617 vm, value->transformPoints3DHandle(*reference, x, y, z, pitch, yaw, roll, scaleX, scaleY, scaleZ));
4619 cls.addFunc("copyPoints", [vm = cls.getHandle()](Procgen* value, PointSet* source, PointSet* targets,
4628 return makeOwnedPointSetProxy(vm, value->copyPointsHandle(*sourceRef, *targetRef, inheritTargetAttributes));
4630 cls.addFunc("remapDensity", [vm = cls.getHandle()](Procgen* value, PointSet* input, float inputMin, float inputMax,
4639 vm, value->remapDensityHandle(*reference, inputMin, inputMax, outputMin, outputMax, clampOutput));
4642 "mathFloatAttribute", [vm = cls.getHandle()](Procgen* value, PointSet* input, const std::string& attribute,
4651 return makeOwnedPointSetProxy(vm, value->mathFloatAttributeHandle(*reference, attribute, outputAttribute,
4654 cls.addFunc("filterFloatAttribute", [vm = cls.getHandle()](Procgen* value, PointSet* input, const std::string& name,
4674 return makeOwnedPointSetProxy(vm, value->filterStringAttributeHandle(*reference, name, expected, invert));
4677 [vm = cls.getHandle()](Procgen* value, PointSet* input, Grid2D* mask, float originX, float originZ,
4691 "densityCull", [vm = cls.getHandle()](Procgen* value, PointSet* input, uint32_t seed, float multiplier) {
4700 cls.addFunc("projectToWorld", [vm = cls.getHandle()](Procgen* value, PointSet* input, float maxY, float minY,
4704 return makeOwnedPointSetProxy(vm, eve::Result<ProcgenPointSetHandleRef>::failure(eve::Diagnostic::error(
4710 value->projectToWorldHandle(*reference, maxY, minY, static_cast<std::uint64_t>(maskBits), keepUnmatched));
4725 cls.addFunc("newHeightmap", [vm = cls.getHandle()](Procgen*, int width, int height) -> ssq::Table {
4737 [vm = cls.getHandle()](Procgen*, const std::string& path, const std::string& format) -> ssq::Table {
4741 [vm = cls.getHandle()](Procgen*, const std::string& bytes, const std::string& format) -> ssq::Table {
4775 [vm = cls.getHandle()](Procgen*, const std::string& algorithm, ScriptProcgenParams* params) -> ssq::Table {
4788 [vm = cls.getHandle()](Procgen*, const std::string& recipe, ScriptProcgenParams* params) -> ssq::Table {
4803 [vm = cls.getHandle()](Procgen*, const std::string& recipe, ScriptProcgenParams* params) -> ssq::Table {
4818 [vm = cls.getHandle()](Procgen*, const std::string& recipe, ScriptProcgenParams* params) -> ssq::Table {
4839 [vm = cls.getHandle()](Procgen*, const std::string& recipe, ScriptProcgenParams* params) -> ssq::Table {
4859 cls.addFunc("generateHeightmap", [vm = cls.getHandle()](Procgen*, ScriptProcgenParams* params) -> ssq::Table {
4879 cls.addFunc("newRuntimeGeneration", [vm = cls.getHandle()](Procgen* value, uint32_t worldSeed) -> ssq::Table {
4888 [value](ProcgenRuntimeGenerationHandleRef ref) { return value->resolveRuntimeGeneration(ref); },
4924 [value](ProcgenMeshModifierGraphHandleRef ref) { return value->resolveMeshModifierGraph(ref); },
4951 cls.addFunc("newMeshDeformationSession", [vm = cls.getHandle()](Procgen* value) -> ssq::Table {
4971 cls.addFunc("newDynamicMeshUvPaintSession", [vm = cls.getHandle()](Procgen* value) -> ssq::Table {
5046 [vm = cls.getHandle()](Procgen* value, float minX, float minY, float minZ, float maxX, float maxY,
5056 cls.addFunc("sphereVolume", [vm = cls.getHandle()](Procgen* value, float x, float y, float z, float radius) {
5058 return makeOwnedSpatialProxy(vm, eve::Result<ProcgenSpatialDataHandleRef>::failure(eve::Diagnostic::error(
5063 cls.addFunc("polygonVolume", [vm = cls.getHandle()](Procgen* value, PointSet* points, float minY, float maxY) {
5075 return makeOwnedSpatialProxy(vm, eve::Result<ProcgenSpatialDataHandleRef>::failure(eve::Diagnostic::error(
5080 cls.addFunc("heightfieldData", [vm = cls.getHandle()](Procgen* value, Heightmap* heightmap, float originX,
5091 cls.addFunc("textureMaskData", [vm = cls.getHandle()](Procgen* value, Heightmap* values, float originX,
5098 eve::DiagnosticCode::InvalidArgument, "textureMaskData requires an owned scalar map", "values",
5101 vm, value->textureMaskDataHandle(*reference, originX, originZ, cellSize, minValue, maxValue, minY, maxY));
5103 cls.addFunc("meshSurfaceData", [vm = cls.getHandle()](Procgen* value, MeshBuild* mesh, float tolerance) {
5112 cls.addFunc("unionSpatial", [vm = cls.getHandle()](Procgen* value, SpatialData* first, SpatialData* second) {
5118 eve::DiagnosticCode::InvalidArgument, "unionSpatial requires owned spatial data", "spatial", {},
5122 cls.addFunc("intersectSpatial", [vm = cls.getHandle()](Procgen* value, SpatialData* first, SpatialData* second) {
5128 eve::DiagnosticCode::InvalidArgument, "intersectSpatial requires owned spatial data", "spatial",
5132 cls.addFunc("differenceSpatial", [vm = cls.getHandle()](Procgen* value, SpatialData* first, SpatialData* second) {
5142 cls.addFunc("sampleSpatial", [vm = cls.getHandle()](Procgen* value, SpatialData* spatial, float spacing,
5150 return makeOwnedPointSetProxy(vm, value->sampleSpatialHandle(*reference, spacing, seed, jitter));
5153 "filterSpatial", [vm = cls.getHandle()](Procgen* value, PointSet* points, SpatialData* spatial, bool invert) {
5161 return makeOwnedPointSetProxy(vm, value->filterSpatialHandle(*pointsRef, *spatialRef, invert));
5163 cls.addFunc("projectToSpatial", [vm = cls.getHandle()](Procgen* value, PointSet* points, SpatialData* spatial) {
5173 cls.addFunc("splineData", [vm = cls.getHandle()](Procgen* value, PointSet* points, float radius) -> ssq::Table {
5194 return makeOwnedPointSetProxy(vm, value->sampleSplineHandle(*reference, spacing, seed, jitter));
5211 cls.addFunc("selfPrune", [vm = cls.getHandle()](Procgen* value, PointSet* input, float radius) -> ssq::Table {
5223 [vm = cls.getHandle()](Procgen* value, const std::string& prefix, ProcgenCellRequest* request, PointSet* points,
5241 std::from_chars(revisionText.data(), revisionText.data() + revisionText.size(), targetRevision);
5252 vm, value->publishCellSnapshot(prefix, *request, *pointsRef, targetRevision, assetAttribute, defaultAsset),
5261 std::from_chars(revisionText.data(), revisionText.data() + revisionText.size(), targetRevision);
5262 if (!value || !request || !delta || error != std::errc{} || end != revisionText.data() + revisionText.size() ||
5268 "publishCellInstanceDelta requires request, delta, and a decimal target revision greater than one",
5272 vm, value->publishCellInstanceDelta(prefix, *request, *delta, targetRevision, assetAttribute, defaultAsset),
5291 cls.addFunc("synchronizeCellInstancesAtomic", [vm = cls.getHandle()](Procgen* value, const std::string& prefix,
5308 value ? value->synchronizeCellInstancesAtomic(prefix, runtimes, requests, assetAttribute, defaultAsset)
5315 [vm = cls.getHandle()](Procgen* value, const std::string& prefix, ProcgenCellRequest* request) {
5323 cls.addFunc("removeCellInstancesAtomic", [vm = cls.getHandle()](Procgen* value, const std::string& prefix,
5337 cls.addFunc("completeCellCleanupAtomic", [vm = cls.getHandle()](Procgen* value, const std::string& prefix,
5355 cls.addFunc("removeInstances", [vm = cls.getHandle()](Procgen* value, const std::string& batchId) {
5374 return projectBorrowedResult(vm, value->generateTextureBorrowed(recipe, params->reference, gfx), "texture");
5390 [vm = cls.getHandle()](Procgen* value, MeshBuild* mesh, graphics::Graphics* gfx) -> ssq::Table {
5414 cls.addFunc("beginSystem", [vm = cls.getHandle()](Procgen*, const std::string& name, uint32_t seed) -> ssq::Table {
5426 cls.addFunc("commitSystem", [vm = cls.getHandle()](Procgen* value, ScriptProcgenContext* context) {
5434 cls.addFunc("abortSystem", [vm = cls.getHandle()](Procgen* value, ScriptProcgenContext* context) {
5493 cls.addFunc("getAlgorithmSchema", [vm = cls.getHandle()](Procgen* value, const std::string& algorithm) {
5521 [vm = cls.getHandle()](Procgen* value, const std::string& algorithm, ScriptProcgenParams* params) {
5527 return eve::script::projectResult(vm, value->applyAlgorithmDefaults(algorithm, params->reference));
5537 return eve::script::projectResult(vm, value->generateTo(algorithm, params->reference, *outputRef));
5564 cls.addFunc("getTextureRecipeSchema", [vm = cls.getHandle()](Procgen* value, const std::string& recipe) {
5575 [vm = cls.getHandle()](Procgen* value, const std::string& recipe, ScriptProcgenParams* params) {
5581 return eve::script::projectResult(vm, value->applyTextureRecipeDefaults(recipe, params->reference));
5586 cls.addFunc("getPbrRecipeSchema", [vm = cls.getHandle()](Procgen* value, const std::string& recipe) {
5590 eve::Result<RecipeDescriptor>::failure(eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument,
5597 [vm = cls.getHandle()](Procgen* value, const std::string& recipe, ScriptProcgenParams* params) {
5603 return eve::script::projectResult(vm, value->applyPbrRecipeDefaults(recipe, params->reference));
5611 eve::Result<GeneratedArtifact>::failure(eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument,
5636 [vm = cls.getHandle()](Procgen* value, const std::string& recipeId, ScriptProcgenParams* params,
5642 eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "procgen module must not be null",
5644 [](ArtifactPublishReceipt&& receipt) { return publishReceiptProjection(std::move(receipt)); });
5652 [](ArtifactPublishReceipt&& receipt) { return publishReceiptProjection(std::move(receipt)); });
5664 [](ArtifactPublishReceipt&& receipt) { return publishReceiptProjection(std::move(receipt)); });
5667 [](ArtifactPublishReceipt&& receipt) { return publishReceiptProjection(std::move(receipt)); });
5694 cls.addFunc("getMeshRecipeSchema", [vm = cls.getHandle()](Procgen* value, const std::string& recipe) {
5698 eve::Result<RecipeDescriptor>::failure(eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument,
5705 [vm = cls.getHandle()](Procgen* value, const std::string& recipe, ScriptProcgenParams* params) {
5711 return eve::script::projectResult(vm, value->applyMeshRecipeDefaults(recipe, params->reference));
std::vector< ClimateData > climate
Current moisture and cloud state per cell.
Definition HexMapGenerator.cpp:397
Optional hexmap terrain bake bindings for Procgen.
The single Squirrel projection for common Result, Status and Value.
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
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
static Status success(StatusCode code=StatusCode::Ok)
Construct a successful status with an explicit non-error outcome.
Definition Status.h:81
In-memory byte buffer implementing eve::Data (ref-counted).
Definition ByteData.h:13
static std::optional< Id128 > parse(std::string_view text) noexcept
Parses canonical UUID text.
Definition Identity.h:151
Definition Graphics.h:125
virtual Shader * newMeshShaderFromSpv(const std::vector< uint32_t > &vertSpv, const std::vector< uint32_t > &fragSpv)=0
Create a Mesh3D custom shader (MeshVertex + Frame UBO + albedo). Empty vert → default mesh3d....
virtual Texture * newTexture(int width, int height, const uint8_t *rgba, bool repeatU=false, bool repeatV=false)=0
Creates a texture. @ownership Caller deletes unless documented otherwise.
virtual Mesh * newMeshFromArrays(const float *posXYZ, const float *nrmXYZ, const float *uvST, int vertexCount, const uint32_t *indices, int indexCount)=0
Upload a triangle mesh from packed CPU arrays. Owned by Graphics. posXYZ required (vertexCount*3)....
virtual Mesh * newMeshFromArraysColored(const float *posXYZ, const float *nrmXYZ, const float *uvST, const float *colorRGBA, int vertexCount, const uint32_t *indices, int indexCount)=0
Upload a triangle mesh with an optional packed RGBA color per vertex.
void setMeshLodCullDistance(float distance)
Set the distance that culls the whole mesh LOD chain; zero disables culling.
Definition Renderable3D.cpp:233
void setPosition(float x, float y, float z)
Definition Renderable3D.cpp:9
void setMeshLod(int index, Mesh *mesh, float switchDistance=0.f)
Configure geometric LOD. index 0 = highest detail. For index > 0, switchDistance is the camera distan...
Definition Renderable3D.cpp:188
GPU texture created via Graphics::newTexture. Owns GPU resources through an opaque backend handle.
Definition Texture.h:18
ECS tile layer entity. Script mutates tile GIDs / tileset / draw; TileRenderSystem batch-draws atlas ...
Definition TileLayer.h:32
Coordinates adapter preparation and atomic CPU-store publication.
Definition ArtifactPublish.h:48
eve::Result< ArtifactPublishReceipt > publish(GeneratedArtifact artifact, ArtifactPublishOptions options)
Publish through required capabilities and then atomically into the store.
Definition ArtifactPublish.cpp:383
void setWorldScale(float worldScale)
Definition CloudField.cpp:69
float coverageAt(float x, float z, float time) const
Cloud coverage at world (x, z) and time t, in [0,1].
Definition CloudField.cpp:86
void setWind(float speed, float angleRad)
Definition CloudField.cpp:73
void setSunDirection(float x, float y, float z)
Definition CloudShadow.cpp:10
float coverageAt(float x, float z, float time) const
Cloud coverage projected onto ground (x, z) at time t, in [0,1].
Definition CloudShadow.cpp:27
float shadowFactorAt(float x, float z, float time) const
Light multiplier in [0,1]: 1 = fully lit, (1-strength) = fully shadowed.
Definition CloudShadow.cpp:34
void setCloudAltitude(float altitude)
Definition CloudShadow.cpp:17
const GeneratorDescriptor * descriptor(const std::string &id) const
Return reflection metadata for an algorithm.
Definition GeneratorRegistry.cpp:37
void registerBuiltins()
Register built-in DTL / custom map algorithms (idempotent).
Definition BuiltinAlgorithms.cpp:226
bool has(const std::string &id) const
Return true when an executable algorithm is registered.
Definition GeneratorRegistry.cpp:23
static GeneratorRegistry & instance()
Return the process-wide generator registry.
Definition GeneratorRegistry.cpp:6
std::vector< std::string > list() const
Return sorted registered algorithm ids.
Definition GeneratorRegistry.cpp:49
Intermediate 2D generation result. cells store semantic ids (see Semantic.h), not tile GIDs — convert...
Definition Grid2D.h:36
void addObject(const std::string &name, const std::string &type, float x, float y, float width, float height, int gid)
Adds object.
Definition Grid2D.cpp:62
void addObjectAt(const std::string &name, const std::string &type, float x, float y)
Script-friendly: name/type + tile coords.
Definition Grid2D.cpp:58
std::string getMeta(const std::string &key, const std::string &defaultValue) const
Returns the meta.
Definition Grid2D.cpp:49
void addAssetObject(const std::string &name, const std::string &role, const std::string &asset, float x, float y, float width, float height, float rotationDegrees, int flags)
Add a placed asset while preserving its semantic role, asset id and orientation.
Definition Grid2D.cpp:75
std::string getMeshName(int index) const
Return an entry mesh name, or empty.
Definition GtsTerrainLod.cpp:234
std::string getObjectName(int index) const
Return an entry object name, or empty.
Definition GtsTerrainLod.cpp:231
std::string getRelativePath(int index) const
Return an entry relative path, or empty.
Definition GtsTerrainLod.cpp:237
int getTileCount() const
Return the number of row-major tile slots, including empty cells.
Definition GtsTerrainLodRuntime.cpp:114
graphics::Renderable3D * getRenderable(int tileIndex) const
Borrow a live tile renderable or return nullptr for empty, stale or invalid slots....
Definition GtsTerrainLodRuntime.cpp:116
std::uint64_t getRevision() const
Return the current committed revision.
Definition GtsTerrainLodRuntime.cpp:115
graphics::Renderable3D * getSourceTerrain() const
Resolve the currently hidden source terrain, or null after source destruction.
Definition GtsTerrainLodRuntime.cpp:92
Owned result of the GTS split-and-sequential-simplify pipeline.
Definition GtsTerrainLod.h:112
float getLevelSwitchDistance(int level, float worldDiameter, float verticalFovDegrees) const
Convert one level's screen-relative threshold to a perspective-camera distance.
Definition GtsTerrainLod.cpp:161
int getTileCount() const
Return the number of tiles, including empty source cells.
Definition GtsTerrainLod.h:119
const GtsTerrainLodTile * tileAt(int index) const
Return one tile or nullptr for an invalid index. @ownership The LOD set retains ownership; the caller...
Definition GtsTerrainLod.cpp:93
int selectLevelForCamera(float distance, float worldDiameter, float verticalFovDegrees) const
Select a level directly from perspective-camera distance and bounds diameter.
Definition GtsTerrainLod.cpp:171
int selectLevel(float relativeHeight) const
Select the active level for a projected screen-relative height.
Definition GtsTerrainLod.cpp:154
int getLevelCount() const
Return the common number of LOD levels per tile.
Definition GtsTerrainLod.h:121
In-memory terrain heightmap: a dense float grid (row-major, index = y * width + x) materialized from ...
Definition Heightmap.h:21
static Heightmap generate(const TerrainSampler &sampler, int width, int height)
Materialize a Heightmap by sampling sampler at every pixel center.
Definition Heightmap.cpp:69
void setBranchRadiusFalloff(float factor)
Set the per-depth radius multiplier.
Definition LSystem.cpp:57
void setLeafSymbols(const std::string &symbols)
Set the set of symbols that emit a leaf marker.
Definition LSystem.cpp:60
void setInitialHeading(float x, float y, float z)
Set the initial heading (normalized).
Definition LSystem.cpp:50
void setTropism(float x, float y, float z)
Bias growth toward a direction (phototropism).
Definition LSystem.cpp:65
void clearRules()
Remove all production rules (the axiom and alphabet remain).
Definition LSystem.cpp:41
void addRule(char symbol, const std::string &production)
Add a deterministic production for one symbol.
Definition LSystem.cpp:26
CPU triangle mesh from procedural mesh recipes (e.g. marching cubes). Positions/normals are xyz-packe...
Definition MeshBuild.h:19
std::string getMeta(const std::string &key, const std::string &defaultValue) const
Returns the meta.
Definition MeshBuild.cpp:246
void setMeta(const std::string &key, const std::string &value)
Sets the meta.
Definition MeshBuild.cpp:244
int setActiveGroup(const std::string &name)
Select/create the named group assigned to subsequently added triangles.
Definition MeshBuild.cpp:53
int getTriangleGroup(int triangleIndex) const
Group index for a triangle (not an index-buffer element), or -1.
Definition MeshBuild.cpp:70
bool appendTransformed(const MeshBuild *other, float tx, float ty, float tz, float yawDegrees, float sx, float sy, float sz)
Append another procedural mesh after an affine transform.
Definition MeshBuild.cpp:125
std::string getGroupName(int groupIndex) const
Group name, or an empty string for an invalid index.
Definition MeshBuild.cpp:65
@ WorldOrigin
static MeshRecipeRegistry & instance()
Access the process-wide mesh recipe registry.
Definition MarchingCubes.cpp:451
const RecipeDescriptor * descriptor(const std::string &id) const
Look up recipe metadata.
Definition MarchingCubes.cpp:482
bool applyToLayer(const Grid2D &grid, const std::string &palette, map::TileLayer *layer, std::string *error) const
Applies to layer.
Definition PaletteMapAdapter.cpp:8
void setGid(const std::string &palette, const std::string &semantic, int gid)
Sets the gid.
Definition Palette.cpp:7
int getGid(const std::string &palette, const std::string &semantic) const
Returns the gid.
Definition Palette.cpp:11
void setSize(int width, int height)
Set the generation dimensions, clamping each non-positive value to one.
Definition Params.cpp:142
bool getBool(const std::string &key, bool defaultValue) const
Read a boolean parameter without parsing text.
Definition Params.cpp:195
void setInt(const std::string &key, int value)
Store an Int64 parameter, preserving its numeric Value kind.
Definition Params.cpp:149
void setBool(const std::string &key, bool value)
Stores a boolean generation parameter.
Definition Params.cpp:167
bool has(const std::string &key) const
Return whether a parameter or one of the three dimensions exists.
Definition Params.cpp:171
float getFloat(const std::string &key, float defaultValue) const
Read a floating parameter with explicit numeric conversion rules.
Definition Params.cpp:188
void setFloat(const std::string &key, float value)
Store a finite or non-finite floating parameter as Value::Double without text conversion.
Definition Params.cpp:165
std::string getString(const std::string &key, const std::string &defaultValue) const
Read only a Value::String parameter; numeric/bool values are not stringified.
Definition Params.cpp:202
int getInt(const std::string &key, int defaultValue) const
Read an integer parameter with explicit numeric conversion rules.
Definition Params.cpp:176
void setString(const std::string &key, const std::string &value)
Store an owning string parameter as Value::String.
Definition Params.cpp:169
const RecipeDescriptor * descriptor(const std::string &id) const
Look up recipe metadata.
Definition PbrMaterial.cpp:58
static PbrRecipeRegistry & instance()
Access the process-wide PBR registry.
Definition PbrMaterial.cpp:27
std::unique_ptr< PbrTextureSet > generate(const std::string &id, const Params ¶ms, std::string &error) const
Generates a PBR map set and transfers its unique ownership to the caller.
Definition PbrMaterial.cpp:48
Owned generic mesh LOD output generated with Pcg's independent-per-level policy.
Definition PcgMeshLod.h:144
bool getAnimateCrossFading() const noexcept
Return whether transitions use injected time.
Definition PcgMeshLod.h:167
const PcgMeshLodRendererState * rendererStateAt(int index) const noexcept
Borrow one generated level's immutable renderer state, or null.
Definition PcgMeshLod.cpp:213
const MeshBuild * meshAt(int index) const noexcept
Borrow a generated mesh, or null for an invalid index. @ownership The set retains ownership....
Definition PcgMeshLod.cpp:210
int getFadeMode() const noexcept
Return Unity LODFadeMode copied from the build profile.
Definition PcgMeshLod.h:165
float getSwitchDistance(int level, float worldDiameter, float verticalFovDegrees) const noexcept
Convert one level threshold to camera distance, or -1 for invalid input.
Definition PcgMeshLod.cpp:223
float getFadeWidth(int index) const noexcept
Return one level's fade width, or -1 for an invalid index.
Definition PcgMeshLod.cpp:202
float getCrossFadeAnimationDuration() const noexcept
Return injected-time transition duration.
Definition PcgMeshLod.h:169
int getLevelCount() const noexcept
Return the number of complete generated levels.
Definition PcgMeshLod.h:147
std::string getAttributeType(int index, const std::string &name) const
Return float, int, bool, vector, string, or empty when the attribute is absent.
Definition PointSet.cpp:453
void setFloatAttribute(int index, const std::string &name, float value)
Compatibility-only unchecked script setter; canonical code uses trySetFloatAttribute.
Definition PointSet.cpp:338
float getBoundsMinX(int index) const
Return the local-space minimum X bound.
Definition PointSet.cpp:213
bool hasVectorAttribute(int index, const std::string &name) const
Test whether vector metadata exists.
Definition PointSet.cpp:417
bool hasStringAttribute(int index, const std::string &name) const
True when string attribute.
Definition PointSet.cpp:437
bool hasIntAttribute(int index, const std::string &name) const
Test whether signed integer metadata exists.
Definition PointSet.cpp:367
bool hasBoolAttribute(int index, const std::string &name) const
Test whether boolean metadata exists.
Definition PointSet.cpp:387
float getFloatAttribute(int index, const std::string &name, float fallback) const
Returns the float attribute.
Definition PointSet.cpp:342
float getBoundsMaxZ(int index) const
Return the local-space maximum Z bound.
Definition PointSet.cpp:233
float getBoundsMaxY(int index) const
Return the local-space maximum Y bound.
Definition PointSet.cpp:229
float getBoundsMaxX(int index) const
Return the local-space maximum X bound.
Definition PointSet.cpp:225
std::string getStringAttribute(int index, const std::string &name, const std::string &fallback) const
Returns the string attribute.
Definition PointSet.cpp:432
void setColor(int index, float red, float green, float blue, float alpha)
Set the normalized linear RGBA point color.
Definition PointSet.cpp:238
float getVectorAttributeY(int index, const std::string &name, float fallback) const
Read the Y component of vector metadata or the caller-provided default.
Definition PointSet.cpp:407
void setIntAttribute(int index, const std::string &name, std::int64_t value)
Compatibility-only unchecked script setter; canonical code uses trySetIntAttribute.
Definition PointSet.cpp:358
float getBoundsMinY(int index) const
Return the local-space minimum Y bound.
Definition PointSet.cpp:217
void setBounds(int index, float minX, float minY, float minZ, float maxX, float maxY, float maxZ)
Set local-space point bounds before scale and rotation are applied.
Definition PointSet.cpp:202
bool hasFloatAttribute(int index, const std::string &name) const
True when float attribute.
Definition PointSet.cpp:347
float getPitch(int index) const
Return the point's local pitch in degrees.
Definition PointSet.cpp:171
void setBoolAttribute(int index, const std::string &name, bool value)
Compatibility-only unchecked script setter; canonical code uses trySetBoolAttribute.
Definition PointSet.cpp:378
float getVectorAttributeZ(int index, const std::string &name, float fallback) const
Read the Z component of vector metadata or the caller-provided default.
Definition PointSet.cpp:412
void setVectorAttribute(int index, const std::string &name, float x, float y, float z)
Compatibility-only unchecked script setter; canonical code uses trySetVectorAttribute.
Definition PointSet.cpp:398
void setSteepness(int index, float steepness)
Set normalized surface steepness metadata in the inclusive range [0, 1].
Definition PointSet.cpp:264
bool getBoolAttribute(int index, const std::string &name, bool fallback) const
Read boolean metadata or return the caller-provided default when absent.
Definition PointSet.cpp:382
void setStringAttribute(int index, const std::string &name, const std::string &value)
Compatibility-only unchecked script setter; canonical code uses trySetStringAttribute.
Definition PointSet.cpp:428
const std::vector< ProcgenPoint > & points() const
Borrow immutable point rows; structural ownership remains with this set.
Definition PointSet.h:212
float getVectorAttributeX(int index, const std::string &name, float fallback) const
Read the X component of vector metadata or the caller-provided default.
Definition PointSet.cpp:402
std::int64_t getIntAttribute(int index, const std::string &name, std::int64_t fallback) const
Read signed integer metadata or return the caller-provided default when absent.
Definition PointSet.cpp:362
float getSteepness(int index) const
Return normalized point steepness metadata.
Definition PointSet.cpp:268
void setRotation(int index, float pitch, float yaw, float roll)
Set the point's local Euler rotation in degrees.
Definition PointSet.cpp:163
float getBoundsMinZ(int index) const
Return the local-space minimum Z bound.
Definition PointSet.cpp:221
void reserve(std::size_t count)
Reserve point storage without changing point or attribute row counts.
Definition PointSet.cpp:60
One immutable runtime-generation cell request returned to script.
Definition RuntimeGeneration.h:17
Staging area for one atomic rebuild of a named procedural system.
Definition ProcgenSystem.h:34
void trace(const std::string &stageName, int inputCount, int outputCount, float milliseconds)
Trace.
Definition ProcgenSystem.cpp:126
bool publish(const std::string &outputName, PointSet *points)
Publish.
Definition ProcgenSystem.cpp:33
bool endTrace(int outputCount)
Finish the most recently started timer and append its measured trace.
Definition ProcgenSystem.cpp:144
PointSet * reuseStage(const std::string &stageName, const std::string &cacheKey)
Reuse stage.
Definition ProcgenSystem.cpp:95
bool beginTrace(const std::string &stageName, int inputCount)
Start an automatically timed diagnostic stage. Timers may be nested.
Definition ProcgenSystem.cpp:131
int getOpenTraceCount() const
Number of automatic timers that have not yet been finished.
Definition ProcgenSystem.cpp:160
bool cacheStage(const std::string &stageName, const std::string &cacheKey, PointSet *points)
Cache stage.
Definition ProcgenSystem.cpp:106
int getTraceOutputCount(int index) const
Returns the trace output count.
Definition ProcgenSystem.cpp:172
float getTraceMilliseconds(int index) const
Returns the trace milliseconds.
Definition ProcgenSystem.cpp:176
bool captureDebug(const std::string &stageName, PointSet *points)
Capture debug.
Definition ProcgenSystem.cpp:66
int getTraceInputCount(int index) const
Returns the trace input count.
Definition ProcgenSystem.cpp:168
std::string getDebugStageName(int index) const
Returns the debug stage name.
Definition ProcgenSystem.cpp:86
int getStageCacheMissCount() const
Returns the stage cache miss count.
Definition ProcgenSystem.cpp:124
PointSet * getDebugStage(const std::string &stageName) const
Returns the debug stage.
Definition ProcgenSystem.cpp:90
PointSet * getOutput(const std::string &outputName) const
Returns the output.
Definition ProcgenSystem.cpp:61
Procedural generation module. Phase A: runtime maps (semantic Grid2D → TileLayer)....
Definition Procgen.h:146
eve::Result< ProcgenPointSetHandleRef > excludeRadiusHandle(ProcgenPointSetHandleRef input, float x, float z, float radius)
Exclude radius handle.
Definition Procgen.cpp:571
eve::Result< void > releaseHeightmap(ProcgenHeightmapHandleRef)
Definition Procgen.cpp:2529
bool erodeTerrainHydraulic(Heightmap *heightmap, int iterations, float rainfall, float evaporation, float capacity, float erosion, float deposition)
Compatibility facade that applies deterministic grid water/sediment erosion.
Definition Procgen.cpp:2578
eve::Result< ProcgenMeshBuildHandleRef > buildMeshHandle(const std::string &recipeId, ProcgenParamsHandleRef params)
CPU mesh (caller owns). Recipes include mesh.marchingcubes, mesh.hexplanet, mesh.castle and the regis...
Definition Procgen.cpp:2283
eve::script::Borrowed< LSystem > resolveLSystem(ProcgenLSystemHandleRef reference) noexcept
Resolve l system.
Definition Procgen.cpp:1432
eve::Result< ProcgenImageHandleRef > generateImageHandle(const std::string &recipeId, ProcgenParamsHandleRef params)
Generate image handle.
Definition Procgen.cpp:1979
std::string getAlgorithmParamDefault(const std::string &algorithmId, int index) const
Schema default encoded as text for lossless dynamic UI transport.
Definition Procgen.cpp:1900
int getPublishedReusedCount(const std::string &batchId) const
Returns the published reused count.
Definition Procgen.cpp:1219
bool erodeTerrainFluvialScaled(Heightmap *heightmap, int iterations, float riverThreshold, float incision, float maxDepth, float bankWidth, float maxBreachDepth, float coordinateScale)
Compatibility facade with explicit raster-to-physical scaling.
Definition Procgen.cpp:2601
eve::Result< ProcgenPointSetHandleRef > getSystemDebugStageHandle(const std::string &name, const std::string &stageName) const
Returns the system debug stage handle.
Definition Procgen.cpp:1653
image::ImageData * generateTerrainDepositionMap(TerrainErosionMap *erosion, float exposure)
Compatibility deposition facade. @ownership Caller owns the returned image.
Definition Procgen.cpp:2925
eve::Result< ProcgenHeightmapHandleRef > newHeightmapHandle(int width, int height)
Empty in-memory heightmap (caller owns).
Definition Procgen.cpp:2509
eve::Result< ProcgenPointSetHandleRef > filterDensityHandle(ProcgenPointSetHandleRef input, float minDensity, float maxDensity)
Filter density handle.
Definition Procgen.cpp:513
int getPublishedRemovedCount(const std::string &batchId) const
Returns the published removed count.
Definition Procgen.cpp:1224
uint64_t getPreviousSystemRevision(const std::string &name) const
Revision number of the snapshot retained for hot-reload comparison.
Definition Procgen.cpp:1681
eve::Result< ProcgenPointSetHandleRef > poissonDiskHandle(int width, int depth, float radius, uint32_t seed, int maxPoints)
Poisson disk handle.
Definition Procgen.cpp:857
eve::Result< RecipeDescriptor > getMeshRecipeSchema(const std::string &recipeId) const
Returns an owning copy of a mesh schema or a diagnostic.
Definition Procgen.cpp:2470
static bool isStale(ProcgenParamsHandleRef reference) noexcept
Reports whether a parameter reference is stale.
Definition Procgen.cpp:417
eve::Result< ProcgenPointSetHandleRef > mergePointsHandle(ProcgenPointSetHandleRef first, ProcgenPointSetHandleRef second)
Merge points handle.
Definition Procgen.cpp:634
int getAlgorithmParamCount(const std::string &algorithmId) const
Number of reflected parameters for one algorithm.
Definition Procgen.cpp:1862
eve::Result< uint64_t > synchronizeCellInstances(const std::string &prefix, const RuntimeGeneration &runtime, const ProcgenCellRequest &request, const std::string &assetAttribute, const std::string &defaultAsset)
Synchronize one active RuntimeGeneration cell to Scene using a delta or recovery snapshot.
Definition Procgen.cpp:1029
eve::Result< void > removeCellInstances(const std::string &prefix, const ProcgenCellRequest &request)
Removes cell instances.
Definition Procgen.cpp:1127
bool isMeshBuildStale(ProcgenMeshBuildHandleRef) const noexcept
True when mesh build stale.
Definition Procgen.cpp:2318
std::string getSystemDebugReport(const std::string &name) const
Returns the system debug report.
Definition Procgen.cpp:1686
eve::Result< ProcgenTerrainSamplerHandleRef > newTerrainSamplerHandle()
Sampling function over continuous map coordinates (caller owns).
Definition Procgen.cpp:2492
eve::script::Borrowed< DynamicMeshUvPaintSession > resolveDynamicMeshUvPaintSession(ProcgenDynamicMeshUvPaintSessionHandleRef reference) noexcept
Resolve dynamic UV paint state for the current synchronous call only.
Definition Procgen.cpp:1407
static eve::script::Borrowed< Params > resolve(ProcgenParamsHandleRef reference) noexcept
Resolves parameters as a non-owning observation.
Definition Procgen.cpp:403
bool isAlgorithmParamAdvanced(const std::string &algorithmId, int index) const
Return true when a parameter should be hidden by compact inspectors.
Definition Procgen.cpp:1930
eve::Result< ProcgenSpatialDataHandleRef > differenceSpatialHandle(ProcgenSpatialDataHandleRef left, ProcgenSpatialDataHandleRef right)
Difference spatial handle.
Definition Procgen.cpp:1330
bool hasTextureRecipe(const std::string &recipeId) const
True when texture recipe.
Definition Procgen.cpp:2108
eve::Result< void > publishInstances(const std::string &batchId, ProcgenPointSetHandleRef points, const std::string &assetAttribute, const std::string &defaultAsset)
Definition Procgen.cpp:923
eve::script::Borrowed< MeshGraph > resolveMeshGraph(ProcgenMeshGraphHandleRef reference) noexcept
Definition Procgen.cpp:1420
eve::Result< ProcgenPointSetHandleRef > filterHeightHandle(ProcgenPointSetHandleRef input, float minHeight, float maxHeight)
Filter height handle.
Definition Procgen.cpp:502
eve::Result< ProcgenSpatialDataHandleRef > unionSpatialHandle(ProcgenSpatialDataHandleRef left, ProcgenSpatialDataHandleRef right)
Union spatial handle.
Definition Procgen.cpp:1309
eve::script::Borrowed< CloudField > resolveCloudField(ProcgenCloudFieldHandleRef) noexcept
Definition Procgen.cpp:2140
std::string getAlgorithmParamLabel(const std::string &algorithmId, int index) const
Human-readable parameter label at an index.
Definition Procgen.cpp:1872
eve::Result< ProcgenPointSetHandleRef > sampleGridHandle(int width, int depth, float spacing, uint32_t seed, float jitter)
Definition Procgen.cpp:492
int getAlgorithmParamChoiceCount(const std::string &algorithmId, int index) const
Number of allowed values for a choice parameter.
Definition Procgen.cpp:1935
float getAlgorithmParamMaximum(const std::string &algorithmId, int index) const
Numeric maximum.
Definition Procgen.cpp:1920
float getAlgorithmParamMinimum(const std::string &algorithmId, int index) const
Numeric minimum.
Definition Procgen.cpp:1915
eve::Result< void > configureGtsTerrainTileLods(const GtsTerrainLodSet &lods, int tileIndex, graphics::Renderable3D &renderable, graphics::Graphics &gfx, float worldDiameter, float verticalFovDegrees, float originX=0.f, float originY=0.f, float originZ=0.f)
Upload and atomically attach one GTS tile's LOD chain to a renderable.
Definition Procgen.cpp:2369
float getAlgorithmParamStep(const std::string &algorithmId, int index) const
Suggested numeric editing step.
Definition Procgen.cpp:1925
graphics::Mesh * generateTerrainRiverMesh(Heightmap *heightmap, TerrainLayers *layers, graphics::Graphics *gfx, int originX, int originY, int cellsX, int cellsY, float cellSize, float heightScale, float minWidth, float maxWidth, float heightOffset)
Compatibility river mesh facade. @lifetime Returned mesh is owned by Graphics.
Definition Procgen.cpp:2727
bool algorithmParamHasMinimum(const std::string &algorithmId, int index) const
Return true when a numeric minimum is declared.
Definition Procgen.cpp:1905
image::ImageData * generateTerrainErosionMap(TerrainErosionMap *erosion, float exposure)
Compatibility erosion facade. @ownership Caller owns the returned image.
Definition Procgen.cpp:2911
data::ByteData * bakeTerrainAsset(Heightmap *heightmap, TerrainLayers *layers, int chunkSize)
Compatibility facade for EVTR baking. @ownership Caller owns the result.
Definition Procgen.cpp:2658
eve::Result< ProcgenPointSetHandleRef > filterStringAttributeHandle(ProcgenPointSetHandleRef input, const std::string &name, const std::string &value, bool invert)
Filter string attribute handle.
Definition Procgen.cpp:770
eve::Result< void > releaseOutput(ProcgenOutputHandleRef reference)
Releases an output specification.
Definition Procgen.cpp:433
eve::Result< RecipeDescriptor > getAlgorithmSchema(const std::string &algorithmId) const
Returns an owning copy of an algorithm schema or a diagnostic.
Definition Procgen.cpp:1844
graphics::Shader * createTerrainWaterShader(graphics::Graphics *gfx)
Compatibility water facade. @lifetime Returned shader is owned by Graphics.
Definition Procgen.cpp:2957
TerrainLayers * analyzeTerrainScaled(Heightmap *heightmap, float riverThreshold, float seaLevel, float latitude, float coordinateScale)
Compatibility facade for scaled analysis. @ownership Caller owns the result.
Definition Procgen.cpp:2642
eve::script::Borrowed< ShapeGrammar > resolveShapeGrammar(ProcgenShapeGrammarHandleRef reference) noexcept
Definition Procgen.cpp:1428
eve::Result< ProcgenRuntimeGenerationHandleRef > newRuntimeGenerationHandle(uint32_t worldSeed)
Creates a runtime generation handle. @ownership Caller deletes unless documented otherwise.
Definition Procgen.cpp:1380
eve::Result< ProcgenPointSetHandleRef > sampleSpatialHandle(ProcgenSpatialDataHandleRef spatial, float spacing, uint32_t seed, float jitter)
Sample spatial handle.
Definition Procgen.cpp:1341
graphics::Mesh * generateTerrainRiverMeshAdvanced(Heightmap *heightmap, TerrainLayers *layers, graphics::Graphics *gfx, int originX, int originY, int cellsX, int cellsY, float cellSize, float heightScale, float minWidth, float maxWidth, float heightOffset, float minSurfaceSlope, float maxSurfaceSlope)
Compatibility slope-banded river facade. @lifetime Returned mesh is owned by Graphics.
Definition Procgen.cpp:2735
eve::Result< ProcgenLSystemHandleRef > newLSystemHandle()
Definition Procgen.cpp:1384
eve::Result< uint64_t > synchronizeCellInstancesAtomic(const std::string &prefix, const std::vector< const RuntimeGeneration * > &runtimes, const std::vector< const ProcgenCellRequest * > &requests, const std::string &assetAttribute, const std::string &defaultAsset)
Synchronize several active runtime cells through one atomic Scene transaction.
Definition Procgen.cpp:1072
bool erodeTerrainThermal(Heightmap *heightmap, int iterations, float talus, float strength)
Compatibility facade that applies mass-conserving thermal erosion in place.
Definition Procgen.cpp:2568
eve::Result< float > cloudCoverageAt(ProcgenCloudFieldHandleRef field, float x, float z, float time)
Cloud coverage at world (x, z) and time using a live field handle.
Definition Procgen.cpp:2168
eve::Result< ProcgenPointSetHandleRef > densityCullHandle(ProcgenPointSetHandleRef input, uint32_t seed, float multiplier)
Density cull handle.
Definition Procgen.cpp:800
image::ImageData * generateTerrainWearMap(TerrainErosionMap *erosion, float exposure)
Compatibility wear facade. @ownership Caller owns the returned image.
Definition Procgen.cpp:2918
bool isPbrMaterialStale(ProcgenPbrMaterialHandleRef) const noexcept
True when pbr material stale.
Definition Procgen.cpp:2237
image::ImageData * generateTerrainAlbedoMap(TerrainMeshChunk *chunk)
Compatibility albedo facade. @ownership Caller owns the returned image.
Definition Procgen.cpp:2818
eve::script::Borrowed< MeshModifierGraph > resolveMeshModifierGraph(ProcgenMeshModifierGraphHandleRef reference) noexcept
Resolve a mesh modifier graph for the current synchronous call only.
Definition Procgen.cpp:1397
void setPaletteGid(const std::string &palette, const std::string &semantic, int gid)
Sets the palette gid.
Definition Procgen.cpp:1811
eve::Result< ProcgenPointSetHandleRef > selfPruneHandle(ProcgenPointSetHandleRef input, float radius)
Self prune handle.
Definition Procgen.cpp:592
std::string getAlgorithmParamKind(const std::string &algorithmId, int index) const
Parameter kind as int, float, bool, string or choice.
Definition Procgen.cpp:1887
eve::Result< ProcgenPointSetHandleRef > filterSplineDistanceHandle(ProcgenPointSetHandleRef input, ProcgenPointSetHandleRef controlPoints, float minDistance, float maxDistance)
Filter spline distance handle.
Definition Procgen.cpp:558
eve::Result< void > applyMeshRecipeDefaults(const std::string &recipeId, ProcgenParamsHandleRef params) const
Fill missing mesh parameters in a module-owned parameter object.
Definition Procgen.cpp:2479
std::string getSystemOutputName(const std::string &name, int index) const
Returns the system output name.
Definition Procgen.cpp:1623
graphics::Mesh * generateTerrainChunkMesh(TerrainMeshChunk *chunk, graphics::Graphics *gfx)
Compatibility upload facade. @lifetime Returned mesh is owned by Graphics.
Definition Procgen.cpp:2716
eve::Result< ProcgenSpatialDataHandleRef > meshSurfaceDataHandle(ProcgenMeshBuildHandleRef mesh, float tolerance)
Mesh surface data handle.
Definition Procgen.cpp:1298
eve::Result< void > applyTextureRecipeDefaults(const std::string &recipeId, ProcgenParamsHandleRef params) const
Fill missing texture parameters in a module-owned parameter object.
Definition Procgen.cpp:2122
eve::Result< void > configurePcgMeshLods(const PcgMeshLodSet &lods, graphics::Renderable3D &renderable, graphics::Graphics &gfx, float worldDiameter, float verticalFovDegrees)
Upload and atomically attach one generic Pcg mesh LOD chain.
Definition Procgen.cpp:2389
eve::Result< ProcgenOutputHandleRef > newOutputHandle()
Allocates an owning output specification.
Definition Procgen.cpp:423
eve::Result< uint64_t > completeCellCleanupAtomic(const std::string &prefix, const std::vector< RuntimeGeneration * > &runtimes, const std::vector< const ProcgenCellRequest * > &requests)
Atomically remove Scene batches and acknowledge their cleanup tickets across schedulers.
Definition Procgen.cpp:1160
eve::Result< uint64_t > publishCellSnapshot(const std::string &prefix, const ProcgenCellRequest &request, ProcgenPointSetHandleRef points, uint64_t targetRevision, const std::string &assetAttribute, const std::string &defaultAsset)
Replace a Scene cell batch from a complete RuntimeGeneration snapshot at an explicit revision.
Definition Procgen.cpp:969
eve::Result< GeneratedArtifact > buildArtifact(const std::string &recipeId, ProcgenParamsHandleRef params, ArtifactId id)
Build an owning backend-neutral CPU artifact for a mesh recipe.
Definition Procgen.cpp:2322
eve::script::Borrowed< PbrTextureSet > resolvePbrMaterial(ProcgenPbrMaterialHandleRef) noexcept
Resolve pbr material.
Definition Procgen.cpp:2229
TerrainLayers * analyzeTerrain(Heightmap *heightmap, float riverThreshold, float seaLevel, float latitude)
Compatibility facade for terrain analysis. @ownership Caller owns the result.
Definition Procgen.cpp:2638
eve::Result< ProcgenSpatialDataHandleRef > splineDataHandle(ProcgenPointSetHandleRef controlPoints, float radius)
Spline data handle.
Definition Procgen.cpp:1261
eve::Result< ProcgenPointSetHandleRef > sampleSplineHandle(ProcgenPointSetHandleRef controlPoints, float spacing, uint32_t seed, float lateralJitter)
Sample spline handle.
Definition Procgen.cpp:619
bool heightmapToGrid(Heightmap *heightmap, Params *params, Grid2D *out)
Compatibility facade that classifies a heightmap into a semantic Grid2D.
eve::Result< void > applyAlgorithmDefaults(const std::string &algorithmId, ProcgenParamsHandleRef params) const
Fill missing algorithm-specific values from schema defaults.
Definition Procgen.cpp:1946
eve::Result< std::string > gridToJson(ProcgenGridHandleRef grid) const
Grid to json.
Definition Procgen.cpp:1971
eve::Result< ProcgenNormalImageHandleRef > generateNormalImageHandle(const std::string &recipeId, ProcgenParamsHandleRef params)
Definition Procgen.cpp:2015
eve::Result< ProcgenPointSetHandleRef > filterSpatialHandle(ProcgenPointSetHandleRef input, ProcgenSpatialDataHandleRef spatial, bool invert)
Filter spatial handle.
Definition Procgen.cpp:1351
image::ImageData * generateTerrainSplatMap(TerrainMeshChunk *chunk)
Compatibility splat facade. @ownership Caller owns the returned image.
Definition Procgen.cpp:2788
eve::script::Borrowed< RuntimeGeneration > resolveRuntimeGeneration(ProcgenRuntimeGenerationHandleRef reference) noexcept
Definition Procgen.cpp:1388
eve::Result< ProcgenPointSetHandleRef > unionPointsHandle(ProcgenPointSetHandleRef first, ProcgenPointSetHandleRef second)
Union points handle.
Definition Procgen.cpp:644
eve::Result< void > releaseMeshBuild(ProcgenMeshBuildHandleRef)
Release mesh build.
Definition Procgen.cpp:2314
eve::Result< RecipeDescriptor > getPbrRecipeSchema(const std::string &recipeId) const
Returns an owning copy of a PBR schema or a diagnostic.
Definition Procgen.cpp:2261
eve::Result< ProcgenCloudFieldHandleRef > newCloudFieldHandle()
New deterministic, tiling, time-animated cloud field (caller owns).
Definition Procgen.cpp:2136
eve::script::Borrowed< GridGraph > resolveGridGraph(ProcgenGridGraphHandleRef reference) noexcept
Definition Procgen.cpp:1416
eve::Result< void > releasePbrMaterial(ProcgenPbrMaterialHandleRef)
Release pbr material.
Definition Procgen.cpp:2233
eve::Result< uint64_t > publishCellInstanceDelta(const std::string &prefix, const ProcgenCellRequest &request, const PointDelta &delta, uint64_t targetRevision, const std::string &assetAttribute, const std::string &defaultAsset)
Project one committed point delta into an existing Scene cell batch atomically.
Definition Procgen.cpp:989
TerrainErosionMap * erodeTerrainFluvialDetailed(Heightmap *heightmap, int iterations, float riverThreshold, float incision, float maxDepth, float bankWidth, float maxBreachDepth, float coordinateScale)
Compatibility facade for detailed erosion. @ownership Caller owns the result.
Definition Procgen.cpp:2617
eve::Result< ProcgenPointSetHandleRef > getSystemOutputHandle(const std::string &name, const std::string &outputName) const
Returns the system output handle.
Definition Procgen.cpp:1640
eve::script::Borrowed< MeshBuild > resolveMeshBuild(ProcgenMeshBuildHandleRef) noexcept
Resolve mesh build.
Definition Procgen.cpp:2310
int getPublishedCreatedCount(const std::string &batchId) const
Returns the published created count.
Definition Procgen.cpp:1214
std::string getAlgorithmParamChoice(const std::string &algorithmId, int paramIndex, int choiceIndex) const
Choice value at an index.
Definition Procgen.cpp:1940
eve::Result< ProcgenPointSetHandleRef > filterSlopeHandle(ProcgenPointSetHandleRef input, float minDegrees, float maxDegrees)
Filter slope handle.
Definition Procgen.cpp:536
bool isCloudFieldStale(ProcgenCloudFieldHandleRef) const noexcept
Definition Procgen.cpp:2148
bool isTerrainSamplerStale(ProcgenTerrainSamplerHandleRef) const noexcept
Definition Procgen.cpp:2505
eve::Result< void > releaseCloudField(ProcgenCloudFieldHandleRef)
Definition Procgen.cpp:2144
eve::Result< ProcgenPointSetHandleRef > transformPointsHandle(ProcgenPointSetHandleRef input, float translateX, float translateY, float translateZ, float yawDegrees, float scaleX, float scaleY, float scaleZ)
Transform points handle.
Definition Procgen.cpp:677
eve::Result< ProcgenPointSetHandleRef > filterPolygonHandle(ProcgenPointSetHandleRef input, ProcgenPointSetHandleRef polygon, bool invert=false)
Filter polygon handle.
Definition Procgen.cpp:547
eve::Result< ProcgenPbrMaterialHandleRef > generatePbrMaterialHandle(const std::string &recipeId, ProcgenParamsHandleRef params)
Full metallic-roughness PBR set (albedo/normal/roughness/metallic/height/ao) derived from a single di...
Definition Procgen.cpp:2212
eve::Result< ProcgenPointSetHandleRef > copyPointsHandle(ProcgenPointSetHandleRef source, ProcgenPointSetHandleRef targets, bool inheritTargetAttributes)
Copies points handle.
Definition Procgen.cpp:706
eve::Result< void > removeInstances(const std::string &batchId)
Removes instances.
Definition Procgen.cpp:943
eve::Result< void > abortSystem(ProcgenContextHandleRef context)
Definition Procgen.cpp:1583
eve::Result< void > autotileGrid(ProcgenGridHandleRef grid)
Post-process a generated grid: fill each wall cell's detail with an 8-bit neighbour mask (autotile di...
Definition Procgen.cpp:1958
eve::script::Borrowed< PointSet > resolvePointSet(ProcgenPointSetHandleRef reference) noexcept
Resolves a point set as a borrowed view.
Definition Procgen.cpp:480
uint64_t getSystemRevision(const std::string &name) const
Returns the system revision.
Definition Procgen.cpp:1603
eve::Result< ProcgenSpatialDataHandleRef > intersectSpatialHandle(ProcgenSpatialDataHandleRef left, ProcgenSpatialDataHandleRef right)
Intersect spatial handle.
Definition Procgen.cpp:1319
static eve::Result< ProcgenContextHandleRef > beginCachedSystemHandle(const std::string &name, uint32_t seed, const std::string &buildKey)
Starts a cached module-owned rebuild context and returns its handle.
Definition Procgen.cpp:1497
bool hasPbrRecipe(const std::string &recipeId) const
True when pbr recipe.
Definition Procgen.cpp:2256
eve::Result< ProcgenCloudShadowHandleRef > newCloudShadowHandle()
New sun projection over a cloud field → ground shadows (caller owns).
Definition Procgen.cpp:2152
eve::Result< ProcgenSpatialDataHandleRef > boxVolumeHandle(float minX, float minY, float minZ, float maxX, float maxY, float maxZ)
Box volume handle.
Definition Procgen.cpp:1237
eve::Result< ProcgenHeightmapHandleRef > generateHeightmapHandle(ProcgenParamsHandleRef params)
Generate heightmap handle.
Definition Procgen.cpp:2537
eve::Result< ProcgenPointSetHandleRef > getPreviousSystemDebugStageHandle(const std::string &name, const std::string &stageName) const
Returns the previous system debug stage handle.
Definition Procgen.cpp:1666
eve::Result< ProcgenPointSetHandleRef > excludeGridMaskHandle(ProcgenPointSetHandleRef input, ProcgenGridHandleRef mask, float originX, float originZ, float cellSize, int semantic, float clearance, int maximumChecks)
Filter owned points against an owned semantic grid mask with a bounded clearance search.
Definition Procgen.cpp:782
eve::Result< ProcgenHeightmapHandleRef > adoptHeightmap(Heightmap heightmap)
Take ownership of a decoded height field so script can sample it.
Definition Procgen.cpp:2517
std::string getAlgorithmParamKey(const std::string &algorithmId, int index) const
Stable parameter key at an index.
Definition Procgen.cpp:1867
uint32_t getSystemSeed(const std::string &name) const
Returns the system seed.
Definition Procgen.cpp:1608
eve::Result< void > commitSystem(ProcgenContextHandleRef context)
Definition Procgen.cpp:1540
bool isPointSetStale(ProcgenPointSetHandleRef reference) const noexcept
Reports whether a point-set handle is stale.
Definition Procgen.cpp:488
bool hasAlgorithm(const std::string &algorithmId) const
True when algorithm.
Definition Procgen.cpp:1840
eve::script::Borrowed< graphics::Texture > generateTextureBorrowed(const std::string &recipeId, ProcgenParamsHandleRef params, graphics::Graphics *gfx)
Uploads a generated recipe to Graphics and returns a borrowed texture.
Definition Procgen.cpp:2072
eve::Result< ProcgenPointSetHandleRef > projectToWorldHandle(ProcgenPointSetHandleRef input, float maxY, float minY, std::uint64_t maskBits, bool keepUnmatched)
Project points through the optional world-query capability.
Definition Procgen.cpp:809
eve::Result< void > releasePointSet(ProcgenPointSetHandleRef reference)
Releases a point-set intermediate.
Definition Procgen.cpp:484
int getPaletteGid(const std::string &palette, const std::string &semantic) const
Returns the palette gid.
Definition Procgen.cpp:1815
eve::Result< ProcgenPointSetHandleRef > newPointSetHandle()
Allocates a point-set intermediate and returns its owner handle.
Definition Procgen.cpp:476
std::string getSystemDebugDiffReport(const std::string &name) const
Human-readable point-count changes between the current and previous commits.
Definition Procgen.cpp:1707
bool algorithmParamHasMaximum(const std::string &algorithmId, int index) const
Return true when a numeric maximum is declared.
Definition Procgen.cpp:1910
eve::Result< ProcgenSpatialDataHandleRef > sphereVolumeHandle(float x, float y, float z, float radius)
Sphere volume handle.
Definition Procgen.cpp:1242
eve::Result< ProcgenPointSetHandleRef > intersectPointsHandle(ProcgenPointSetHandleRef first, ProcgenPointSetHandleRef second)
Intersect points handle.
Definition Procgen.cpp:655
eve::Result< ProcgenPointSetHandleRef > jitterPointsHandle(ProcgenPointSetHandleRef input, uint32_t seed, float amountX, float amountZ)
Jitter points handle.
Definition Procgen.cpp:581
eve::Result< ArtifactPublishReceipt > publishArtifact(const std::string &recipeId, ProcgenParamsHandleRef params, ArtifactId id, ArtifactPublishOptions options={})
Build then transactionally publish through requested optional adapters.
Definition Procgen.cpp:2332
int getSystemOutputCount(const std::string &name) const
Returns the system output count.
Definition Procgen.cpp:1618
eve::Result< ProcgenSpatialDataHandleRef > textureMaskDataHandle(ProcgenHeightmapHandleRef values, float originX, float originZ, float cellSize, float minValue, float maxValue, float minY, float maxY)
Texture mask data handle.
Definition Procgen.cpp:1285
eve::script::Borrowed< CloudShadow > resolveCloudShadow(ProcgenCloudShadowHandleRef) noexcept
Definition Procgen.cpp:2156
eve::Result< void > releaseTerrainSampler(ProcgenTerrainSamplerHandleRef)
Definition Procgen.cpp:2501
eve::Result< uint64_t > removeCellInstancesAtomic(const std::string &prefix, const std::vector< const ProcgenCellRequest * > &requests)
Atomically remove the Scene batches identified by several cleanup requests.
Definition Procgen.cpp:1136
eve::script::Borrowed< PointGraph > resolvePointGraph(ProcgenPointGraphHandleRef reference) noexcept
Resolve point graph.
Definition Procgen.cpp:1393
std::string getAlgorithmParamDescription(const std::string &algorithmId, int index) const
Parameter help text at an index.
Definition Procgen.cpp:1877
eve::script::Borrowed< Heightmap > resolveHeightmap(ProcgenHeightmapHandleRef) noexcept
Definition Procgen.cpp:2525
std::string getSystemBuildKey(const std::string &name) const
Returns the system build key.
Definition Procgen.cpp:1613
int getPublishedInstanceCount(const std::string &batchId) const
Returns the published instance count.
Definition Procgen.cpp:1209
eve::script::Borrowed< TerrainSampler > resolveTerrainSampler(ProcgenTerrainSamplerHandleRef) noexcept
Definition Procgen.cpp:2496
eve::Result< ProcgenPointSetHandleRef > differencePointsHandle(ProcgenPointSetHandleRef first, ProcgenPointSetHandleRef second)
Difference points handle.
Definition Procgen.cpp:666
eve::Result< ProcgenSpatialDataHandleRef > pointDataHandle(ProcgenPointSetHandleRef points)
Point data handle.
Definition Procgen.cpp:1229
std::string getAlgorithmParamCategory(const std::string &algorithmId, int index) const
Parameter group at an index.
Definition Procgen.cpp:1882
static eve::Result< ProcgenContextHandleRef > beginSystemHandle(const std::string &name, uint32_t seed)
Starts a module-owned rebuild context and returns its handle.
Definition Procgen.cpp:1482
eve::Result< void > publishCellInstances(const std::string &prefix, const ProcgenCellRequest &request, ProcgenPointSetHandleRef points, const std::string &assetAttribute, const std::string &defaultAsset)
Publish cell instances.
Definition Procgen.cpp:957
eve::Result< ProcgenPointSetHandleRef > remapDensityHandle(ProcgenPointSetHandleRef input, float inputMin, float inputMax, float outputMin, float outputMax, bool clampOutput)
Remap density handle.
Definition Procgen.cpp:718
eve::Result< void > generateTo(const std::string &algorithmId, ProcgenParamsHandleRef params, ProcgenOutputHandleRef output)
Generate to.
Definition Procgen.cpp:1755
eve::Result< ProcgenPointSetHandleRef > transformPoints3DHandle(ProcgenPointSetHandleRef input, float translateX, float translateY, float translateZ, float pitchDegrees, float yawDegrees, float rollDegrees, float scaleX, float scaleY, float scaleZ)
Transform points 3 d handle.
Definition Procgen.cpp:691
int getSystemDebugStageCount(const std::string &name) const
Returns the system debug stage count.
Definition Procgen.cpp:1629
eve::Result< void > sampleCloud(ProcgenCloudFieldHandleRef field, std::span< float > out, int w, int h, float time, float x0, float z0, float extent)
Samples coverage into a caller-owned buffer after validating its size.
Definition Procgen.cpp:2184
eve::Result< ProcgenPointSetHandleRef > projectToSpatialHandle(ProcgenPointSetHandleRef input, ProcgenSpatialDataHandleRef spatial)
Project to spatial handle.
Definition Procgen.cpp:1361
eve::script::Borrowed< MeshDeformationSession > resolveMeshDeformationSession(ProcgenMeshDeformationSessionHandleRef reference) noexcept
Resolve a mesh deformation session for the current synchronous call only.
Definition Procgen.cpp:1402
eve::Result< RecipeDescriptor > getTextureRecipeSchema(const std::string &recipeId) const
Returns an owning copy of a texture schema or a diagnostic.
Definition Procgen.cpp:2113
eve::Result< float > cloudShadowFactor(ProcgenCloudShadowHandleRef shadow, float x, float z, float time)
Light multiplier in [0,1] using a live shadow handle.
Definition Procgen.cpp:2176
eve::script::Borrowed< SpatialData > resolveSpatialData(ProcgenSpatialDataHandleRef reference) noexcept
Definition Procgen.cpp:1372
eve::Result< ProcgenSpatialDataHandleRef > heightfieldDataHandle(ProcgenHeightmapHandleRef heightmap, float originX, float originZ, float cellSize, float heightScale)
Heightfield data handle.
Definition Procgen.cpp:1272
bool hasMeshRecipe(const std::string &recipeId) const
True when mesh recipe.
Definition Procgen.cpp:2465
eve::Result< void > releaseCloudShadow(ProcgenCloudShadowHandleRef)
Definition Procgen.cpp:2160
eve::Result< ProcgenPointSetHandleRef > projectToHeightmapHandle(ProcgenPointSetHandleRef input, ProcgenHeightmapHandleRef heightmap, float originX, float originZ, float cellSize, float heightScale)
Project to heightmap handle.
Definition Procgen.cpp:601
int selectTerrainLod(Heightmap *heightmap, int originX, int originY, int cellsX, int cellsY, int maxLod, float cellSize, float heightScale, float cameraDistance, float viewportHeight, float verticalFovDegrees, float targetPixelError)
Select terrain LOD from measured screen-space geometric error.
Definition Procgen.cpp:2695
eve::Result< ProcgenPointSetHandleRef > mathFloatAttributeHandle(ProcgenPointSetHandleRef input, const std::string &attribute, const std::string &outputAttribute, const std::string &operation, float operand, float defaultValue)
Math float attribute handle.
Definition Procgen.cpp:735
bool erodeTerrainFluvialAdvanced(Heightmap *heightmap, int iterations, float riverThreshold, float incision, float maxDepth, float bankWidth, float maxBreachDepth)
Compatibility facade with independent incision and spill-sill limits.
Definition Procgen.cpp:2595
bool hasSystem(const std::string &name) const
Definition Procgen.cpp:1601
TerrainMeshChunk * buildTerrainChunk(Heightmap *heightmap, TerrainLayers *layers, int originX, int originY, int cellsX, int cellsY, int lod, float cellSize, float heightScale, float skirtDepth)
Compatibility facade for LOD chunks. @ownership Caller owns the result.
Definition Procgen.cpp:2670
graphics::Mesh * generateTerrainLakeMesh(Heightmap *heightmap, TerrainLayers *layers, graphics::Graphics *gfx, int originX, int originY, int cellsX, int cellsY, float cellSize, float heightScale, float minimumDepth, float heightOffset)
Compatibility lake mesh facade. @lifetime Returned mesh is owned by Graphics.
Definition Procgen.cpp:2764
eve::Result< void > sampleCloudShadow(ProcgenCloudShadowHandleRef shadow, std::span< float > out, int w, int h, float time, float x0, float z0, float extent)
Samples shadow coverage into a caller-owned buffer after validating its size.
Definition Procgen.cpp:2198
std::string getSystemDebugStageName(const std::string &name, int index) const
Returns the system debug stage name.
Definition Procgen.cpp:1634
eve::script::Borrowed< SplinePath > resolveSplinePath(ProcgenSplinePathHandleRef reference) noexcept
Resolve a spline path for the current synchronous call only.
Definition Procgen.cpp:1412
eve::script::Borrowed< graphics::Mesh > generateMeshBorrowed(const std::string &recipeId, ProcgenParamsHandleRef params, graphics::Graphics *gfx)
Build + upload to GPU Mesh (owned by Graphics).
Definition Procgen.cpp:2348
bool isHeightmapStale(ProcgenHeightmapHandleRef) const noexcept
Definition Procgen.cpp:2533
static eve::Result< ProcgenParamsHandleRef > newParamsHandle()
Allocates module-owned generation parameters.
Definition Procgen.cpp:398
eve::Result< ProcgenSpatialDataHandleRef > polygonVolumeHandle(ProcgenPointSetHandleRef controlPoints, float minY, float maxY)
Polygon volume handle.
Definition Procgen.cpp:1250
static eve::Result< void > release(ProcgenParamsHandleRef reference)
Releases module-owned parameters.
Definition Procgen.cpp:409
eve::script::Borrowed< OutputSpec > resolveOutput(ProcgenOutputHandleRef reference) noexcept
Resolves an output specification as a borrowed view.
Definition Procgen.cpp:428
bool isOutputStale(ProcgenOutputHandleRef reference) const noexcept
Reports whether an output specification reference is stale.
Definition Procgen.cpp:441
eve::Result< void > applyPbrRecipeDefaults(const std::string &recipeId, ProcgenParamsHandleRef params) const
Fill missing PBR parameters in a module-owned parameter object.
Definition Procgen.cpp:2270
uint32_t deriveSeed(uint32_t parent, const std::string &scope) const
Derive seed.
Definition Procgen.cpp:1478
bool isCloudShadowStale(ProcgenCloudShadowHandleRef) const noexcept
Definition Procgen.cpp:2164
eve::Result< ProcgenPointSetHandleRef > filterFloatAttributeHandle(ProcgenPointSetHandleRef input, const std::string &name, float minValue, float maxValue, bool invert)
Filter float attribute handle.
Definition Procgen.cpp:758
std::string getTextureRecipeId(int index) const
Returns the texture recipe id.
Definition Procgen.cpp:2099
eve::Result< ProcgenPointSetHandleRef > filterBoxHandle(ProcgenPointSetHandleRef input, float minX, float minY, float minZ, float maxX, float maxY, float maxZ, bool invert=false)
Filter box handle.
Definition Procgen.cpp:524
bool erodeTerrainFluvial(Heightmap *heightmap, int iterations, float riverThreshold, float incision, float maxDepth, float bankWidth)
Compatibility facade that cuts drainage-connected river valleys in place.
Definition Procgen.cpp:2589
eve::Result< void > applyToLayer(ProcgenGridHandleRef grid, const std::string &palette, map::TileLayer &layer)
Applies to layer.
Definition Procgen.cpp:1800
static eve::Result< ProcgenGridHandleRef > newGridHandle(int width, int height)
Allocates module-owned grid storage and returns its handle.
Definition Procgen.cpp:445
graphics::Shader * createTerrainMaterialShader(graphics::Graphics *gfx)
Compatibility material facade. @lifetime Returned shader is owned by Graphics.
Definition Procgen.cpp:2932
std::string getAlgorithmDisplayName(const std::string &algorithmId) const
Human-readable algorithm label from its schema.
Definition Procgen.cpp:1852
eve::script::Borrowed< BiomeRules > resolveBiomeRules(ProcgenBiomeRulesHandleRef reference) noexcept
Definition Procgen.cpp:1424
std::string getAlgorithmCategory(const std::string &algorithmId) const
Algorithm category from its schema.
Definition Procgen.cpp:1857
eve::Result< void > removeSystem(const std::string &name)
Definition Procgen.cpp:1593
eve::Result< ProcgenGridHandleRef > generateHandle(const std::string &algorithmId, ProcgenParamsHandleRef params)
Generate handle.
Definition Procgen.cpp:1741
eve::script::Borrowed< graphics::Mesh > uploadMeshBorrowed(const MeshBuild &mesh, graphics::Graphics &gfx)
Upload an existing/composed CPU mesh to Graphics.
Definition Procgen.cpp:2360
View-driven partition and hierarchical procedural generation scheduler.
Definition RuntimeGeneration.h:115
static SpatialData meshSurface(const MeshBuild &mesh, float tolerance)
Create a queryable triangle surface from CPU mesh data.
Definition SpatialData.cpp:247
static SpatialData spline(const PointSet &controlPoints, float radius)
Create a polyline domain with a radial influence width.
Definition SpatialData.cpp:186
static SpatialData unite(const SpatialData &a, const SpatialData &b)
Create the union of two domains.
Definition SpatialData.cpp:270
static SpatialData fromPoints(const PointSet &points)
Create spatial data whose domain is the bounds of attributed points.
Definition SpatialData.cpp:132
static SpatialData box(float minX, float minY, float minZ, float maxX, float maxY, float maxZ)
Create an axis-aligned volume; unordered endpoints are normalized.
Definition SpatialData.cpp:152
static SpatialData textureMask(const Heightmap &values, float originX, float originZ, float cellSize, float minValue, float maxValue, float minY, float maxY)
Create an extruded spatial mask from scalar texture data.
Definition SpatialData.cpp:226
static SpatialData subtract(const SpatialData &a, const SpatialData &b)
Create the part of a outside b.
Definition SpatialData.cpp:288
static SpatialData sphere(float x, float y, float z, float radius)
Create a spherical volume. A non-positive radius produces an empty domain.
Definition SpatialData.cpp:165
bool contains(float x, float y, float z) const
Whether this domain contains a world-space position.
Definition SpatialData.cpp:314
std::string getKind() const
Stable textual kind used by scripts and diagnostics.
Definition SpatialData.cpp:297
static SpatialData polygon(const PointSet &controlPoints, float minY, float maxY)
Create an XZ polygon prism between two world-space heights.
Definition SpatialData.cpp:177
static SpatialData intersect(const SpatialData &a, const SpatialData &b)
Create the intersection of two domains.
Definition SpatialData.cpp:279
static SpatialData heightfield(const Heightmap &heightmap, float originX, float originZ, float cellSize, float heightScale)
Create a sampled heightfield surface in world space.
Definition SpatialData.cpp:200
static bool bake(const Heightmap &heightmap, const HydrologyMap &hydrology, const ClimateMap &climate, int chunkSize, std::vector< uint8_t > &out, std::string *error=nullptr)
Compatibility operation that bakes all terrain layers into EVTR.
Definition TerrainAsset.cpp:96
static bool build(const Heightmap &heightmap, const TerrainLayers &layers, const TerrainLakeMeshSettings &settings, MeshBuild &out, std::string *error=nullptr)
Compatibility operation that builds lake surface geometry.
Definition TerrainMesh.cpp:478
Script-friendly ownership wrapper for baked hydrology and climate layers.
Definition TerrainPipeline.h:77
int getStreamOrder(int x, int y) const
Return Strahler river order, or zero outside the river network.
Definition TerrainPipeline.cpp:118
bool isLake(int x, int y, float minimumDepth=0.001f) const
Return whether the cell belongs to a resolved closed-basin lake.
Definition TerrainPipeline.cpp:126
int getFlowDirection(int x, int y) const
Return the D8 receiver direction for one cell, or -1 at an outlet/out of bounds.
Definition TerrainPipeline.cpp:99
float getFlowAccumulation(int x, int y) const
Returns the flow accumulation.
Definition TerrainPipeline.cpp:96
float getFlowVectorY(int x, int y) const
Return the continuous normalized downslope Y component.
Definition TerrainPipeline.cpp:109
std::string getBiomeName(int x, int y) const
Returns the biome name.
Definition TerrainPipeline.cpp:138
float getLakeDepth(int x, int y) const
Return filled-depression water depth, or zero outside a lake.
Definition TerrainPipeline.cpp:122
float getFlowVectorX(int x, int y) const
Return the continuous normalized downslope X component.
Definition TerrainPipeline.cpp:103
static int select(const Heightmap &heightmap, TerrainMeshSettings settings, int maxLod, float distance, float viewportHeight, float verticalFovDegrees, float targetPixelError)
Select the coarsest LOD whose projected geometric error is within budget.
Definition TerrainMesh.cpp:202
static bool build(const Heightmap &heightmap, const TerrainLayers *layers, const TerrainMeshSettings &settings, TerrainMeshChunk &out, std::string *error=nullptr)
Compatibility operation that builds a terrain mesh chunk.
Definition TerrainMesh.cpp:105
One renderable heightfield chunk plus four ecological material weights.
Definition TerrainMesh.h:27
int getBiome(int vertex) const
Return the biome id stored for one mesh vertex, or -1 when out of range.
Definition TerrainMesh.cpp:100
float getMaterialWeight(int vertex, int channel) const
Returns the material weight.
Definition TerrainMesh.cpp:95
static TerrainErosionMap erodeFluvialDetailed(Heightmap &heightmap, const FluvialErosionSettings &settings={})
Cut river valleys and return wear, deposition, and net-change diagnostic layers.
Definition TerrainPipeline.cpp:223
static void erodeHydraulic(Heightmap &heightmap, const HydraulicErosionSettings &settings={})
Grid-based water/sediment simulation that carves channels and deposits sediment.
Definition TerrainPipeline.cpp:179
static HydrologyMap buildHydrology(const Heightmap &heightmap, float riverThreshold=0.025f, float seaLevel=0.25f, float coordinateScale=1.f, bool classifyLakes=true)
Compute D8 drainage, upstream contributing area, and a thresholded river mask.
Definition TerrainPipeline.cpp:671
static ClimateMap buildClimate(const Heightmap &heightmap, const HydrologyMap &hydrology, float seaLevel=0.25f, float latitude=0.35f, float coordinateScale=1.f)
Derive temperature, moisture, and biome layers from terrain and hydrology.
Definition TerrainPipeline.cpp:962
static void erodeThermal(Heightmap &heightmap, const ThermalErosionSettings &settings={})
Relax slopes exceeding the configured talus angle while conserving mass.
Definition TerrainPipeline.cpp:146
static void erodeFluvial(Heightmap &heightmap, const FluvialErosionSettings &settings={})
Cut branching river valleys using depression-free drainage and stream power.
Definition TerrainPipeline.cpp:219
static bool build(const Heightmap &heightmap, const TerrainLayers &layers, const TerrainRiverMeshSettings &settings, MeshBuild &out, std::string *error=nullptr)
Compatibility operation that builds river surface geometry.
Definition TerrainMesh.cpp:223
Deterministic terrain height sampling (Red Blob Games / Perlin fBm recipe).
Definition TerrainSampler.h:29
float sampleTile(int tileX, int tileY) const
Height at the center of map tile (tileX, tileY).
Definition TerrainSampler.cpp:120
void setClamp(bool enabled, float minHeight, float maxHeight)
Sets the clamp.
Definition TerrainSampler.cpp:48
void setScale(float scale)
Cycles per world unit (alias of frequency). Default 1/32.
Definition TerrainSampler.cpp:12
void setCoastSoftness(float softness)
Shore width of the land mask smoothstep. Smaller = cleaner, harder coast.
Definition TerrainSampler.cpp:36
void setWavelength(float wavelength)
Distance per large oscillation. Sets frequency = 1/wavelength.
Definition TerrainSampler.cpp:16
std::unique_ptr< image::ImageData > generate(const std::string &id, const Params ¶ms, std::string &error) const
Generates an image and transfers its unique ownership to the caller.
Definition TextureRecipe.cpp:33
const RecipeDescriptor * descriptor(const std::string &id) const
Look up recipe metadata.
Definition TextureRecipe.cpp:43
static TextureRecipeRegistry & instance()
Access the process-wide texture recipe registry.
Definition TextureRecipe.cpp:12
Non-owning C++ observation with no implicit lifetime extension.
Definition RuntimeRegistry.h:42
Slot/generation registry whose objects are exclusively unique-owned.
Definition RuntimeRegistry.h:359
eve::Result< Ref > emplace(Owned< T > object)
Transfers one unique-owned object into a fresh registry slot.
Definition RuntimeRegistry.h:381
@ PointSet
Result< T > failed(Status status, eve::DiagnosticCode code, RuleId rule, std::string message)
Construct a failed editing result with explicit status and diagnostic categories.
Definition EditingResult.h:70
void exposeHouseGeneration(ssq::Table &table)
Register the procgen-owned house generation compatibility API.
Definition HouseGen.cpp:28
Definition EvpackPointGraphLoader.h:12
void registerProcgenCapabilities()
Registers procgen capabilities.
Definition ProcgenCapabilities.cpp:142
void exposeHeightmap(ssq::Table &table)
Register heightmap and stamp value bindings; VM-thread only, retains no table reference.
Definition TerrainStampScript.cpp:47
void exposeTerrainCurveTexture(ssq::Table &table)
Register the Pcg terrain curve texture adapter; VM-thread only.
Definition TerrainCurveTexture.cpp:37
PointSet samplePolylinePoints(const PointSet &controlPoints, float spacing, uint32_t seed, float lateralJitter)
Sample polyline points.
Definition PointSet.cpp:757
Result< void > buildDefaultGtsTerrainLodsFromHeightmapInto(GtsTerrainLodSet &output, const Heightmap &heightmap, GtsTerrainSaveResolution resolution, float sizeX, float sizeY, float sizeZ, int subTileSplits, GtsMeshPivot pivot)
Atomically replace output with the complete default four-level GTS terrain conversion.
Definition GtsTerrainLod.cpp:312
PointSet transformPointSet3D(const PointSet &input, float translateX, float translateY, float translateZ, float pitchDegrees, float yawDegrees, float rollDegrees, float scaleX, float scaleY, float scaleZ)
Apply translation, pitch/yaw/roll rotation and non-uniform scale.
Definition PointSet.cpp:891
Result< void > splitGtsMeshInto(GtsMeshSplitResult &output, const MeshBuild &source, int xSplits, int zSplits, GtsMeshPivot pivot)
Atomically replace an owned result with a GTS mesh split.
Definition GtsMeshSplitter.cpp:159
void exposePcgFrameRateManagerBindings(ssq::Table &t)
Register Pcg frame-rate manager bindings.
Definition PcgFrameRateManager.cpp:21
PointSet filterPointStringAttribute(const PointSet &input, const std::string &name, const std::string &value, bool invert)
Select points whose named string attribute equals a value.
Definition PointSet.cpp:1047
void exposePointGraph(ssq::Table &table)
Register PointGraph script types on the Procgen module table.
Definition PointGraphScript.cpp:60
TerrainFileFormat parseTerrainFileFormat(std::string_view name) noexcept
Parse a format selector from a script-facing string.
Definition TerrainFile.cpp:159
void exposeRuntimeGeneration(ssq::Table &table)
Register owner-thread runtime-generation script interfaces.
Definition RuntimeGenerationScript.cpp:9
GtsTerrainSaveResolution
Pcg/GTS power-of-two sampling reduction used before terrain mesh export.
Definition GtsTerrainLod.h:18
Result< void > buildGtsTerrainBaseMesh(MeshBuild &output, const Heightmap &heightmap, GtsTerrainSaveResolution resolution, float sizeX, float sizeY, float sizeZ)
Build the local-space base mesh consumed by the GTS split and LOD pipeline.
Definition GtsTerrainLod.cpp:12
eve::Result< GeneratedArtifact > generateMeshArtifact(std::string_view recipeId, const Params ¶ms, ArtifactId id)
Generate any registered mesh recipe as a CPU artifact.
Definition GeneratedArtifact.cpp:1593
void exposeScriptGeneratorHost(ssq::Class &cls)
Add the synchronous script-generator host API to the Procgen facade.
Definition ScriptGeneratorHost.cpp:143
PointSet unionPointSets(const PointSet &first, const PointSet &second)
Stable union by non-zero point id, with legacy position-and-seed fallback.
Definition PointSet.cpp:852
PointSet transformPointSet(const PointSet &input, float translateX, float translateY, float translateZ, float yawDegrees, float scaleX, float scaleY, float scaleZ)
Apply translation, yaw rotation and non-uniform scale to points and their transforms.
Definition PointSet.cpp:886
PointSet filterPointsByPolygon(const PointSet &input, const PointSet &polygon, bool invert)
Filter points by polygon.
Definition PointSet.cpp:638
GtsMeshPivot
Pivot translation applied independently to each GTS split mesh.
Definition GtsMeshSplitter.h:11
void exposeTerrainGrassAdapter(ssq::Table &table)
Register full-host grass adapter; VM-thread only, no retained table reference.
Definition TerrainGrassAdapter.cpp:62
std::string gridToJson(const Grid2D &grid)
Compact JSON for debugging / reload workflows (not full Tiled).
Definition JsonExport.cpp:29
const char * artifactTypeName(ArtifactType type) noexcept
Return the stable textual spelling of an artifact kind.
Definition GeneratedArtifact.cpp:1251
PointSet filterPointBox(const PointSet &input, float minX, float minY, float minZ, float maxX, float maxY, float maxZ, bool invert)
Filter point box.
Definition PointSet.cpp:606
PointSet filterPointSlope(const PointSet &input, float minDegrees, float maxDegrees)
Filter point slope.
Definition PointSet.cpp:621
void exposeHexTerrain(ssq::Class &cls)
Expose generateHexTerrain / generateHexSphere on the Procgen class.
Definition HexMapTerrain.cpp:166
PointSet projectPointsToHeightmap(const PointSet &input, const Heightmap &heightmap, float originX, float originZ, float cellSize, float heightScale)
Project points to heightmap.
Definition PointSetHeightmapAdapter.cpp:8
void exposePcgTaskQueueBindings(ssq::Table &table)
Register PcgTaskQueue Squirrel bindings.
Definition PcgTaskQueue.cpp:37
PointSet mathPointFloatAttribute(const PointSet &input, const std::string &attribute, const std::string &outputAttribute, const std::string &operation, float operand, float defaultValue)
Apply one scalar operation to a float metadata attribute or $ selector.
Definition PointSetAttributeOps.cpp:273
PointSet poissonDiskPoints(int width, int depth, float radius, uint32_t seed, int maxPoints)
Bridson blue-noise (Poisson disk) samples in a width x depth area (XZ, y=0).
Definition PointSet.cpp:502
PointSet filterPointsBySplineDistance(const PointSet &input, const PointSet &controlPoints, float minDistance, float maxDistance)
Filter points by spline distance.
Definition PointSet.cpp:649
EVENGINE_API_DOMAINS PointSet filterPointFloatAttribute(const PointSet &input, const std::string &name, float minValue, float maxValue, bool invert)
Select points whose named float attribute or $ selector lies in an inclusive range.
Definition PointSetAttributeOps.cpp:298
eve::script::RuntimeHandleRef< ProcgenGridHandleTag > ProcgenGridHandleRef
Definition Procgen.h:113
Result< void > buildGtsTerrainExportLodsFromHeightmapInto(GtsTerrainLodSet &output, const Heightmap &heightmap, const GtsTerrainExportSettings &settings, float sizeX, float sizeY, float sizeZ, int subTiles, GtsMeshPivot pivot)
Build source-terrain LODs using the first export record's SaveResolution and the complete sequential ...
Definition GtsTerrainExportSettings.cpp:507
eve::script::RuntimeHandleRef< ProcgenHeightmapHandleTag > ProcgenHeightmapHandleRef
Definition Procgen.h:118
@ River
@ Beach
@ Wetland
@ Ocean
Result< void > planGtsTerrainLodAssetsInto(GtsTerrainLodAssetPlan &output, const GtsTerrainLodSet &lods, const std::string &name, const std::string &folder)
Atomically replace a script-friendly export plan.
Definition GtsTerrainLod.cpp:240
eve::artifact::PublishOptions ArtifactPublishOptions
Definition ArtifactPublish.h:24
PointSet excludePointRadius(const PointSet &input, float x, float z, float radius)
Exclude point radius.
Definition PointSet.cpp:670
eve::Result< DecodedTerrainFile > decodeTerrainFile(std::span< const std::uint8_t > bytes, TerrainFileFormat format)
Decode a terrain height field from in-memory file bytes.
Definition TerrainFile.cpp:172
Result< int > combinePcgStaticMeshesInto(MeshBuild &output, const PcgMeshCombinePlan &plan)
Combine static meshes with Pcg material deduplication and root-relative transforms.
Definition PcgMeshLod.cpp:52
eve::Result< DecodedTerrainFile > loadTerrainFile(const std::string &path, TerrainFileFormat format)
Read and decode a terrain height field through the filesystem capability.
Definition TerrainFile.cpp:196
void exposeMeshModifierGraph(ssq::Table &table)
Register MeshModifierGraph script types on the Procgen module table.
Definition MeshModifierGraphScript.cpp:19
Result< void > buildPcgCombinedMeshLodsInto(PcgMeshLodSet &output, const PcgMeshCombinePlan &plan, const PcgMeshLodProfile &profile)
Combine an ordered static-renderer plan and generate every combined LOD atomically.
Definition PcgMeshLod.cpp:255
eve::script::RuntimeHandleRef< ProcgenPointSetHandleTag > ProcgenPointSetHandleRef
Definition Procgen.h:116
void exposeBiomeRules(ssq::Table &table)
Register biome rules on the Procgen module table.
Definition BiomeScript.cpp:11
void exposeShapeGrammar(ssq::Table &table)
Register shape-grammar script types on the Procgen module table.
Definition ShapeGrammarScript.cpp:11
PointSet intersectPointSets(const PointSet &first, const PointSet &second)
Keep first-set points whose stable or legacy identity occurs in the second set.
Definition PointSet.cpp:864
void exposeGridMeshGraphs(ssq::Table &table)
Expose grid mesh graphs.
Definition GridMeshGraphScript.cpp:18
Result< void > buildPcgMeshLodsInto(PcgMeshLodSet &output, const MeshBuild &source, const PcgMeshLodProfile &profile)
Generate a complete generic Pcg LOD chain and publish it atomically.
Definition PcgMeshLod.cpp:232
Result< void > buildGtsTerrainColliderMeshFromHeightmapInto(MeshBuild &output, const Heightmap &heightmap, const GtsTerrainExportWorkflow &workflow, float sizeX, float sizeY, float sizeZ)
Build the independently sampled and simplified MeshCollider geometry requested by a workflow.
Definition GtsTerrainExportSettings.cpp:525
bool writeGridJson(const Grid2D &grid, const std::string &path, std::string *error)
Writes grid json.
Definition JsonExport.cpp:58
@ Composite
@ MeshData
Result< int > bakeGtsTerrainVertexColorsInto(MeshBuild &output, const MeshBuild &source, const image::ImageData &bakedTexture, GtsTerrainNormalEdgeMode edgeMode, int smoothingIterations, float terrainSizeX, float terrainSizeZ, bool linearize)
Apply Pcg low-poly edge processing and baked texture vertex colors atomically.
Definition GtsTerrainExportSettings.cpp:677
PointSet mergePointSets(const PointSet &first, const PointSet &second)
Concatenate two attributed point collections while preserving order.
Definition PointSet.cpp:795
Result< std::string > encodeGtsMaskedTerrainObj(const Heightmap &heightmap, const Heightmap &maskmap, GtsTerrainSaveResolution resolution, float sizeX, float sizeY, float sizeZ, GtsTerrainObjFaceMode faceMode, float threshold, bool invert)
Encode Pcg's cell-classified masked terrain OBJ convention.
Definition GtsTerrainExportSettings.cpp:591
eve::ArtifactId ArtifactId
Common strong UUID identity for one published procedural artifact.
Definition GeneratedArtifact.h:43
void exposeTerrainImageAdapter(ssq::Table &table)
Register the full-host ImageData adapter; VM-thread only, no retained table reference.
Definition TerrainImageAdapter.cpp:813
@ String
@ Boolean
@ Choice
@ Integer
PointSet copyPointsToTargets(const PointSet &source, const PointSet &targets, bool inheritTargetAttributes)
Instantiate source points relative to targets in stable target-major order.
Definition PointSet.cpp:926
PointSet filterPointDensity(const PointSet &input, float minDensity, float maxDensity)
Filter point density.
Definition PointSet.cpp:597
Result< void > buildGtsTerrainLodsFromHeightmapInto(GtsTerrainLodSet &output, const Heightmap &heightmap, const GtsTerrainMeshSettings &settings, float sizeX, float sizeY, float sizeZ, GtsMeshPivot pivot)
Atomically build a complete heightmap conversion using persisted GTS mesh settings.
Definition GtsTerrainLod.cpp:322
PointSet selfPrunePoints(const PointSet &input, float radius)
Self prune points.
Definition PointSet.cpp:737
Result< std::string > encodeGtsTerrainObj(const Heightmap &heightmap, GtsTerrainSaveResolution resolution, float sizeX, float sizeY, float sizeZ, GtsTerrainObjFaceMode faceMode)
Encode the original Pcg unmasked terrain OBJ coordinate, UV and face convention.
Definition GtsTerrainExportSettings.cpp:545
PointSet filterPointHeight(const PointSet &input, float minHeight, float maxHeight)
Filter point height.
Definition PointSet.cpp:588
bool autotileGridInPlace(Grid2D &grid)
Post-process any generated Grid2D: fill each wall cell's detail with an 8-bit neighbour mask describi...
Definition RoguelikeGenerator.cpp:732
Result< GtsTerrainLodSet > buildGtsTerrainLods(const MeshBuild &source, int xSplits, int zSplits, GtsMeshPivot pivot, const std::vector< GtsTerrainLodLevelSettings > &levels)
Split a terrain mesh and generate each tile's sequential GTS LOD chain.
Definition GtsTerrainLod.cpp:250
PointSet densityCullPoints(const PointSet &input, uint32_t seed, float multiplier)
Deterministically keep points according to density and a root seed.
Definition PointSet.cpp:1058
PointSet differencePointSets(const PointSet &first, const PointSet &second)
Remove first-set points whose stable or legacy identity occurs in the second set.
Definition PointSet.cpp:875
std::vector< GtsTerrainLodLevelSettings > defaultGtsTerrainLodLevels()
Return the four-level quality and transition profile used by GTSMeshSettings.
Definition GtsTerrainLod.cpp:181
uint32_t deriveSeed(uint32_t parent, const std::string &scope)
Stable label-based seed derivation; independent pipeline branches do not perturb each other.
Definition PointSet.cpp:459
PointSet jitterPointPositions(const PointSet &input, uint32_t seed, float amountX, float amountZ)
Jitter point positions.
Definition PointSet.cpp:724
PointSet remapPointDensity(const PointSet &input, float inputMin, float inputMax, float outputMin, float outputMax, bool clampOutput)
Linearly remap point density between ranges with optional output clamping.
Definition PointSet.cpp:1033
PointSet sampleGridPoints(int width, int depth, float spacing, uint32_t seed, float jitter)
Sample grid points.
Definition PointSet.cpp:480
Result< PointSet > excludePointsByGridMask(const PointSet &input, const Grid2D &mask, float originX, float originZ, float cellSize, int semantic, float clearance, std::size_t maximumChecks)
Remove points covered by a semantic grid mask plus optional world-space clearance.
Definition PointSet.cpp:682
uint32_t randomSeedValue()
Produce a fresh seed suitable for regenerating a level (never 0).
Definition RoguelikeGenerator.cpp:757
eve::script::RuntimeHandleRef< ProcgenSpatialDataHandleTag > ProcgenSpatialDataHandleRef
Definition Procgen.h:125
void exposeModuleAssembly(ssq::Table &table)
Bind the VM-owned assembly planner synchronously on the VM owner thread.
Definition ModuleAssemblyScript.cpp:7
GtsTerrainNormalEdgeMode
Edge-normal treatment requested for an exported terrain mesh.
Definition GtsTerrainExportSettings.h:18
Result< MeshBuild > mergeStaticMeshes(const MeshMergePlan &plan)
Merge planned static meshes into one owning MeshBuild.
Definition MeshMerge.cpp:221
std::unique_ptr< image::ImageData > heightToNormalImage(const std::vector< float > &height, int w, int h, float strength, bool seamless)
Builds a normal-map image and transfers its unique ownership to the caller.
Definition TextureRecipe.cpp:148
GtsTerrainObjFaceMode
Polygon representation written by the Pcg terrain OBJ exporter.
Definition GtsTerrainExportSettings.h:36
eve::Value boundsValue(const eve::artifact::Bounds &bounds)
Definition ArtifactProvider.cpp:83
@ Borrowed
std::unique_ptr< T > Owned
C++ owning storage used by an object factory.
Definition RuntimeRegistry.h:33
ssq::Table projectStatusResult(HSQUIRRELVM vm, const Status &status)
Project a checked native status that carries no payload.
Definition SquirrelBinding.cpp:454
ssq::Table projectResult(HSQUIRRELVM vm, Result< void > &&result)
Consume and project a void native Result using the common schema.
Definition SquirrelBinding.cpp:470
WidgetDesc grid(int columns, std::vector< WidgetDesc > children, std::string id)
Fixed-column grid; children are placed in source order.
Definition Widget.cpp:687
@ InvalidArgument
@ NotFound
@ PreconditionViolation
@ Unsupported
@ Failed
@ StaleHandle
@ Conflict
@ Applied
Definition Container.h:602
Identity-based, revision-checked mutation of one procedural scene batch.
Definition ProcgenSceneSink.h:30
std::vector< uint64_t > removedPointIds
Stable source PointIds removed from the target batch.
Definition ProcgenSceneSink.h:36
std::vector< ProcgenInstanceDesc > updated
Definition ProcgenSceneSink.h:34
std::vector< uint64_t > targetPointOrder
Exact target order addressed by stable source PointId.
Definition ProcgenSceneSink.h:40
std::vector< ProcgenInstanceDesc > added
Definition ProcgenSceneSink.h:33
Engine-neutral description of one procedural scene instance.
Definition ProcgenSceneSink.h:14
uint64_t sourcePointId
Stable source PointId; zero denotes a legacy instance without delta identity.
Definition ProcgenSceneSink.h:16
Required provider set for one artifact publication transaction.
Definition ArtifactPublication.h:179
static constexpr int kMaxLodLevels
Definition RenderSystem3D.h:220
One typed, role-named child product inside a composite artifact.
Definition GeneratedArtifact.h:148
Complete immutable-once-published artifact record.
Definition GeneratedArtifact.h:181
UI-independent metadata for one procedural recipe parameter.
Definition ParamSchema.h:14
image::ImageData * getRoughness() const
Return the generated roughness image.
Definition PbrMaterial.h:40
void destroy()
Deletes all maps and nulls the pointers (defined in PbrMaterial.cpp).
Definition PbrMaterial.cpp:17
image::ImageData * getMetallic() const
Return the generated metallic image.
Definition PbrMaterial.h:42
image::ImageData * getAo() const
Return the generated ambient-occlusion image.
Definition PbrMaterial.h:46
Transactional identity-based change set between two point snapshots.
Definition PointDelta.h:16
PointSet added
Target-only points, including their complete attribute rows.
Definition PointDelta.h:18
std::vector< std::uint64_t > removed
Base identities absent from the target snapshot.
Definition PointDelta.h:22
std::vector< std::uint64_t > targetOrder
Exact identity order of the target snapshot.
Definition PointDelta.h:24
One deterministic sample used by script-first procedural pipelines.
Definition PointSet.h:17
eve::script::RuntimeObjectRegistry< MeshBuild, ProcgenMeshBuildHandleTag > meshes
Definition Procgen.cpp:362
eve::script::RuntimeObjectRegistry< image::ImageData, ProcgenImageHandleTag > images
Definition Procgen.cpp:363
eve::script::RuntimeObjectRegistry< TerrainSampler, ProcgenTerrainSamplerHandleTag > samplers
Definition Procgen.cpp:357
eve::script::RuntimeObjectRegistry< CloudField, ProcgenCloudFieldHandleTag > clouds
Definition Procgen.cpp:359
eve::script::RuntimeObjectRegistry< OutputSpec, ProcgenOutputHandleTag > outputs
Definition Procgen.cpp:355
eve::script::RuntimeObjectRegistry< Heightmap, ProcgenHeightmapHandleTag > heightmaps
Definition Procgen.cpp:358
eve::script::RuntimeObjectRegistry< image::ImageData, ProcgenNormalImageHandleTag > normalImages
Definition Procgen.cpp:364
eve::script::RuntimeObjectRegistry< CloudShadow, ProcgenCloudShadowHandleTag > shadows
Definition Procgen.cpp:360
eve::script::RuntimeObjectRegistry< PbrTextureSet, ProcgenPbrMaterialHandleTag > pbr
Definition Procgen.cpp:361
eve::script::RuntimeObjectRegistry< PointSet, ProcgenPointSetHandleTag > points
Definition Procgen.cpp:356
Complete metadata and parameter schema shared by every procgen recipe family.
Definition ParamSchema.h:52
int getParamChoiceCount(int index) const
Return the number of choices for one parameter.
Definition ParamSchema.cpp:176
float getParamStep(int index) const
Return the suggested numeric editing step.
Definition ParamSchema.cpp:166
std::string getParamLabel(int index) const
Return a parameter label by index.
Definition ParamSchema.cpp:113
std::string getParamDescription(int index) const
Return parameter help text by index.
Definition ParamSchema.cpp:118
std::string getParamKey(int index) const
Return a parameter key by index.
Definition ParamSchema.cpp:108
std::string getParamDefault(int index) const
Return the schema default encoded as text.
Definition ParamSchema.cpp:141
bool paramHasMaximum(int index) const
Test whether a numeric maximum exists.
Definition ParamSchema.cpp:151
std::string getParamCategory(int index) const
Return a parameter category by index.
Definition ParamSchema.cpp:123
std::vector< ParamDescriptor > params
Definition ParamSchema.h:56
bool paramHasMinimum(int index) const
Test whether a numeric minimum exists.
Definition ParamSchema.cpp:146
bool isParamAdvanced(int index) const
Test whether compact inspectors should hide the field.
Definition ParamSchema.cpp:171
std::string getParamChoice(int paramIndex, int choiceIndex) const
Return one choice.
Definition ParamSchema.cpp:181
std::string getParamKind(int index) const
Return the portable parameter kind.
Definition ParamSchema.cpp:128
Per-cell diagnostic outputs produced by an erosion stage.
Definition TerrainPipeline.h:59
float getDeposition(int x, int y) const
Sample deposited material, or zero outside the map.
Definition TerrainPipeline.cpp:81
float getWear(int x, int y) const
Sample gross erosion, or zero outside the map.
Definition TerrainPipeline.cpp:78
float getHeightDelta(int x, int y) const
Sample final-minus-initial elevation, or zero outside the map.
Definition TerrainPipeline.cpp:84
TerrainLakeMeshSettings public API.
Definition TerrainMesh.h:115
TerrainRiverMeshSettings public API.
Definition TerrainMesh.h:91