载入中...
搜索中...
未找到
UnrealImporter.cpp
浏览该文件的文档.
16Result<std::string> requiredString(const Value::Object& object, std::string_view key, std::string path) {
25Result<std::uint32_t> requiredUint32(const Value::Object& object, std::string_view key, std::string path) {
40 return Result<float>::failure(Diagnostic::error(DiagnosticCode::ParseError, "Unreal numeric field is invalid",
67 path.find('\\') != std::string_view::npos || path.find(':') != std::string_view::npos) return false;
115Result<void> preserveSource(PreparedAssetImport& output, const UnrealProjectImportRequest& request,
135 DiagnosticCode::InvalidArgument, "Unreal adapter descriptor path is unsafe", {}, {}, "asset.import"));
137 if (descriptorFile == request.files.end() || descriptorFile->second.size() > request.limits.maximumSourceBytes)
143 if (!safeProjectPath(path, request.limits) || bytes.size() > request.limits.maximumSourceBytes ||
146 Diagnostic::error(DiagnosticCode::InvalidArgument, "Unreal source path or total budget is invalid",
156 DiagnosticCode::ParseError, "Unreal adapter descriptor root must be an object", {}, {}, "asset.import"));
164 Diagnostic::error(DiagnosticCode::UnknownVersion, "unsupported Unreal adapter descriptor schema/version",
170 DiagnosticCode::ParseError, "Unreal descriptor landscape is required", {}, {}, "asset.import"));
179 scale.value()[1] <= 0 || scale.value()[2] <= 0 || !safeProjectPath(heightmap.value(), request.limits))
181 Diagnostic::error(DiagnosticCode::InvalidArgument, "Unreal Landscape dimensions/scale/path are invalid", {},
185 if (heightFile == request.files.end() || sampleCount > request.limits.maximumDecodedBytes / sizeof(float) ||
208 terrain.sourceTransform = {{"source", Value("ue-left-handed-x-forward-y-right-z-up-centimeters")},
219 Diagnostic::error(DiagnosticCode::ParseError, "M4 layer must be an object", {}, {}, "asset.import"));
228 output.diffuseSource = "sources/unreal/" + diffuse->asString(); preserved.emplace(diffuse->asString());
234 output.normalSource = "sources/unreal/" + normal->asString(); preserved.emplace(normal->asString());
240 output.weightSource = "sources/unreal/" + weight->asString(); preserved.emplace(weight->asString());
267 CanonicalScatterRule output{id.value(), prototype.value(), layer.value(), density.value(), 0, 1.57079632679f, 0};
271 Diagnostic::error(DiagnosticCode::ParseError, "M4 grass seed is invalid", {}, {}, "asset.import"));
282 Diagnostic::error(DiagnosticCode::ParseError, "UE instance must be an object", {}, {}, "asset.import"));
285 auto rotation = numberArray<4>(member(*instance, "rotationQuat"), "$.instances[].rotationQuat");
302 auto prepared = prepareCanonicalTerrainImport(request.package, terrain, "eve.unreal-m4/1", request.limits);
314 output.findings.push_back({heightmap.value(), "Landscape.heightfield", ImportDisposition::Translated,
326 Diagnostic::error(DiagnosticCode::ParseError, "unsupported must be an array", {}, {}, "asset.import"));
331 output.findings.push_back({request.descriptorPath, feature.asString(), ImportDisposition::Unsupported,
338 else if (asset.type == "eve.terrain-material") sourceObject = request.descriptorPath + "#layers";
340 else if (asset.type == "eve.instance-set") sourceObject = request.descriptorPath + "#instances";
UE5/M⁴ landscape adapter that does not execute or link Unreal Engine.
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 Result< Value > fromJson(std::string_view json)
Parse one strict JSON value into an owning Value.
Definition Value.cpp:57
const T * getIf() const noexcept
Return a typed pointer, or nullptr when the kind differs.
Definition Value.h:180
EVENGINE_API_PLATFORM Result< void > finalizeImportReport(PreparedAssetImport &prepared, const ImportPackageIdentity &package, std::string_view sourceEngine, std::string_view sourceVersion, Value::Object options={})
Append the deterministic mandatory import report and bind it from provenance.
Definition ImportReport.cpp:21
Definition AssetImporter.h:14
Result< PreparedAssetImport > prepareCanonicalTerrainImport(const ImportPackageIdentity &package, const CanonicalTerrainInput &terrain, std::string_view importer, const AssetImportLimits &limits)
Build eve.terrain, terrain material, PCG and instance assets from canonical input.
Definition TerrainImporter.cpp:48
@ Translated
@ Unsupported
Result< PreparedAssetImport > prepareUnrealM4Import(const UnrealProjectImportRequest &request)
Import an M⁴-style Landscape/material/grass slice without launching Unreal.
Definition UnrealImporter.cpp:132
std::variant< std::monostate, std::int64_t, double, std::string, bool > Value
Definition Database.h:26
WidgetDesc row(std::vector< WidgetDesc > children, std::string id)
Horizontal elastic layout row.
Definition Widget.cpp:679
@ InvalidArgument
@ NotFound
@ UnknownVersion
@ ParseError
std::uint64_t maximumDecodedBytes
Definition AssetImporter.h:19
std::uint64_t maximumSourceBytes
Definition AssetImporter.h:18
std::uint32_t maximumStringBytes
Definition AssetImporter.h:23
One deterministic terrain scatter rule, independent of source engine nodes.
Definition TerrainImporter.h:36
Fully parsed source terrain ready for canonical archive construction.
Definition TerrainImporter.h:78
One baked instance in canonical right-handed metre coordinates.
Definition TerrainImporter.h:47
std::string prototype
Definition TerrainImporter.h:48
One canonical terrain material layer after source-engine mapping.
Definition TerrainImporter.h:16
ImportPackageIdentity package
Definition AssetImporter.h:55
Owning, validated source archive candidate not yet published to disk/database.
Definition AssetImporter.h:90
asset::EvaManifest manifest
Definition AssetImporter.h:91
Uncooked Unreal content slice plus a versioned data-only adapter descriptor.
Definition UnrealImporter.h:15