'use strict'; const path = require('path'); const { injectionStyle } = require('../../utils/prop'); const defaultActiveTab = 'animation'; let cacheActiveTab = defaultActiveTab; exports.template = /* html */`
`; exports.style = /* css */` .asset-fbx { display: flex; flex: 1; flex-direction: column; } .asset-fbx > .header { padding: 8px 4px; } .asset-fbx > .header > .tabs { height: 24px; } `; exports.$ = { container: '.asset-fbx', header: '.header', tabs: '.tabs', tabPanel: '.tab-panel', }; const Components = { model: path.join(__dirname, `./model.js`), animation: path.join(__dirname, `./animation.js`), material: path.join(__dirname, `./material.js`), fbx: path.join(__dirname, `./fbx.js`), }; const Elements = { tabs: { ready() { const panel = this; panel.$.tabs.addEventListener('change', () => { cacheActiveTab = panel.activeTab = panel.tabs[panel.$.tabs.value]; Elements.tabPanel.update.call(panel); }); panel.activeTab = cacheActiveTab; }, update() { const panel = this; panel.$.tabs.innerText = ''; panel.tabs = []; for (const tab in Components) { if (panel.asset.importer === 'gltf' && tab === 'fbx') { continue; } panel.tabs.push(tab); } panel.tabs.forEach((tab) => { const button = document.createElement('ui-button'); button.setAttribute('size', 'medium'); panel.$.tabs.appendChild(button); const label = document.createElement('ui-label'); button.appendChild(label); label.setAttribute('value', `i18n:ENGINE.assets.fbx.${tab}`); }); panel.$.tabs.value = panel.tabs.indexOf(panel.activeTab); }, }, tabPanel: { ready() { const panel = this; panel.$.tabPanel.injectionStyle(injectionStyle); panel.$.tabPanel.addEventListener('change', () => { panel.dispatch('change'); }); panel.$.tabPanel.addEventListener('snapshot', () => { panel.dispatch('snapshot'); }); }, update() { const panel = this; panel.$.tabPanel.setAttribute('src', Components[panel.activeTab]); panel.$.tabPanel.update(panel.assetList, panel.metaList); // Delay, waiting for the fbx preview area initialization to complete setTimeout(() => { Editor.Message.broadcast('fbx-inspector:change-tab', panel.activeTab); }); }, }, }; exports.methods = { apply() { Editor.Message.broadcast('fbx-inspector:apply'); }, }; exports.listeners = { track(event) { if (event.args?.length) { const { prop, value } = event.args[0]; if (!value) { return; } // 只有被勾选的时候上报埋点 const trackMap = { 'meshOptimize.enable': 'A100000', 'fbx.smartMaterialEnabled': 'A100001', disableMeshSplit: 'A100002', }; const trackId = trackMap[prop]; if (trackId) { Editor.Metrics._trackEventWithTimer({ category: 'importSystem', id: trackId, value: 1, }); } } }, }; exports.ready = function() { for (const prop in Elements) { const element = Elements[prop]; if (element.ready) { element.ready.call(this); } } }; exports.update = function(assetList, metaList) { this.assetList = assetList; this.metaList = metaList; this.asset = assetList[0]; this.meta = metaList[0]; for (const prop in Elements) { const element = Elements[prop]; if (element.update) { element.update.call(this); } } };