const { trackEventWithTimer } = require('../utils/metrics');
const { getMessageProtocolScene } = require('../utils/prop');
exports.template = `
Edit Area Box
Generate Probes
Enter Probe Edit Mode
`;
exports.style = `
.light-probe-group {
display: flex;
flex-wrap: wrap;
margin-top: 6px;
}
.box {
width: 48%;
margin-right: 2%;
}
.generate {
width: 48%;
margin-left: 2%;
}
.edit {
flex: 1;
margin-top: 8px;
}
`;
exports.$ = {
box: '.box',
generate: '.generate',
edit: '.edit',
};
exports.update = async function(dump) {
const panel = this;
if (dump) {
panel.dump = dump;
}
const mode = await Editor.Message.request(getMessageProtocolScene(this.$this), 'query-light-probe-edit-mode');
panel.changeProbeMode(mode);
const boxMode = await Editor.Message.request(getMessageProtocolScene(this.$this), 'query-light-probe-bounding-box-edit-mode');
panel.changeProbeBoxMode(boxMode);
};
exports.ready = function() {
const panel = this;
panel.onGenerateConfirmBind = panel.onGenerateConfirm.bind(panel);
panel.$.generate.addEventListener('confirm', panel.onGenerateConfirmBind);
panel.onEditConfirmBind = panel.onEditConfirm.bind(panel);
panel.$.edit.addEventListener('confirm', panel.onEditConfirmBind);
panel.changeProbeModeBind = panel.changeProbeMode.bind(panel);
Editor.Message.addBroadcastListener('scene:light-probe-edit-mode-changed', panel.changeProbeModeBind);
panel.onBoxConfirmBind = panel.onBoxConfirm.bind(panel);
panel.$.box.addEventListener('confirm', panel.onBoxConfirmBind);
panel.changeProbeBoxModeBind = panel.changeProbeBoxMode.bind(panel);
Editor.Message.addBroadcastListener('scene:light-probe-bounding-box-edit-mode-changed', panel.changeProbeBoxModeBind);
};
exports.close = function() {
const panel = this;
panel.$.generate.removeEventListener('confirm', panel.onGenerateConfirmBind);
panel.$.edit.removeEventListener('confirm', panel.onEditConfirmBind);
panel.$.box.removeEventListener('confirm', panel.onBoxConfirmBind);
Editor.Message.removeBroadcastListener('scene:light-probe-edit-mode-changed', panel.changeProbeModeBind);
Editor.Message.removeBroadcastListener('scene:light-probe-bounding-box-edit-mode-changed', panel.changeProbeBoxModeBind);
};
exports.methods = {
changeProbeMode(mode) {
const panel = this;
panel.sceneProbeMode = mode;
if (mode) {
panel.$.edit.innerText = 'Exit Probe Edit Mode';
panel.$.edit.classList.remove('blue');
panel.$.edit.classList.add('red');
} else {
panel.$.edit.innerText = 'Enter Probe Edit Mode';
panel.$.edit.classList.add('blue');
panel.$.edit.classList.remove('red');
}
},
changeProbeBoxMode(mode) {
const panel = this;
panel.sceneProbeBoxMode = mode;
if (mode) {
panel.$.box.innerText = 'Done Edit';
panel.$.box.classList.add('red');
} else {
panel.$.box.innerText = 'Edit Area Box';
panel.$.box.classList.remove('red');
}
},
async onGenerateConfirm() {
const result = await Editor.Dialog.warn(Editor.I18n.t('ENGINE.components.lightProbeGroup.generateWarnTip'), {
buttons: [Editor.I18n.t('ENGINE.dialog.confirm'), Editor.I18n.t('ENGINE.dialog.cancel')],
default: 0,
cancel: 1,
});
if (result.response === 0) {
// Turn off the box mode first
if (this.sceneProbeBoxMode) {
await Editor.Message.request(getMessageProtocolScene(this.$this), 'toggle-light-probe-bounding-box-edit-mode', !this.sceneProbeBoxMode);
}
const uuidObject = this.dump.value.uuid;
const uuids = uuidObject.values ? uuidObject.values : [uuidObject.value];
const undoID = await Editor.Message.request(getMessageProtocolScene(this.$this), 'begin-recording', uuids);
for (const uuid of uuids) {
Editor.Message.send(getMessageProtocolScene(this.$this), 'execute-component-method', {
uuid: uuid,
name: 'generateLightProbes',
args: [],
});
}
trackEventWithTimer('bakingSystem', 'A100006');
await Editor.Message.request(getMessageProtocolScene(this.$this), 'end-recording', undoID);
}
},
async onEditConfirm() {
await Editor.Message.request(getMessageProtocolScene(this.$this), 'toggle-light-probe-edit-mode', !this.sceneProbeMode);
trackEventWithTimer('bakingSystem', 'A100008');
Editor.Panel.focus('scene');
},
async onBoxConfirm() {
await Editor.Message.request(getMessageProtocolScene(this.$this), 'toggle-light-probe-bounding-box-edit-mode', !this.sceneProbeBoxMode);
trackEventWithTimer('bakingSystem', 'A100007');
Editor.Panel.focus('scene');
},
};