Files
fool-cardgame/extensions/cocos-code-mode/dist/panels/preview/index.js
T
2026-09-13 09:43:24 +03:00

93 lines
14 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const fs_1 = require("fs");
const path_1 = require("path");
const templateRaw = (0, fs_1.readFileSync)((0, path_1.join)(__dirname, '../../../static/template/preview/index.html'), 'utf-8');
const styleRaw = (0, fs_1.readFileSync)((0, path_1.join)(__dirname, '../../../static/style/preview/index.css'), 'utf-8');
module.exports = Editor.Panel.define({
template: templateRaw,
style: styleRaw,
$: {
container: '#preview-container',
},
listeners: {},
methods: {
async generatePreview(uuid, width = 512, height = 512, jpegQuality = 80) {
try {
const info = await Editor.Message.request('asset-db', 'query-asset-info', uuid);
if (!info)
throw new Error("Asset info not found");
let previewType = '';
let queryMethod = '';
switch (info.importer) {
case 'prefab':
case 'fbx':
case 'gltf':
case 'gltf-skeleton':
previewType = 'scene:prefab-preview';
queryMethod = 'query-prefab-preview-data';
break;
case 'material':
previewType = 'scene:material-preview';
queryMethod = 'query-material-preview-data';
break;
case 'gltf-mesh':
case 'mesh':
previewType = 'scene:mesh-preview';
queryMethod = 'query-mesh-preview-data';
break;
case 'spine':
previewType = 'scene:spine-preview';
queryMethod = 'query-spine-preview-data';
break;
default:
previewType = 'scene:mini-preview';
queryMethod = 'query-scene-preview-data';
break;
}
// @ts-ignore
const GLPreview = Editor._Module.require('PreviewExtends').default;
const glPreview = new GLPreview(previewType, queryMethod);
const canvas = document.createElement('canvas');
canvas.width = width;
canvas.height = height;
await glPreview.init({ width, height });
await glPreview.initGL(canvas, { width, height });
await glPreview.resizeGL(width, height);
// Set Target
const call = async (func, ...args) => {
return await Editor.Message.request('scene', 'call-preview-function', previewType, func, ...args);
};
if (info.importer === 'prefab' || info.importer === 'scene' || info.importer === 'fbx' || info.importer === 'gltf') {
await call('setPrefab', uuid);
}
else if (info.importer === 'material') {
// Match Inspector implementation
await call('resetCamera');
await call('setLightEnable', true);
await call('setPrimitive', 'sphere');
await Editor.Message.request('scene', 'preview-material', uuid);
}
else if (info.importer === 'gltf-mesh') {
await call('setModel', uuid);
}
else if (info.importer === 'spine') {
await call('setSpine', uuid);
}
else {
await call('setScene', uuid);
}
// Draw
const data = await glPreview.queryPreviewData({ width, height });
glPreview.drawGL(data);
const dataURL = canvas.toDataURL('image/jpeg', jpegQuality);
return dataURL.replace(/^data:image\/\w+;base64,/, '');
}
catch (error) {
console.error(`[Preview] Error:`, error);
throw new Error(`Generaton failed: ${error.message}`);
}
},
}
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zb3VyY2UvcGFuZWxzL3ByZXZpZXcvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwyQkFBa0M7QUFDbEMsK0JBQTRCO0FBRTVCLE1BQU0sV0FBVyxHQUFHLElBQUEsaUJBQVksRUFBQyxJQUFBLFdBQUksRUFBQyxTQUFTLEVBQUUsNkNBQTZDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMxRyxNQUFNLFFBQVEsR0FBRyxJQUFBLGlCQUFZLEVBQUMsSUFBQSxXQUFJLEVBQUMsU0FBUyxFQUFFLHlDQUF5QyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFFbkcsTUFBTSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUNqQyxRQUFRLEVBQUUsV0FBVztJQUNyQixLQUFLLEVBQUUsUUFBUTtJQUNmLENBQUMsRUFBRTtRQUNDLFNBQVMsRUFBRSxvQkFBb0I7S0FDbEM7SUFFRCxTQUFTLEVBQUUsRUFDVjtJQUVELE9BQU8sRUFBRTtRQUNMLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBWSxFQUFFLFFBQWdCLEdBQUcsRUFBRSxTQUFpQixHQUFHLEVBQUUsY0FBc0IsRUFBRTtZQUNuRyxJQUFJLENBQUM7Z0JBQ0QsTUFBTSxJQUFJLEdBQUcsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ2hGLElBQUksQ0FBQyxJQUFJO29CQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztnQkFFbkQsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDO2dCQUNyQixJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7Z0JBRXJCLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNwQixLQUFLLFFBQVEsQ0FBQztvQkFDZCxLQUFL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TUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNqQyxDQUFDO3FCQUFNLENBQUM7b0JBQ0gsTUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNsQyxDQUFDO2dCQUVELE9BQU87Z0JBQ1AsTUFBTSxJQUFJLEdBQUcsTUFBTSxTQUFTLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztnQkFFakUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFFdkIsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUM7Z0JBRTVELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQywwQkFBMEIsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUUzRCxDQUFDO1lBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztnQkFDbEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDekMsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDMUQsQ0FBQztRQUNMLENBQUM7S0FDSjtDQUNHLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcblxuY29uc3QgdGVtcGxhdGVSYXcgPSByZWFkRmlsZVN5bmMoam9pbihfX2Rpcm5hbWUsICcuLi8uLi8uLi9zdGF0aWMvdGVtcGxhdGUvcHJldmlldy9pbmRleC5odG1sJyksICd1dGYtOCcpO1xuY29uc3Qgc3R5bGVSYXcgPSByZWFkRmlsZVN5bmMoam9pbihfX2Rpcm5hbWUsICcuLi8uLi8uLi9zdGF0aWMvc3R5bGUvcHJldmlldy9pbmRleC5jc3MnKSwgJ3V0Zi04Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gRWRpdG9yLlBhbmVsLmRlZmluZSh7XG4gICAgdGVtcGxhdGU6IHRlbXBsYXRlUmF3LFxuICAgIHN0eWxlOiBzdHlsZVJhdyxcbiAgICAkOiB7XG4gICAgICAgIGNvbnRhaW5lcjogJyNwcmV2aWV3LWNvbnRhaW5lcicsXG4gICAgfSxcbiAgICBcbiAgICBsaXN0ZW5lcnM6IHtcbiAgICB9LFxuICAgIFxuICAgIG1ldGhvZHM6IHtcbiAgICAgICAgYXN5bmMgZ2VuZXJhdGVQcmV2aWV3KHV1aWQ6IHN0cmluZywgd2lkdGg6IG51bWJlciA9IDUxMiwgaGVpZ2h0OiBudW1iZXIgPSA1MTIsIGpwZWdRdWFsaXR5OiBudW1iZXIgPSA4MCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZm8gPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdxdWVyeS1hc3NldC1pbmZvJywgdXVpZCk7XG4gICAgICAgICAgICAgICAgaWYgKCFpbmZvKSB0aHJvdyBuZXcgRXJyb3IoXCJBc3NldCBpbmZvIG5vdCBmb3VuZFwiKTtcbiAgICBcbiAgICAgICAgICAgICAgICBsZXQgcHJldmlld1R5cGUgPSAnJztcbiAgICAgICAgICAgICAgICBsZXQgcXVlcnlNZXRob2QgPSAnJztcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGluZm8uaW1wb3J0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAncHJlZmFiJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZmJ4JzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZ2x0Zic6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2dsdGYtc2tlbGV0b24nOlxuICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlld1R5cGUgPSAnc2NlbmU6cHJlZmFiLXByZXZpZXcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlNZXRob2QgPSAncXVlcnktcHJlZmFiLXByZXZpZXctZGF0YSc7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWF0ZXJpYWwnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlld1R5cGUgPSAnc2NlbmU6bWF0ZXJpYWwtcHJldmlldyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeU1ldGhvZCA9ICdxdWVyeS1tYXRlcmlhbC1wcmV2aWV3LWRhdGEnO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2dsdGYtbWVzaCc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ21lc2gnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlld1R5cGUgPSAnc2NlbmU6bWVzaC1wcmV2aWV3JztcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5TWV0aG9kID0gJ3F1ZXJ5LW1lc2gtcHJldmlldy1kYXRhJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdzcGluZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2aWV3VHlwZSA9ICdzY2VuZTpzcGluZS1wcmV2aWV3JztcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5TWV0aG9kID0gJ3F1ZXJ5LXNwaW5lLXByZXZpZXctZGF0YSc7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpZXdUeXBlID0gJ3NjZW5lOm1pbmktcHJldmlldyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeU1ldGhvZCA9ICdxdWVyeS1zY2VuZS1wcmV2aWV3LWRhdGEnO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICBjb25zdCBHTFByZXZpZXcgPSBFZGl0b3IuX01vZHVsZS5yZXF1aXJlKCdQcmV2aWV3RXh0ZW5kcycpLmRlZmF1bHQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZ2xQcmV2aWV3ID0gbmV3IEdMUHJldmlldyhwcmV2aWV3VHlwZSwgcXVlcnlNZXRob2QpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgYXdhaXQgZ2xQcmV2aWV3LmluaXQoeyB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgICAgICAgICAgICAgIGF3YWl0IGdsUHJldmlldy5pbml0R0woY2FudmFzLCB7IHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgICAgICAgICAgICAgYXdhaXQgZ2xQcmV2aWV3LnJlc2l6ZUdMKHdpZHRoLCBoZWlnaHQpO1xuICAgIFxuICAgICAgICAgICAgICAgIC8vIFNldCBUYXJnZXRcbiAgICAgICAgICAgICAgICBjb25zdCBjYWxsID0gYXN5bmMgKGZ1bmM6IHN0cmluZywgLi4uYXJnczogYW55W10pID0+IHsgXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdzY2VuZScsICdjYWxsLXByZXZpZXctZnVuY3Rpb24nLCBwcmV2aWV3VHlwZSwgZnVuYywgLi4uYXJncyk7IFxuICAgICAgICAgICAgICAgIH07XG4gICAgXG4gICAgICAgICAgICAgICAgaWYgKGluZm8uaW1wb3J0ZXIgPT09ICdwcmVmYWInIHx8IGluZm8uaW1wb3J0ZXIgPT09ICdzY2VuZScgfHwgaW5mby5pbXBvcnRlciA9PT0gJ2ZieCcgfHwgaW5mby5pbXBvcnRlciA9PT0gJ2dsdGYnKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGNhbGwoJ3NldFByZWZhYicsIHV1aWQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5mby5pbXBvcnRlciA9PT0gJ21hdGVyaWFsJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBNYXRjaCBJbnNwZWN0b3IgaW1wbGVtZW50YXRpb25cbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgY2FsbCgncmVzZXRDYW1lcmEnKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgY2FsbCgnc2V0TGlnaHRFbmFibGUnLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgY2FsbCgnc2V0UHJpbWl0aXZlJywgJ3NwaGVyZScpO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdzY2VuZScsICdwcmV2aWV3LW1hdGVyaWFsJywgdXVpZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbmZvLmltcG9ydGVyID09PSAnZ2x0Zi1tZXNoJykge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBjYWxsKCdzZXRNb2RlbCcsIHV1aWQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5mby5pbXBvcnRlciA9PT0gJ3NwaW5lJykge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBjYWxsKCdzZXRTcGluZScsIHV1aWQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICBhd2FpdCBjYWxsKCdzZXRTY2VuZScsIHV1aWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICBcbiAgICAgICAgICAgICAgICAvLyBEcmF3XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdsUHJldmlldy5xdWVyeVByZXZpZXdEYXRhKHsgd2lkdGgsIGhlaWdodCB9KTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBnbFByZXZpZXcuZHJhd0dMKGRhdGEpO1xuICAgIFxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFVUkwgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywganBlZ1F1YWxpdHkpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFVUkwucmVwbGFjZSgvXmRhdGE6aW1hZ2VcXC9cXHcrO2Jhc2U2NCwvLCAnJyk7XG4gICAgXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgW1ByZXZpZXddIEVycm9yOmAsIGVycm9yKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEdlbmVyYXRvbiBmYWlsZWQ6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9XG59IGFzIGFueSk7XG4iXX0=