'use strict'; exports.template = /* html */`
`; exports.style = /* css */` .asset-physics-material { padding-right: 4px; } .asset-physics-material[multiple-invalid] > *:not(.multiple-warn-tip) { display: none!important; } .asset-physics-material[multiple-invalid] > .multiple-warn-tip { display: block; } .asset-physics-material .multiple-warn-tip { display: none; text-align: center; color: var(--color-focus-contrast-weakest); margin-top: 8px; } `; exports.$ = { container: '.asset-physics-material', }; exports.methods = { record() { return JSON.stringify(this.queryData); }, async restore(record) { record = JSON.parse(record); if (!record || typeof record !== 'object') { return false; } this.queryData = record; await this.change(); return true; }, async query(uuid) { return await Editor.Message.request('scene', 'query-physics-material', uuid); }, async apply() { this.reset(); await Editor.Message.request('scene', 'apply-physics-material', this.asset.uuid, this.queryData); }, abort() { this.reset(); }, reset() { /** * reset 环节只需把 uuid 清空 * 会重新进入 panel.update 周期,根据 uuid 为空的条件,把 this.dirtyData.origin 重新填充 */ this.dirtyData.uuid = ''; }, async change() { this.queryData = await Editor.Message.request('scene', 'change-physics-material', this.queryData); this.updateInterface(); this.setDirtyData(); this.dispatch('change'); }, snapshot() { this.dispatch('snapshot'); }, updateInterface() { for (const key in this.queryData) { const dump = this.queryData[key]; if (!dump.visible) { continue; } // reuse if (!this.$[key]) { this.$[key] = document.createElement('ui-prop'); this.$[key].setAttribute('type', 'dump'); this.$.container.appendChild(this.$[key]); } if (this.asset.readonly) { dump.readonly = true; } this.$[key].render(dump); } }, setDirtyData() { this.dirtyData.realtime = JSON.stringify(this.queryData); 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(); }); this.$.container.addEventListener('confirm-dump', () => { this.snapshot(); }); // 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.asset = assetList[0]; this.meta = metaList[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.queryData = 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: '', }; };