light-probe-group-footer.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. const { trackEventWithTimer } = require('../utils/metrics');
  2. const { getMessageProtocolScene } = require('../utils/prop');
  3. exports.template = `
  4. <div class="light-probe-group">
  5. <ui-button class="box">Edit Area Box</ui-button>
  6. <ui-button class="generate" tooltip="i18n:ENGINE.components.lightProbeGroup.generateTip">Generate Probes</ui-button>
  7. <ui-button class="blue edit" tooltip="i18n:ENGINE.components.lightProbeGroup.editTip">Enter Probe Edit Mode</ui-button>
  8. </div>
  9. `;
  10. exports.style = `
  11. .light-probe-group {
  12. display: flex;
  13. flex-wrap: wrap;
  14. margin-top: 6px;
  15. }
  16. .box {
  17. width: 48%;
  18. margin-right: 2%;
  19. }
  20. .generate {
  21. width: 48%;
  22. margin-left: 2%;
  23. }
  24. .edit {
  25. flex: 1;
  26. margin-top: 8px;
  27. }
  28. `;
  29. exports.$ = {
  30. box: '.box',
  31. generate: '.generate',
  32. edit: '.edit',
  33. };
  34. exports.update = async function(dump) {
  35. const panel = this;
  36. if (dump) {
  37. panel.dump = dump;
  38. }
  39. const mode = await Editor.Message.request(getMessageProtocolScene(this.$this), 'query-light-probe-edit-mode');
  40. panel.changeProbeMode(mode);
  41. const boxMode = await Editor.Message.request(getMessageProtocolScene(this.$this), 'query-light-probe-bounding-box-edit-mode');
  42. panel.changeProbeBoxMode(boxMode);
  43. };
  44. exports.ready = function() {
  45. const panel = this;
  46. panel.onGenerateConfirmBind = panel.onGenerateConfirm.bind(panel);
  47. panel.$.generate.addEventListener('confirm', panel.onGenerateConfirmBind);
  48. panel.onEditConfirmBind = panel.onEditConfirm.bind(panel);
  49. panel.$.edit.addEventListener('confirm', panel.onEditConfirmBind);
  50. panel.changeProbeModeBind = panel.changeProbeMode.bind(panel);
  51. Editor.Message.addBroadcastListener('scene:light-probe-edit-mode-changed', panel.changeProbeModeBind);
  52. panel.onBoxConfirmBind = panel.onBoxConfirm.bind(panel);
  53. panel.$.box.addEventListener('confirm', panel.onBoxConfirmBind);
  54. panel.changeProbeBoxModeBind = panel.changeProbeBoxMode.bind(panel);
  55. Editor.Message.addBroadcastListener('scene:light-probe-bounding-box-edit-mode-changed', panel.changeProbeBoxModeBind);
  56. };
  57. exports.close = function() {
  58. const panel = this;
  59. panel.$.generate.removeEventListener('confirm', panel.onGenerateConfirmBind);
  60. panel.$.edit.removeEventListener('confirm', panel.onEditConfirmBind);
  61. panel.$.box.removeEventListener('confirm', panel.onBoxConfirmBind);
  62. Editor.Message.removeBroadcastListener('scene:light-probe-edit-mode-changed', panel.changeProbeModeBind);
  63. Editor.Message.removeBroadcastListener('scene:light-probe-bounding-box-edit-mode-changed', panel.changeProbeBoxModeBind);
  64. };
  65. exports.methods = {
  66. changeProbeMode(mode) {
  67. const panel = this;
  68. panel.sceneProbeMode = mode;
  69. if (mode) {
  70. panel.$.edit.innerText = 'Exit Probe Edit Mode';
  71. panel.$.edit.classList.remove('blue');
  72. panel.$.edit.classList.add('red');
  73. } else {
  74. panel.$.edit.innerText = 'Enter Probe Edit Mode';
  75. panel.$.edit.classList.add('blue');
  76. panel.$.edit.classList.remove('red');
  77. }
  78. },
  79. changeProbeBoxMode(mode) {
  80. const panel = this;
  81. panel.sceneProbeBoxMode = mode;
  82. if (mode) {
  83. panel.$.box.innerText = 'Done Edit';
  84. panel.$.box.classList.add('red');
  85. } else {
  86. panel.$.box.innerText = 'Edit Area Box';
  87. panel.$.box.classList.remove('red');
  88. }
  89. },
  90. async onGenerateConfirm() {
  91. const result = await Editor.Dialog.warn(Editor.I18n.t('ENGINE.components.lightProbeGroup.generateWarnTip'), {
  92. buttons: [Editor.I18n.t('ENGINE.dialog.confirm'), Editor.I18n.t('ENGINE.dialog.cancel')],
  93. default: 0,
  94. cancel: 1,
  95. });
  96. if (result.response === 0) {
  97. // Turn off the box mode first
  98. if (this.sceneProbeBoxMode) {
  99. await Editor.Message.request(getMessageProtocolScene(this.$this), 'toggle-light-probe-bounding-box-edit-mode', !this.sceneProbeBoxMode);
  100. }
  101. const uuidObject = this.dump.value.uuid;
  102. const uuids = uuidObject.values ? uuidObject.values : [uuidObject.value];
  103. const undoID = await Editor.Message.request(getMessageProtocolScene(this.$this), 'begin-recording', uuids);
  104. for (const uuid of uuids) {
  105. Editor.Message.send(getMessageProtocolScene(this.$this), 'execute-component-method', {
  106. uuid: uuid,
  107. name: 'generateLightProbes',
  108. args: [],
  109. });
  110. }
  111. trackEventWithTimer('bakingSystem', 'A100006');
  112. await Editor.Message.request(getMessageProtocolScene(this.$this), 'end-recording', undoID);
  113. }
  114. },
  115. async onEditConfirm() {
  116. await Editor.Message.request(getMessageProtocolScene(this.$this), 'toggle-light-probe-edit-mode', !this.sceneProbeMode);
  117. trackEventWithTimer('bakingSystem', 'A100008');
  118. Editor.Panel.focus('scene');
  119. },
  120. async onBoxConfirm() {
  121. await Editor.Message.request(getMessageProtocolScene(this.$this), 'toggle-light-probe-bounding-box-edit-mode', !this.sceneProbeBoxMode);
  122. trackEventWithTimer('bakingSystem', 'A100007');
  123. Editor.Panel.focus('scene');
  124. },
  125. };