AnimationItemWorkerOverride.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. import AnimationItem from './AnimationItem';
  2. import CanvasRenderer from '../renderers/CanvasRenderer';
  3. import dataManager from '../utils/DataManager';
  4. import {
  5. getExpressionsPlugin,
  6. } from '../utils/common';
  7. AnimationItem.prototype.setParams = function (params) {
  8. if (params.context) {
  9. this.context = params.context;
  10. }
  11. var animType = 'svg';
  12. if (params.animType) {
  13. animType = params.animType;
  14. } else if (params.renderer) {
  15. animType = params.renderer;
  16. }
  17. switch (animType) {
  18. case 'canvas':
  19. this.renderer = new CanvasRenderer(this, params.rendererSettings);
  20. break;
  21. default:
  22. throw new Error('Only canvas renderer is supported when using worker.');
  23. }
  24. this.renderer.setProjectInterface(this.projectInterface);
  25. this.animType = animType;
  26. if (params.loop === ''
  27. || params.loop === null
  28. || params.loop === undefined
  29. || params.loop === true) {
  30. this.loop = true;
  31. } else if (params.loop === false) {
  32. this.loop = false;
  33. } else {
  34. this.loop = parseInt(params.loop, 10);
  35. }
  36. this.autoplay = 'autoplay' in params ? params.autoplay : true;
  37. this.name = params.name ? params.name : '';
  38. this.autoloadSegments = Object.prototype.hasOwnProperty.call(params, 'autoloadSegments') ? params.autoloadSegments : true;
  39. this.assetsPath = null;
  40. if (params.animationData) {
  41. dataManager.completeAnimation(
  42. params.animationData,
  43. this.configAnimation
  44. );
  45. } else if (params.path) {
  46. throw new Error('Canvas worker renderer cannot load animation from url');
  47. }
  48. };
  49. AnimationItem.prototype.setData = function () {
  50. throw new Error('Cannot set data on wrapper for canvas worker renderer');
  51. };
  52. AnimationItem.prototype.includeLayers = function (data) {
  53. if (data.op > this.animationData.op) {
  54. this.animationData.op = data.op;
  55. this.totalFrames = Math.floor(data.op - this.animationData.ip);
  56. }
  57. var layers = this.animationData.layers;
  58. var i;
  59. var len = layers.length;
  60. var newLayers = data.layers;
  61. var j;
  62. var jLen = newLayers.length;
  63. for (j = 0; j < jLen; j += 1) {
  64. i = 0;
  65. while (i < len) {
  66. if (layers[i].id === newLayers[j].id) {
  67. layers[i] = newLayers[j];
  68. break;
  69. }
  70. i += 1;
  71. }
  72. }
  73. this.animationData.__complete = false;
  74. dataManager.completeAnimation(this.animationData);
  75. this.renderer.includeLayers(data.layers);
  76. var expressionsPlugin = getExpressionsPlugin();
  77. if (expressionsPlugin) {
  78. expressionsPlugin.initExpressions(this);
  79. }
  80. this.loadNextSegment();
  81. };
  82. AnimationItem.prototype.loadNextSegment = function () {
  83. var segments = this.animationData.segments;
  84. if (!segments || segments.length === 0 || !this.autoloadSegments) {
  85. this.timeCompleted = this.totalFrames;
  86. return;
  87. }
  88. throw new Error('Cannot load multiple segments in worker.');
  89. };
  90. AnimationItem.prototype.loadSegments = function () {
  91. var segments = this.animationData.segments;
  92. if (!segments) {
  93. this.timeCompleted = this.totalFrames;
  94. }
  95. this.loadNextSegment();
  96. };
  97. AnimationItem.prototype.imagesLoaded = null;
  98. AnimationItem.prototype.preloadImages = null;
  99. AnimationItem.prototype.configAnimation = function (animData) {
  100. if (!this.renderer) {
  101. return;
  102. }
  103. this.animationData = animData;
  104. this.totalFrames = Math.floor(this.animationData.op - this.animationData.ip);
  105. this.renderer.configAnimation(animData);
  106. if (!animData.assets) {
  107. animData.assets = [];
  108. }
  109. this.renderer.searchExtraCompositions(animData.assets);
  110. this.assets = this.animationData.assets;
  111. this.frameRate = this.animationData.fr;
  112. this.firstFrame = Math.round(this.animationData.ip);
  113. this.frameMult = this.animationData.fr / 1000;
  114. this.loadSegments();
  115. this.updaFrameModifier();
  116. this.checkLoaded();
  117. };
  118. AnimationItem.prototype.waitForFontsLoaded = null;
  119. AnimationItem.prototype.checkLoaded = function () {
  120. if (!this.isLoaded) {
  121. this.isLoaded = true;
  122. var expressionsPlugin = getExpressionsPlugin();
  123. if (expressionsPlugin) {
  124. expressionsPlugin.initExpressions(this);
  125. }
  126. this.renderer.initItems();
  127. this.gotoFrame();
  128. }
  129. };
  130. AnimationItem.prototype.destroy = function (name) {
  131. if ((name && this.name !== name) || !this.renderer) {
  132. return;
  133. }
  134. this.renderer.destroy();
  135. this._cbs = null;
  136. this.onEnterFrame = null;
  137. this.onLoopComplete = null;
  138. this.onComplete = null;
  139. this.onSegmentStart = null;
  140. this.onDestroy = null;
  141. this.renderer = null;
  142. };
  143. AnimationItem.prototype.getPath = null;