BaseRenderer.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. import FontManager from '../utils/FontManager';
  2. import slotFactory from '../utils/SlotManager';
  3. import FootageElement from '../elements/FootageElement';
  4. import AudioElement from '../elements/AudioElement';
  5. function BaseRenderer() {}
  6. BaseRenderer.prototype.checkLayers = function (num) {
  7. var i;
  8. var len = this.layers.length;
  9. var data;
  10. this.completeLayers = true;
  11. for (i = len - 1; i >= 0; i -= 1) {
  12. if (!this.elements[i]) {
  13. data = this.layers[i];
  14. if (data.ip - data.st <= (num - this.layers[i].st) && data.op - data.st > (num - this.layers[i].st)) {
  15. this.buildItem(i);
  16. }
  17. }
  18. this.completeLayers = this.elements[i] ? this.completeLayers : false;
  19. }
  20. this.checkPendingElements();
  21. };
  22. BaseRenderer.prototype.createItem = function (layer) {
  23. switch (layer.ty) {
  24. case 2:
  25. return this.createImage(layer);
  26. case 0:
  27. return this.createComp(layer);
  28. case 1:
  29. return this.createSolid(layer);
  30. case 3:
  31. return this.createNull(layer);
  32. case 4:
  33. return this.createShape(layer);
  34. case 5:
  35. return this.createText(layer);
  36. case 6:
  37. return this.createAudio(layer);
  38. case 13:
  39. return this.createCamera(layer);
  40. case 15:
  41. return this.createFootage(layer);
  42. default:
  43. return this.createNull(layer);
  44. }
  45. };
  46. BaseRenderer.prototype.createCamera = function () {
  47. throw new Error('You\'re using a 3d camera. Try the html renderer.');
  48. };
  49. BaseRenderer.prototype.createAudio = function (data) {
  50. return new AudioElement(data, this.globalData, this);
  51. };
  52. BaseRenderer.prototype.createFootage = function (data) {
  53. return new FootageElement(data, this.globalData, this);
  54. };
  55. BaseRenderer.prototype.buildAllItems = function () {
  56. var i;
  57. var len = this.layers.length;
  58. for (i = 0; i < len; i += 1) {
  59. this.buildItem(i);
  60. }
  61. this.checkPendingElements();
  62. };
  63. BaseRenderer.prototype.includeLayers = function (newLayers) {
  64. this.completeLayers = false;
  65. var i;
  66. var len = newLayers.length;
  67. var j;
  68. var jLen = this.layers.length;
  69. for (i = 0; i < len; i += 1) {
  70. j = 0;
  71. while (j < jLen) {
  72. if (this.layers[j].id === newLayers[i].id) {
  73. this.layers[j] = newLayers[i];
  74. break;
  75. }
  76. j += 1;
  77. }
  78. }
  79. };
  80. BaseRenderer.prototype.setProjectInterface = function (pInterface) {
  81. this.globalData.projectInterface = pInterface;
  82. };
  83. BaseRenderer.prototype.initItems = function () {
  84. if (!this.globalData.progressiveLoad) {
  85. this.buildAllItems();
  86. }
  87. };
  88. BaseRenderer.prototype.buildElementParenting = function (element, parentName, hierarchy) {
  89. var elements = this.elements;
  90. var layers = this.layers;
  91. var i = 0;
  92. var len = layers.length;
  93. while (i < len) {
  94. if (layers[i].ind == parentName) { // eslint-disable-line eqeqeq
  95. if (!elements[i] || elements[i] === true) {
  96. this.buildItem(i);
  97. this.addPendingElement(element);
  98. } else {
  99. hierarchy.push(elements[i]);
  100. elements[i].setAsParent();
  101. if (layers[i].parent !== undefined) {
  102. this.buildElementParenting(element, layers[i].parent, hierarchy);
  103. } else {
  104. element.setHierarchy(hierarchy);
  105. }
  106. }
  107. }
  108. i += 1;
  109. }
  110. };
  111. BaseRenderer.prototype.addPendingElement = function (element) {
  112. this.pendingElements.push(element);
  113. };
  114. BaseRenderer.prototype.searchExtraCompositions = function (assets) {
  115. var i;
  116. var len = assets.length;
  117. for (i = 0; i < len; i += 1) {
  118. if (assets[i].xt) {
  119. var comp = this.createComp(assets[i]);
  120. comp.initExpressions();
  121. this.globalData.projectInterface.registerComposition(comp);
  122. }
  123. }
  124. };
  125. BaseRenderer.prototype.getElementById = function (ind) {
  126. var i;
  127. var len = this.elements.length;
  128. for (i = 0; i < len; i += 1) {
  129. if (this.elements[i].data.ind === ind) {
  130. return this.elements[i];
  131. }
  132. }
  133. return null;
  134. };
  135. BaseRenderer.prototype.getElementByPath = function (path) {
  136. var pathValue = path.shift();
  137. var element;
  138. if (typeof pathValue === 'number') {
  139. element = this.elements[pathValue];
  140. } else {
  141. var i;
  142. var len = this.elements.length;
  143. for (i = 0; i < len; i += 1) {
  144. if (this.elements[i].data.nm === pathValue) {
  145. element = this.elements[i];
  146. break;
  147. }
  148. }
  149. }
  150. if (path.length === 0) {
  151. return element;
  152. }
  153. return element.getElementByPath(path);
  154. };
  155. BaseRenderer.prototype.setupGlobalData = function (animData, fontsContainer) {
  156. this.globalData.fontManager = new FontManager();
  157. this.globalData.slotManager = slotFactory(animData);
  158. this.globalData.fontManager.addChars(animData.chars);
  159. this.globalData.fontManager.addFonts(animData.fonts, fontsContainer);
  160. this.globalData.getAssetData = this.animationItem.getAssetData.bind(this.animationItem);
  161. this.globalData.getAssetsPath = this.animationItem.getAssetsPath.bind(this.animationItem);
  162. this.globalData.imageLoader = this.animationItem.imagePreloader;
  163. this.globalData.audioController = this.animationItem.audioController;
  164. this.globalData.frameId = 0;
  165. this.globalData.frameRate = animData.fr;
  166. this.globalData.nm = animData.nm;
  167. this.globalData.compSize = {
  168. w: animData.w,
  169. h: animData.h,
  170. };
  171. };
  172. export default BaseRenderer;