super-hero/extensions/shader-graph/dist/importer/utils-3.8.js

121 lines
16 KiB
JavaScript
Raw Permalink Normal View History

2024-05-29 19:24:12 -07:00
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getDeserializeResult = exports.getDependUUIDList = exports.generateEffectAsset = void 0;
const path_1 = require("path");
module.paths.push((0, path_1.join)(Editor.App.path, 'node_modules'));
const { AssetDB, forEach, Asset } = require('@editor/asset-db');
const effect_utils_1 = require("../effect-utils");
async function loadTexture(assetId) {
return new Promise((resolve) => {
cc.assetManager.loadAny(assetId, (error, asset) => {
if (!error) {
resolve(asset);
}
else {
resolve(null);
}
});
});
}
/**
* library 里生成对应的 effectAsset 对象
* @param asset 资源数据
* @param code
*/
// @ts-expect-error
async function generateEffectAsset(asset, code) {
const name = (0, path_1.basename)(asset.source, (0, path_1.extname)(asset.source));
const effect = await (0, effect_utils_1.buildEffect)(name, code);
// 记录 effect 的头文件依赖
// @ts-expect-error
forEach((db) => {
for (const header of effect.dependencies) {
asset.depend((0, path_1.resolve)(db.options.target, 'chunks', header + '.chunk'));
}
});
const result = new cc.EffectAsset();
Object.assign(result, effect);
// 引擎数据结构不变,保留 hideInEditor 属性
if (effect.editor && effect.editor.hide) {
result.hideInEditor = true;
}
for (let n = 0; n < result.techniques.length; n++) {
const technique = result.techniques[n];
for (let i = 0; i < technique.passes.length; i++) {
const pass = technique.passes[i];
for (const key in pass.properties) {
const propInfo = pass.properties[key];
if (typeof propInfo.value === 'string') {
const assetId = propInfo.value;
if (Editor.Utils.UUID.isUUID(assetId)) {
const asset = await loadTexture(assetId);
if (asset) {
propInfo.value = asset;
}
}
}
}
}
}
// 添加 meta 文件中的 combinations
if (asset.userData) {
if (asset.userData.combinations) {
result.combinations = asset.userData.combinations;
}
if (effect.editor) {
asset.userData.editor = effect.editor;
}
else {
// 已存在的需要清空
asset.userData.editor = undefined;
}
}
const serializeJSON = EditorExtends.serialize(result);
await asset.saveToLibrary('.json', serializeJSON);
const depends = getDependUUIDList(serializeJSON);
asset.setData('depends', depends);
}
exports.generateEffectAsset = generateEffectAsset;
function getDependUUIDList(content, uuid) {
if (typeof content === 'string') {
// 注意:此方法无法匹配出脚本引用的 uuid
let arr = content.match(/[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}(@[a-z0-9]+){0,}/g);
if (arr) {
// https://stackoverflow.com/questions/32813720/nodejs-profiling-parent-in-sliced-string
arr = JSON.parse(JSON.stringify(Array.from(new Set(arr)).filter((id) => id !== uuid)));
}
// const arr = content.match(/"__uuid__":( )?"[^"]+/g);
return arr || [];
}
// console.warn('Unable to extract dependencies properly');
return getDeserializeResult(content).uuids;
}
exports.getDependUUIDList = getDependUUIDList;
function getDeserializeResult(json) {
const deserializeDetails = new cc.deserialize.Details();
deserializeDetails.reset();
const MissingClass = EditorExtends.MissingReporter.classInstance;
MissingClass.reset();
MissingClass.hasMissingClass = false;
const dependScriptID = new Set();
function classFinder(classId) {
if (Editor.Utils.UUID.isUUID(classId)) {
dependScriptID.add(Editor.Utils.UUID.decompressUUID(classId));
}
return MissingClass.classFinder(classId);
}
const deserializedAsset = cc.deserialize(json, deserializeDetails, {
classFinder,
});
deserializeDetails.assignAssetsBy(function (uuid, options) {
return EditorExtends.serialize.asAsset(uuid);
});
return {
instance: deserializedAsset,
uuids: deserializeDetails.uuidList,
dependScriptUuids: Array.from(dependScriptID),
classFinder: MissingClass.classFinder,
};
}
exports.getDeserializeResult = getDeserializeResult;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMtMy44LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ltcG9ydGVyL3V0aWxzLTMuOC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBd0Q7QUFFeEQsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBQSxXQUFJLEVBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztBQUV6RCxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUloRSxrREFBOEM7QUFLOUMsS0FBSyxVQUFVLFdBQVcsQ0FBQyxPQUFlO0lBQ3RDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUMzQixFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFVLEVBQUUsS0FBVSxFQUFFLEVBQUU7WUFDeEQsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDUixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDbEI7aUJBQU07Z0JBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2pCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsbUJBQW1CO0FBQ1osS0FBSyxVQUFVLG1CQUFtQixDQUFDLEtBQVksRUFBRSxJQUFZO0lBQ2hFLE1BQU0sSUFBSSxHQUFHLElBQUEsZUFBUSxFQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBQSxjQUFPLEVBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFFM0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFBLDBCQUFXLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRTdDLG1CQUFtQjtJQUNuQixtQkFBbUI7SUFD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