| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- 'use strict';
- exports.template = /* html */`
- <section class="asset-physics-material">
- <ui-label class="multiple-warn-tip" value="i18n:ENGINE.assets.multipleWarning"></ui-label>
- </section>
- `;
- 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: '',
- };
- };
|