index.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. 'use strict';
  2. const { join } = require('path');
  3. const events = require('./events');
  4. module.paths.push(join(Editor.App.path, 'node_modules'));
  5. const Vue = require('vue/dist/vue.min.js');
  6. exports.ready = function() {
  7. this.eventVm = new Vue({
  8. el: this.$.events,
  9. template: events.template,
  10. data: events.data,
  11. methods: events.methods,
  12. components: events.components,
  13. mounted: events.mounted,
  14. beforeDestroy: events.beforeDestroy,
  15. });
  16. this.eventVm.$on('edit', (eventInfo) => {
  17. if (this.checkDisabledEditEvent()) {
  18. return;
  19. }
  20. this.eventEditorVm.frame = eventInfo.frame;
  21. this.eventEditorVm.RealFrame = Math.round(eventInfo && eventInfo.frame * this.curEditClipInfo.fps || 0);
  22. this.eventEditorVm.refresh(this.eventVm.events);
  23. });
  24. this.eventVm.$on('del', (eventInfo) => {
  25. if (this.checkDisabledEditEvent()) {
  26. return;
  27. }
  28. this.events.delEvent.call(this, eventInfo.frame);
  29. });
  30. this.eventVm.$on('move', (eventItem, timelineX) => {
  31. if (this.checkDisabledEditEvent()) {
  32. return;
  33. }
  34. this.events.moveEvent.call(this, eventItem, timelineX);
  35. });
  36. this.eventVm.$on('moveEnd', (eventItem) => {
  37. if (this.checkDisabledEditEvent()) {
  38. return;
  39. }
  40. this.eventVm.openEventEditor(eventItem.info);
  41. this.dispatch('snapshot');
  42. });
  43. };
  44. exports.update = function(eventInfos) {
  45. this.eventVm.refresh(eventInfos);
  46. this.eventEditorVm.refresh(eventInfos);
  47. };
  48. exports.apply = async function() {
  49. const clips = Object.keys(this.events.eventsMap);
  50. const meta = this.meta;
  51. for (let i = 0; i < clips.length; i++) {
  52. const uuid = clips[i];
  53. const metaData = meta.subMetas[uuid];
  54. if (metaData && metaData.userData) {
  55. const eventData = this.events.eventsMap[uuid];
  56. metaData.userData.events = eventData;
  57. }
  58. }
  59. this.events.eventsMap = {};
  60. };
  61. exports.addEvent = function(time, newFuncName = '') {
  62. const newInfo = {
  63. // 注意: frame 是时间
  64. frame: time,
  65. func: newFuncName,
  66. params: [],
  67. };
  68. const userData = this.curEditClipInfo.userData;
  69. if (!userData.events) {
  70. userData.events = [newInfo];
  71. } else {
  72. // 已经存在空记录
  73. if (!newFuncName && userData.events.some(event => event.frame === time && event.func === newFuncName)) {
  74. return;
  75. }
  76. let exist = false;
  77. for (const event of userData.events) {
  78. if (event.frame === time && event.func === '') {
  79. event.func = newFuncName;
  80. exist = true;
  81. break;
  82. }
  83. }
  84. if (!exist) {
  85. userData.events.push(newInfo);
  86. userData.events.sort((a, b) => a.frame - b.frame);
  87. }
  88. }
  89. this.updateEventInfo();
  90. this.dispatch('change');
  91. this.dispatch('snapshot');
  92. this.eventVm.openEventEditor(newInfo);
  93. };
  94. exports.delEvent = function(frame, info) {
  95. const userData = this.curEditClipInfo.userData;
  96. if (info) {
  97. userData.events = userData.events.filter((item) => item !== info);
  98. } else {
  99. // 删除多个
  100. userData.events = userData.events.filter((item) => item.frame !== frame);
  101. }
  102. this.updateEventInfo();
  103. this.dispatch('change');
  104. this.dispatch('snapshot');
  105. };
  106. exports.moveEvent = function(eventItem, timelineX) {
  107. const frame = Math.min(this.$.animationTime._config.max, Math.max(0, Math.round(this.$.animationTime.pixelToValue(timelineX))));
  108. eventItem.info.frame = frame / this.curEditClipInfo.fps;
  109. eventItem.x = this.$.animationTime.valueToPixel(frame);
  110. this.dispatch('change');
  111. };
  112. exports.unselect = function() {
  113. this.eventVm.unselect();
  114. this.eventEditorVm.unselect();
  115. };
  116. exports.updateEventInfo = function(eventInfos) {
  117. const userData = this.curEditClipInfo.userData;
  118. if (userData && userData.events && Array.isArray(eventInfos)) {
  119. eventInfos.forEach((eventInfo) => {
  120. if (!userData.events.includes(eventInfo)) {
  121. userData.events.push(eventInfo);
  122. }
  123. });
  124. }
  125. this.updateEventInfo();
  126. this.dispatch('change');
  127. this.dispatch('snapshot');
  128. };