载入中...
搜索中...
未找到
RoadArtifact.cpp
浏览该文件的文档.
38 Diagnostic::error(DiagnosticCode::InvalidArgument, "cannot derive road artifact child key", "role"));
118Result<std::map<RoadChunkCoordinate, MeshBuild>> splitRoadMeshIntoChunks(const MeshBuild& source, float chunkSize,
126 const float centerX = (source.getPositionX(ia) + source.getPositionX(ib) + source.getPositionX(ic)) / 3.f;
127 const float centerZ = (source.getPositionZ(ia) + source.getPositionZ(ib) + source.getPositionZ(ic)) / 3.f;
132 accumulator.mesh.setActiveGroup(sourceGroup >= 0 ? source.getGroupName(sourceGroup) : "default");
159 if (!colors.ok()) return Result<std::map<RoadChunkCoordinate, MeshBuild>>::failure(colors.status());
166Result<ArtifactPart> roadChunkPart(std::string role, ArtifactId root, MeshBuild mesh, RoadChunkCoordinate coordinate) {
168 canonical << "eve.procgen.road.chunk.v1/" << role << '/' << std::hex << std::setfill('0') << std::setw(16)
173 Diagnostic::error(DiagnosticCode::InvariantViolation, "cannot derive road chunk content key", role));
181 return makeArtifactPart(std::move(role), partId, ArtifactType::MeshData, eve::SchemaVersion(1), std::move(*key),
189bool pointInTriangleXZ(float px, float pz, float ax, float az, float bx, float bz, float cx, float cz) {
190 const bool negative = edgeSign(ax, az, bx, bz, px, pz) < 0.f || edgeSign(bx, bz, cx, cz, px, pz) < 0.f ||
192 const bool positive = edgeSign(ax, az, bx, bz, px, pz) > 0.f || edgeSign(bx, bz, cx, cz, px, pz) > 0.f ||
197Grid2D roadFootprint(const MeshBuild& mesh, const Bounds& bounds, float requestedCellSize, float padding = 0.f) {
227 std::clamp(static_cast<int>(std::floor((std::min({ax, bx, cx}) - originX) / cellSize)), 0, width - 1);
229 std::clamp(static_cast<int>(std::floor((std::max({ax, bx, cx}) - originX) / cellSize)), 0, width - 1);
231 std::clamp(static_cast<int>(std::floor((std::min({az, bz, cz}) - originZ) / cellSize)), 0, height - 1);
233 std::clamp(static_cast<int>(std::floor((std::max({az, bz, cz}) - originZ) / cellSize)), 0, height - 1);
292Result<ArtifactPart> roadPart(std::string role, ArtifactId root, const BuildKey& rootKey, ArtifactType type,
298 return makeArtifactPart(role, root.child(role), type, eve::SchemaVersion(1), std::move(key).takeValue(), bounds,
302Result<void> appendNavigationParts(const road::RoadOverlay& overlay, ArtifactId root, const BuildKey& rootKey,
310 DiagnosticCode::InvariantViolation, "road overlay coordinates are not packed xyz triples", role));
311 if (!std::all_of(line.xyz.begin(), line.xyz.end(), [](float value) { return std::isfinite(value); }))
326 metadata = setPointDataIntAttribute(points, "in_direction", static_cast<int>(line.inDirection));
328 metadata = setPointDataIntAttribute(points, "out_direction", static_cast<int>(line.outDirection));
338 roadPart(role, root, rootKey, ArtifactType::PointSet, bounds, std::move(points), {root.child("mesh")});
359 Diagnostic::error(DiagnosticCode::InvalidArgument, "road artifact identity must not be nil", "id"));
363 Diagnostic::error(DiagnosticCode::InvalidArgument, "road parameters cannot form a build key", "params"));
373 if (!std::isfinite(chunkSize) || chunkSize < 4.f || chunkSize > 1024.f || lodCount < 1 || lodCount > 4)
375 DiagnosticCode::InvalidArgument, "road chunkSize must be in [4,1024] and lodCount in [1,4]", "chunks"));
399 if (!std::isfinite(terrainBlendDistance) || terrainBlendDistance < 0.f || terrainBlendDistance > 64.f)
407 surfaceWeights = roadSurfaceWeights(std::move(surfaceWeights), surfaceCellSize, terrainBlendDistance);
408 if (!bounds.isValid() || !collider.isValid() || !drivableCollider.isValid() || footprint.getWidth() <= 0 ||
412 Diagnostic::error(DiagnosticCode::InvariantViolation, "road bake produced incomplete artifact data"));
418 auto meshPart = roadPart("mesh", id, *key, ArtifactType::MeshData, bounds, std::move(result.mesh));
421 auto colliderPart = roadPart("collider", id, *key, ArtifactType::Collider, collider.bounds, std::move(collider),
427 if (!drivableColliderPart.ok()) return Result<GeneratedArtifact>::failure(drivableColliderPart.status());
439 roadPart("topology", id, *key, ArtifactType::Grid, bounds, std::move(footprint), {id.child("mesh")});
446 auto surfacePart = roadPart("terrain/surface-weight", id, *key, ArtifactType::Grid, surfaceBounds,
471 return makeArtifact(id, ArtifactType::Composite, eve::SchemaVersion(2), *key, bounds, {}, std::move(metadata),
Stable, structured diagnostics shared by engine modules.
Owning, backend-neutral products published by procedural generation.
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
Id128 child(std::string_view role) const noexcept
Derives a deterministic child UUID for a hierarchical identity.
Definition Identity.h:192
static std::optional< BuildKey > fromCanonical(std::string_view canonical)
Construct a build key from canonical text.
Definition GeneratedArtifact.cpp:1187
static std::optional< BuildKey > forRecipe(std::string_view recipeId, const Params ¶ms)
Derive a compact deterministic key for a recipe and parameters.
Definition GeneratedArtifact.cpp:1192
Intermediate 2D generation result. cells store semantic ids (see Semantic.h), not tile GIDs — convert...
Definition Grid2D.h:36
std::string getMeta(const std::string &key, const std::string &defaultValue) const
Returns the meta.
Definition Grid2D.cpp:49
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
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
@ Collider
@ PointSet
Result< RoadBakeResult > bakeRoadNetworkRecipe(const Params ¶ms)
Build the shared road recipe once for mesh, navigation and artifact projections.
Definition RoadRecipes.cpp:38
Definition EvpackPointGraphLoader.h:12
EVENGINE_API_DOMAINS eve::Result< GeneratedArtifact > generateRoadNetworkArtifact(const Params ¶ms, ArtifactId id)
Generate a road composite containing mesh, collider, terrain footprint, navigation and placement poin...
Definition RoadArtifact.cpp:356
EVENGINE_API_DOMAINS Result< void > setPointDataFloatAttribute(PointSet &points, const std::string &attribute, float value)
Write a float into the PointSet @Data domain.
Definition PointSetAttributeOps.cpp:604
eve::Result< ArtifactPart > makeArtifactPart(std::string role, ArtifactId id, ArtifactType type, eve::SchemaVersion schemaVersion, BuildKey buildKey, Bounds bounds, std::vector< ArtifactId > dependencies, eve::Value::Object metadata, ArtifactLeafPayload payload)
Validate and construct a leaf part for a composite artifact.
Definition GeneratedArtifact.cpp:1280
Result< void > setPointDataIntAttribute(PointSet &points, const std::string &attribute, std::int64_t value)
Write an int into the PointSet @Data domain.
Definition PointSetAttributeOps.cpp:612
ArtifactType
Runtime payload kind; it is checked against the variant on publish.
Definition GeneratedArtifact.h:109
@ Composite
@ MeshData
@ Collider
@ PointSet
eve::ArtifactId ArtifactId
Common strong UUID identity for one published procedural artifact.
Definition GeneratedArtifact.h:43
std::variant< Grid2D, PointSet, MeshData, ImageData, Collider > ArtifactLeafPayload
Leaf payloads used by a CompositeArtifact.
Definition GeneratedArtifact.h:145
eve::Result< GeneratedArtifact > makeArtifact(ArtifactId id, ArtifactType type, eve::SchemaVersion schemaVersion, BuildKey buildKey, Bounds bounds, std::vector< ArtifactId > dependencies, eve::Value::Object metadata, GeneratedArtifact::Payload payload)
Validate and construct one artifact record.
Definition GeneratedArtifact.cpp:1263
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
@ InvariantViolation
Definition Container.h:602
Axis-aligned bounds in the artifact's declared world coordinate space.
Definition GeneratedArtifact.h:93
void include(float x, float y, float z) noexcept
Expand this box to include one point.
Definition GeneratedArtifact.cpp:1200
Backend-neutral collider product, normally a triangle mesh or hull.
Definition GeneratedArtifact.h:131
bool isValid() const noexcept
Return whether the collider has complete triangle data.
Definition GeneratedArtifact.cpp:1223
A coherent set of products published from one deterministic build.
Definition GeneratedArtifact.h:161
std::vector< ArtifactPart > children
Definition GeneratedArtifact.h:162
Owning bake result: mesh, overlays and generic decoration placement points.
Definition RoadBake.h:62