'use strict'; exports.template = /* html */`
`; exports.style = /* css */` .asset-render-pipeline { padding-right: 4px; } .asset-render-pipeline[multiple-invalid] > *:not(.multiple-warn-tip) { display: none!important; } .asset-render-pipeline[multiple-invalid] > .multiple-warn-tip { display: block; } .asset-render-pipeline .multiple-warn-tip { display: none; text-align: center; color: var(--color-focus-contrast-weakest); margin-top: 8px; } `; exports.$ = { container: '.asset-render-pipeline', prop: '.dump-prop', }; exports.methods = { record() { return JSON.stringify(this.pipeline); }, async restore(record) { record = JSON.parse(record); if (!record || typeof record !== 'object') { return false; } this.pipeline = record; await this.change(); return true; }, async query(uuid) { return await Editor.Message.request('scene', 'query-render-pipeline', uuid); }, async apply() { this.reset(); await Editor.Message.request('scene', 'apply-render-pipeline', this.asset.uuid, this.pipeline); }, abort() { this.reset(); }, reset() { /** * reset 环节只需把 uuid 清空 * 会重新进入 panel.update 周期,根据 uuid 为空的条件,把 this.dirtyData.origin 重新填充 */ this.dirtyData.uuid = ''; }, async change() { this.pipeline = await Editor.Message.request('scene', 'change-render-pipeline', this.pipeline); this.updateInterface(); this.setDirtyData(); this.dispatch('change'); }, snapshot() { this.dispatch('snapshot'); }, updateInterface() { this.LoopUpdateReadonly(this.pipeline); this.$.prop.render(this.pipeline); }, LoopUpdateReadonly(obj) { if (this.asset.readonly) { if (obj && 'readonly' in obj && 'value' in obj) { obj.readonly = true; if (typeof obj.value === 'object') { for (const key in obj.value) { this.LoopUpdateReadonly(obj.value[key]); } } } } }, setDirtyData() { this.dirtyData.realtime = JSON.stringify(this.pipeline); if (!this.dirtyData.origin) { this.dirtyData.origin = this.dirtyData.realtime; } }, isDirty() { const isDirty = this.dirtyData.origin !== this.dirtyData.realtime; return isDirty; }, }; exports.ready = function() { this.$.container.addEventListener('change-dump', this.change.bind(this)); this.$.container.addEventListener('confirm-dump', this.snapshot.bind(this)); // Used to determine whether the material has been modified in isDirty() this.dirtyData = { uuid: '', origin: '', realtime: '', }; }; exports.update = async function(assetList, metaList) { this.assetList = assetList; this.metaList = metaList; this.meta = this.metaList[0]; this.asset = this.assetList[0]; if (assetList.length > 1) { this.$.container.setAttribute('multiple-invalid', ''); return; } else { this.$.container.removeAttribute('multiple-invalid'); } if (this.dirtyData.uuid !== this.asset.uuid) { this.dirtyData.uuid = this.asset.uuid; this.dirtyData.origin = ''; } this.pipeline = await this.query(this.asset.uuid); this.updateInterface(); this.setDirtyData(); }; exports.close = function() { // Used to determine whether the material has been modified in isDirty() this.dirtyData = { uuid: '', origin: '', realtime: '', }; };