@babylonjs/lottie-player 8.24.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/animationConfiguration.d.ts +80 -0
  2. package/animationConfiguration.d.ts.map +1 -0
  3. package/animationConfiguration.js +16 -0
  4. package/animationConfiguration.js.map +1 -0
  5. package/index.d.ts +4 -0
  6. package/index.d.ts.map +1 -0
  7. package/index.js +3 -0
  8. package/index.js.map +1 -0
  9. package/license.md +21 -0
  10. package/localPlayer.d.ts +38 -0
  11. package/localPlayer.d.ts.map +1 -0
  12. package/localPlayer.js +100 -0
  13. package/localPlayer.js.map +1 -0
  14. package/maths/bezier.d.ts +45 -0
  15. package/maths/bezier.d.ts.map +1 -0
  16. package/maths/bezier.js +53 -0
  17. package/maths/bezier.js.map +1 -0
  18. package/maths/boundingBox.d.ts +39 -0
  19. package/maths/boundingBox.d.ts.map +1 -0
  20. package/maths/boundingBox.js +204 -0
  21. package/maths/boundingBox.js.map +1 -0
  22. package/maths/matrix.d.ts +92 -0
  23. package/maths/matrix.d.ts.map +1 -0
  24. package/maths/matrix.js +174 -0
  25. package/maths/matrix.js.map +1 -0
  26. package/messageTypes.d.ts +88 -0
  27. package/messageTypes.d.ts.map +1 -0
  28. package/messageTypes.js +2 -0
  29. package/messageTypes.js.map +1 -0
  30. package/nodes/controlNode.d.ts +32 -0
  31. package/nodes/controlNode.d.ts.map +1 -0
  32. package/nodes/controlNode.js +38 -0
  33. package/nodes/controlNode.js.map +1 -0
  34. package/nodes/node.d.ts +121 -0
  35. package/nodes/node.d.ts.map +1 -0
  36. package/nodes/node.js +357 -0
  37. package/nodes/node.js.map +1 -0
  38. package/nodes/spriteNode.d.ts +32 -0
  39. package/nodes/spriteNode.d.ts.map +1 -0
  40. package/nodes/spriteNode.js +51 -0
  41. package/nodes/spriteNode.js.map +1 -0
  42. package/package.json +48 -0
  43. package/parsing/parsedTypes.d.ts +141 -0
  44. package/parsing/parsedTypes.d.ts.map +1 -0
  45. package/parsing/parsedTypes.js +2 -0
  46. package/parsing/parsedTypes.js.map +1 -0
  47. package/parsing/parser.d.ts +59 -0
  48. package/parsing/parser.d.ts.map +1 -0
  49. package/parsing/parser.js +500 -0
  50. package/parsing/parser.js.map +1 -0
  51. package/parsing/rawTypes.d.ts +238 -0
  52. package/parsing/rawTypes.d.ts.map +1 -0
  53. package/parsing/rawTypes.js +4 -0
  54. package/parsing/rawTypes.js.map +1 -0
  55. package/parsing/spritePacker.d.ts +122 -0
  56. package/parsing/spritePacker.d.ts.map +1 -0
  57. package/parsing/spritePacker.js +409 -0
  58. package/parsing/spritePacker.js.map +1 -0
  59. package/player.d.ts +42 -0
  60. package/player.d.ts.map +1 -0
  61. package/player.js +146 -0
  62. package/player.js.map +1 -0
  63. package/readme.md +44 -0
  64. package/rendering/animationController.d.ts +93 -0
  65. package/rendering/animationController.d.ts.map +1 -0
  66. package/rendering/animationController.js +246 -0
  67. package/rendering/animationController.js.map +1 -0
  68. package/rendering/renderingManager.d.ts +46 -0
  69. package/rendering/renderingManager.d.ts.map +1 -0
  70. package/rendering/renderingManager.js +61 -0
  71. package/rendering/renderingManager.js.map +1 -0
  72. package/worker.d.ts +2 -0
  73. package/worker.d.ts.map +1 -0
  74. package/worker.js +62 -0
  75. package/worker.js.map +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parsedTypes.js","sourceRoot":"","sources":["../../../../dev/lottiePlayer/src/parsing/parsedTypes.ts"],"names":[],"mappings":""}
@@ -0,0 +1,59 @@
1
+ import type { RawLottieAnimation } from "./rawTypes.js";
2
+ import type { AnimationInfo } from "./parsedTypes.js";
3
+ import type { SpritePacker } from "./spritePacker.js";
4
+ import type { RenderingManager } from "../rendering/renderingManager.js";
5
+ import type { AnimationConfiguration } from "../animationConfiguration.js";
6
+ /**
7
+ * Parses a lottie animation file from a URL and returns the json representation of the file.
8
+ * @param urlToFile The URL to the Lottie animation file.
9
+ * @returns The json representation of the lottie animation.
10
+ */
11
+ export declare function GetRawAnimationDataAsync(urlToFile: string): Promise<RawLottieAnimation>;
12
+ /**
13
+ * Parses a lottie animation file and converts it into a format that can be rendered by Babylon.js
14
+ * Important: not all lottie features are supported, you can call .debug() after parsing an animation to see what features were not supported.
15
+ */
16
+ export declare class Parser {
17
+ private _packer;
18
+ private readonly _configuration;
19
+ private readonly _animationInfo;
20
+ private readonly _renderingManager;
21
+ private _rawFonts;
22
+ private _unsupportedFeatures;
23
+ private _rootNodes;
24
+ private _parentNodes;
25
+ /**
26
+ * Get the animation information parsed from the Lottie file.
27
+ */
28
+ get animationInfo(): AnimationInfo;
29
+ /**
30
+ * Creates a new instance of the Lottie animations parser.
31
+ * @param packer Object that packs the sprites from the animation into a texture atlas.
32
+ * @param animationData The raw lottie animation as a JSON object.
33
+ * @param configuration Configuration options for the animation parser.
34
+ * @param renderingManager Object that manages the rendering of the sprites in the animation.
35
+ */
36
+ constructor(packer: SpritePacker, animationData: RawLottieAnimation, configuration: AnimationConfiguration, renderingManager: RenderingManager);
37
+ /**
38
+ * Logs to the console all issues that were encountered during parsing the file.
39
+ */
40
+ debug(): void;
41
+ private _loadFromData;
42
+ private _parseFonts;
43
+ private _reoderLayers;
44
+ private _searchBfs;
45
+ private _visitDfs;
46
+ private _parseLayer;
47
+ private _parseNullLayer;
48
+ private _parseShapeLayer;
49
+ private _parseTextLayer;
50
+ private _parseElements;
51
+ private _parseGroup;
52
+ private _parseShapes;
53
+ private _getTransform;
54
+ private _parseTransform;
55
+ private _fromLottieScalarToBabylonScalar;
56
+ private _fromLottieVector2ToBabylonVector2;
57
+ private _calculateFinalVector;
58
+ }
59
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../../dev/lottiePlayer/src/parsing/parser.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAGR,kBAAkB,EASrB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,aAAa,EAA+E,MAAM,eAAe,CAAC;AAEhI,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAKnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAItE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AA6BxE;;;;GAIG;AACH,wBAAsB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAG7F;AAED;;;GAGG;AACH,qBAAa,MAAM;IACf,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyB;IACxD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAmB;IAErD,OAAO,CAAC,SAAS,CAAoD;IACrE,OAAO,CAAC,oBAAoB,CAAW;IAEvC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,YAAY,CAA8C;IAElE;;OAEG;IACH,IAAW,aAAa,IAAI,aAAa,CAExC;IAED;;;;;;OAMG;gBACgB,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,aAAa,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,gBAAgB;IAarJ;;OAEG;IACI,KAAK;IAOZ,OAAO,CAAC,aAAa;IA+BrB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,aAAa;IAyDrB,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,SAAS;IAcjB,OAAO,CAAC,WAAW;IAmEnB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,eAAe;IAmDvB,OAAO,CAAC,cAAc;IA2BtB,OAAO,CAAC,WAAW;IA4BnB,OAAO,CAAC,YAAY;IAwCpB,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,gCAAgC;IAyFxC,OAAO,CAAC,kCAAkC;IA+F1C,OAAO,CAAC,qBAAqB;CA6DhC"}
@@ -0,0 +1,500 @@
1
+ import { ThinSprite } from "@babylonjs/core/Sprites/thinSprite.js";
2
+ import { SpriteNode } from "../nodes/spriteNode.js";
3
+ import { BezierCurve } from "../maths/bezier.js";
4
+ import { Node } from "../nodes/node.js";
5
+ import { ControlNode } from "../nodes/controlNode.js";
6
+ /**
7
+ * Default scale value for the scale property of a Lottie transform.
8
+ */
9
+ const DefaultScale = { x: 1, y: 1 };
10
+ /**
11
+ * Default position value for the position property of a Lottie transform.
12
+ */
13
+ const DefaultPosition = { x: 0, y: 0 };
14
+ /**
15
+ * Parses a lottie animation file from a URL and returns the json representation of the file.
16
+ * @param urlToFile The URL to the Lottie animation file.
17
+ * @returns The json representation of the lottie animation.
18
+ */
19
+ export async function GetRawAnimationDataAsync(urlToFile) {
20
+ const animationData = await (await fetch(urlToFile)).text();
21
+ return JSON.parse(animationData);
22
+ }
23
+ /**
24
+ * Parses a lottie animation file and converts it into a format that can be rendered by Babylon.js
25
+ * Important: not all lottie features are supported, you can call .debug() after parsing an animation to see what features were not supported.
26
+ */
27
+ export class Parser {
28
+ /**
29
+ * Get the animation information parsed from the Lottie file.
30
+ */
31
+ get animationInfo() {
32
+ return this._animationInfo;
33
+ }
34
+ /**
35
+ * Creates a new instance of the Lottie animations parser.
36
+ * @param packer Object that packs the sprites from the animation into a texture atlas.
37
+ * @param animationData The raw lottie animation as a JSON object.
38
+ * @param configuration Configuration options for the animation parser.
39
+ * @param renderingManager Object that manages the rendering of the sprites in the animation.
40
+ */
41
+ constructor(packer, animationData, configuration, renderingManager) {
42
+ this._rawFonts = new Map(); // Map of font names to raw font data
43
+ this._parentNodes = new Map(); // Map of nodes to build the scenegraph from the animation layers
44
+ this._packer = packer;
45
+ this._configuration = configuration;
46
+ this._renderingManager = renderingManager;
47
+ this._unsupportedFeatures = [];
48
+ this._parentNodes = new Map();
49
+ this._rootNodes = [];
50
+ this._animationInfo = this._loadFromData(animationData);
51
+ }
52
+ /**
53
+ * Logs to the console all issues that were encountered during parsing the file.
54
+ */
55
+ debug() {
56
+ for (let i = 0; i < this._unsupportedFeatures.length; i++) {
57
+ // eslint-disable-next-line no-console
58
+ console.log(this._unsupportedFeatures[i]);
59
+ }
60
+ }
61
+ _loadFromData(rawData) {
62
+ this._unsupportedFeatures.length = 0; // Clear previous errors
63
+ this._parseFonts(rawData);
64
+ // Layers data may come unorderer, we need to short into child-parents but maintaining z-order before parsing
65
+ const orderedLayers = this._reoderLayers(rawData.layers);
66
+ for (let i = 0; i < orderedLayers.length; i++) {
67
+ this._parseLayer(orderedLayers[i]);
68
+ }
69
+ // Update the atlas texture after creating all sprites from the animation
70
+ this._packer.updateAtlasTexture();
71
+ // Reorder the sprites from back to front
72
+ this._renderingManager.ready();
73
+ // Release the canvas to avoid memory leaks
74
+ this._packer.releaseCanvas();
75
+ this._packer = undefined; // Clear the reference to the sprite packer to allow garbage collection
76
+ return {
77
+ startFrame: rawData.ip,
78
+ endFrame: rawData.op,
79
+ frameRate: rawData.fr,
80
+ widthPx: rawData.w,
81
+ heightPx: rawData.h,
82
+ nodes: this._rootNodes,
83
+ };
84
+ }
85
+ _parseFonts(rawData) {
86
+ if (rawData.fonts && rawData.fonts.list) {
87
+ for (const font of rawData.fonts.list) {
88
+ this._rawFonts.set(font.fName, font);
89
+ }
90
+ this._packer.rawFonts = this._rawFonts;
91
+ }
92
+ }
93
+ _reoderLayers(layers) {
94
+ let unusedIndex = Number.MIN_SAFE_INTEGER;
95
+ const layerTrees = [];
96
+ let movedLayers = Number.MAX_VALUE;
97
+ while (movedLayers > 0) {
98
+ movedLayers = 0;
99
+ for (let i = 0; i < layers.length; i++) {
100
+ const layer = layers[i];
101
+ if (layer.ind === undefined) {
102
+ layer.ind = unusedIndex--; // Assign an unused index to the layer if it has no index
103
+ }
104
+ // Layers with no parents are top-level layers, push them to the final layers
105
+ // in the same order they are declared to preserve the z-order
106
+ if (layer.parent === undefined) {
107
+ layerTrees.push({
108
+ layer,
109
+ children: [],
110
+ });
111
+ layers.splice(i, 1);
112
+ i--;
113
+ movedLayers++;
114
+ }
115
+ else {
116
+ for (let j = 0; j < layerTrees.length; j++) {
117
+ const parent = this._searchBfs(layerTrees[j], layer.parent);
118
+ if (parent) {
119
+ parent.children.push({
120
+ layer,
121
+ children: [],
122
+ });
123
+ layers.splice(i, 1);
124
+ i--;
125
+ movedLayers++;
126
+ break;
127
+ }
128
+ }
129
+ }
130
+ }
131
+ }
132
+ // Finally, convert the map to an array of layers
133
+ const finalLayersArray = [];
134
+ for (let i = 0; i < layerTrees.length; i++) {
135
+ finalLayersArray.push(...this._visitDfs(layerTrees[i]));
136
+ }
137
+ if (layers.length > 0) {
138
+ finalLayersArray.push(...layers); // Add any remaining layers that were not processed
139
+ }
140
+ return finalLayersArray;
141
+ }
142
+ _searchBfs(tree, index) {
143
+ const queue = [tree];
144
+ while (queue.length > 0) {
145
+ const current = queue.shift();
146
+ if (current.layer.ind === index) {
147
+ return current;
148
+ }
149
+ for (let i = 0; i < current.children.length; i++) {
150
+ queue.push(current.children[i]);
151
+ }
152
+ }
153
+ return undefined;
154
+ }
155
+ _visitDfs(tree) {
156
+ const result = [];
157
+ const visit = (node) => {
158
+ result.push(node.layer);
159
+ for (let i = 0; i < node.children.length; i++) {
160
+ visit(node.children[i]);
161
+ }
162
+ };
163
+ visit(tree);
164
+ return result;
165
+ }
166
+ _parseLayer(layer) {
167
+ if (layer.hd === true) {
168
+ return; // Ignore hidden layers
169
+ }
170
+ // We only support null, shape and text layers
171
+ if (layer.ty !== 3 && layer.ty !== 4 && layer.ty !== 5) {
172
+ this._unsupportedFeatures.push(`UnsupportedLayerType - Layer Name: ${layer.nm} - Layer Index: ${layer.ind} - Layer Type: ${layer.ty}`);
173
+ return;
174
+ }
175
+ if (layer.ip === undefined || layer.op === undefined || layer.st === undefined) {
176
+ this._unsupportedFeatures.push(`Layer without required values - Layer Name: ${layer.nm}`);
177
+ return;
178
+ }
179
+ let parentNode = undefined;
180
+ if (layer.parent) {
181
+ parentNode = this._parentNodes.get(layer.parent);
182
+ if (parentNode === undefined) {
183
+ this._unsupportedFeatures.push(`Parent node with index ${layer.parent} not found for layer ${layer.nm}`);
184
+ }
185
+ }
186
+ const transform = this._parseTransform(layer.ks);
187
+ const trsNode = new ControlNode(`ControlNode (TRS) - ${layer.nm}`, layer.ip, layer.op, transform.position, transform.rotation, transform.scale, transform.opacity, parentNode);
188
+ let anchorNode = undefined;
189
+ switch (layer.ty) {
190
+ case 3: // Null layer
191
+ anchorNode = this._parseNullLayer(layer, transform, trsNode);
192
+ break;
193
+ case 4: // Shape layer
194
+ anchorNode = this._parseShapeLayer(layer, transform, trsNode);
195
+ break;
196
+ case 5: // Text layer
197
+ anchorNode = this._parseTextLayer(layer, transform, trsNode);
198
+ if (anchorNode === undefined) {
199
+ return;
200
+ }
201
+ break;
202
+ }
203
+ // If no parent, this is a top level node, add it to the root nodes for rendering
204
+ if (layer.parent === undefined) {
205
+ this._rootNodes.push(trsNode);
206
+ }
207
+ if (anchorNode === undefined) {
208
+ this._unsupportedFeatures.push(`Layer ${layer.nm} did not generate an anchor node, this is unexpected and should be investigated.`);
209
+ }
210
+ if (layer.ind !== undefined && anchorNode) {
211
+ this._parentNodes.set(layer.ind, anchorNode);
212
+ }
213
+ }
214
+ _parseNullLayer(layer, transform, parent) {
215
+ return new Node(`Node (Anchor) - ${layer.nm}`, transform.anchorPoint, undefined, // Rotation is not used for anchor point
216
+ undefined, // Scale is not used for anchor point
217
+ undefined, // Opacity is not used for anchor point
218
+ parent);
219
+ }
220
+ _parseShapeLayer(layer, transform, parent) {
221
+ const anchorNode = this._parseNullLayer(layer, transform, parent);
222
+ this._parseElements(layer.shapes, anchorNode);
223
+ return anchorNode;
224
+ }
225
+ _parseTextLayer(layer, transform, parent) {
226
+ // Get the scale and add the sprite to the texture packer
227
+ const currentScale = { x: 1, y: 1 };
228
+ const tempPosition = { x: 1, y: 1 };
229
+ parent.worldMatrix.decompose(currentScale, tempPosition);
230
+ const spriteInfo = this._packer.addLottieText(layer.t, currentScale);
231
+ if (spriteInfo === undefined) {
232
+ return undefined;
233
+ }
234
+ // Build the ThinSprite from the texture packer information
235
+ const sprite = new ThinSprite();
236
+ // Set sprite UV coordinates
237
+ sprite._xOffset = spriteInfo.uOffset;
238
+ sprite._yOffset = spriteInfo.vOffset;
239
+ sprite._xSize = spriteInfo.cellWidth;
240
+ sprite._ySize = spriteInfo.cellHeight;
241
+ // Set sprite dimensions for rendering
242
+ sprite.width = spriteInfo.widthPx;
243
+ sprite.height = spriteInfo.heightPx;
244
+ sprite.invertV = true;
245
+ this._renderingManager.addSprite(sprite);
246
+ const positionProperty = {
247
+ startValue: { x: transform.anchorPoint.startValue.x, y: transform.anchorPoint.startValue.y },
248
+ currentValue: { x: transform.anchorPoint.currentValue.x, y: transform.anchorPoint.currentValue.y },
249
+ currentKeyframeIndex: 0,
250
+ };
251
+ positionProperty.startValue.x += spriteInfo.centerX;
252
+ positionProperty.currentValue.x += spriteInfo.centerX;
253
+ // For text, its Y position is at the baseline, so we need to offset it by half the height of the text upwards
254
+ positionProperty.startValue.y += spriteInfo.centerY;
255
+ positionProperty.currentValue.y += spriteInfo.centerY;
256
+ return new SpriteNode("Sprite", sprite, positionProperty, undefined, // Rotation is not used for sprites final transform
257
+ undefined, // Scale is not used for sprites final transform
258
+ undefined, // Opacity is not used for sprites final transform
259
+ parent);
260
+ }
261
+ _parseElements(elements, parent) {
262
+ if (elements === undefined || elements.length <= 0) {
263
+ return;
264
+ }
265
+ for (let i = 0; i < elements.length; i++) {
266
+ if (elements[i].hd === true) {
267
+ continue; // Ignore hidden shapes
268
+ }
269
+ if (elements[i].ty === "tr") {
270
+ continue; // Transforms are parsed as part of other elements, so we can ignore it
271
+ }
272
+ if (elements[i].ty === "gr") {
273
+ this._parseGroup(elements[i], parent);
274
+ //break;
275
+ }
276
+ else if (elements[i].ty === "sh" || elements[i].ty === "rc") {
277
+ this._parseShapes(elements, parent);
278
+ break; // After parsing the shapes, this array of elements is done
279
+ }
280
+ else {
281
+ this._unsupportedFeatures.push(`Only groups or shapes are supported as children of layers - Name: ${elements[i].nm} Type: ${elements[i].ty}`);
282
+ continue;
283
+ }
284
+ }
285
+ }
286
+ _parseGroup(group, parent) {
287
+ if (group.it === undefined || group.it.length === 0) {
288
+ this._unsupportedFeatures.push(`Unexpected empty group: ${group.nm}`);
289
+ return;
290
+ }
291
+ const transform = this._getTransform(group.it);
292
+ if (transform === undefined) {
293
+ this._unsupportedFeatures.push(`Group ${group.nm} does not have a transform which is not supported`);
294
+ return;
295
+ }
296
+ // Create the nodes on the scenegraph for this group
297
+ const trsNode = new Node(`Node (TRS)- ${group.nm}`, transform.position, transform.rotation, transform.scale, transform.opacity, parent);
298
+ const anchorNode = new Node(`Node (Anchor) - ${group.nm}`, transform.anchorPoint, undefined, // Rotation is not used for anchor point
299
+ undefined, // Scale is not used for anchor point
300
+ undefined, // Opacity is not used for anchor point
301
+ trsNode);
302
+ // Parse the children of the group
303
+ this._parseElements(group.it, anchorNode);
304
+ }
305
+ _parseShapes(elements, parent) {
306
+ // Get the scale and add the sprite to the texture packer
307
+ const currentScale = { x: 1, y: 1 };
308
+ const tempPosition = { x: 1, y: 1 };
309
+ parent.worldMatrix.decompose(currentScale, tempPosition);
310
+ const spriteInfo = this._packer.addLottieShape(elements, currentScale);
311
+ // Build the ThinSprite from the texture packer information
312
+ const sprite = new ThinSprite();
313
+ // Set sprite UV coordinates
314
+ sprite._xOffset = spriteInfo.uOffset;
315
+ sprite._yOffset = spriteInfo.vOffset;
316
+ sprite._xSize = spriteInfo.cellWidth;
317
+ sprite._ySize = spriteInfo.cellHeight;
318
+ // Set sprite dimensions for rendering
319
+ sprite.width = spriteInfo.widthPx;
320
+ sprite.height = spriteInfo.heightPx;
321
+ sprite.invertV = true;
322
+ this._renderingManager.addSprite(sprite);
323
+ const positionProperty = {
324
+ startValue: { x: spriteInfo.centerX || 0, y: -spriteInfo.centerY || 0 },
325
+ currentValue: { x: spriteInfo.centerX || 0, y: -spriteInfo.centerY || 0 },
326
+ currentKeyframeIndex: 0,
327
+ };
328
+ new SpriteNode("Sprite", sprite, positionProperty, undefined, // Rotation is not used for sprites final transform
329
+ undefined, // Scale is not used for sprites final transform
330
+ undefined, // Opacity is not used for sprites final transform
331
+ parent);
332
+ }
333
+ _getTransform(elements) {
334
+ if (!elements || elements.length === 0) {
335
+ return undefined;
336
+ }
337
+ // Lottie format mandates the transform is the last item on a list of elements
338
+ if (elements[elements.length - 1].ty !== "tr") {
339
+ return undefined;
340
+ }
341
+ return this._parseTransform(elements[elements.length - 1]);
342
+ }
343
+ _parseTransform(transform) {
344
+ return {
345
+ opacity: this._fromLottieScalarToBabylonScalar(transform.o, "Opacity", 1),
346
+ rotation: this._fromLottieScalarToBabylonScalar(transform.r, "Rotation", 0),
347
+ scale: this._fromLottieVector2ToBabylonVector2(transform.s, "Scale", DefaultScale),
348
+ position: this._fromLottieVector2ToBabylonVector2(transform.p, "Position", DefaultPosition),
349
+ anchorPoint: this._fromLottieVector2ToBabylonVector2(transform.a, "AnchorPoint", DefaultPosition),
350
+ };
351
+ }
352
+ _fromLottieScalarToBabylonScalar(property, scalarType, defaultValue) {
353
+ if (!property) {
354
+ return {
355
+ startValue: defaultValue,
356
+ currentValue: defaultValue,
357
+ currentKeyframeIndex: 0,
358
+ };
359
+ }
360
+ if (property.a === 0) {
361
+ let startValue = property.k;
362
+ if (scalarType === "Opacity") {
363
+ startValue = startValue / 100;
364
+ }
365
+ if (scalarType === "Rotation") {
366
+ startValue = (-1 * (startValue * Math.PI)) / 180; // Lottie uses degrees for rotation, convert to radians
367
+ }
368
+ return {
369
+ startValue: startValue,
370
+ currentValue: startValue,
371
+ currentKeyframeIndex: 0,
372
+ };
373
+ }
374
+ const keyframes = [];
375
+ const rawKeyFrames = property.k;
376
+ let i = 0;
377
+ for (i = 0; i < rawKeyFrames.length; i++) {
378
+ let easeFunction = undefined;
379
+ if (rawKeyFrames[i].o !== undefined && rawKeyFrames[i].i !== undefined) {
380
+ if (Array.isArray(rawKeyFrames[i].o.x)) {
381
+ // Value is an array
382
+ easeFunction = new BezierCurve(rawKeyFrames[i].o.x[0], rawKeyFrames[i].o.y[0], rawKeyFrames[i].i.x[0], rawKeyFrames[i].i.y[0], this._configuration.easingSteps);
383
+ }
384
+ else {
385
+ // Value is a number
386
+ easeFunction = new BezierCurve(rawKeyFrames[i].o.x, rawKeyFrames[i].o.y, rawKeyFrames[i].i.x, rawKeyFrames[i].i.y, this._configuration.easingSteps);
387
+ }
388
+ }
389
+ let value = rawKeyFrames[i].s[0];
390
+ if (scalarType === "Opacity") {
391
+ value = value / 100;
392
+ }
393
+ if (scalarType === "Rotation") {
394
+ value = (value * Math.PI) / 180; // Lottie uses degrees for rotation, convert to radians
395
+ }
396
+ keyframes.push({
397
+ value: value,
398
+ time: rawKeyFrames[i].t,
399
+ easeFunction: easeFunction, // We assume that the ease function is always defined if we have keyframes
400
+ });
401
+ }
402
+ let startValue = rawKeyFrames[0].s[0];
403
+ if (scalarType === "Opacity") {
404
+ startValue = startValue / 100;
405
+ }
406
+ if (scalarType === "Rotation") {
407
+ startValue = (-1 * (startValue * Math.PI)) / 180; // Lottie uses degrees for rotation, convert to radians
408
+ }
409
+ return {
410
+ startValue: startValue,
411
+ currentValue: startValue,
412
+ keyframes: keyframes,
413
+ currentKeyframeIndex: 0,
414
+ };
415
+ }
416
+ _fromLottieVector2ToBabylonVector2(property, vectorType, defaultValue) {
417
+ if (!property) {
418
+ return {
419
+ startValue: defaultValue,
420
+ currentValue: defaultValue,
421
+ currentKeyframeIndex: 0,
422
+ };
423
+ }
424
+ if (property.l !== undefined && property.l !== 2) {
425
+ this._unsupportedFeatures.push(`Invalid Vector2 Length - Length: ${property.l}`);
426
+ return {
427
+ startValue: defaultValue,
428
+ currentValue: defaultValue,
429
+ currentKeyframeIndex: 0,
430
+ };
431
+ }
432
+ if (property.a === 0) {
433
+ const values = property.k;
434
+ const value = this._calculateFinalVector(values[0], values[1], vectorType);
435
+ return {
436
+ startValue: value,
437
+ currentValue: value,
438
+ currentKeyframeIndex: 0,
439
+ };
440
+ }
441
+ const keyframes = [];
442
+ const rawKeyFrames = property.k;
443
+ let i = 0;
444
+ for (i = 0; i < rawKeyFrames.length; i++) {
445
+ let easeFunction1 = undefined;
446
+ if (rawKeyFrames[i].o !== undefined && rawKeyFrames[i].i !== undefined) {
447
+ if (Array.isArray(rawKeyFrames[i].o.x)) {
448
+ // Value is an array
449
+ easeFunction1 = new BezierCurve(rawKeyFrames[i].o.x[0], rawKeyFrames[i].o.y[0], rawKeyFrames[i].i.x[0], rawKeyFrames[i].i.y[0], this._configuration.easingSteps);
450
+ }
451
+ else {
452
+ // Value is a number
453
+ easeFunction1 = new BezierCurve(rawKeyFrames[i].o.x, rawKeyFrames[i].o.y, rawKeyFrames[i].i.x, rawKeyFrames[i].i.y, this._configuration.easingSteps);
454
+ }
455
+ }
456
+ let easeFunction2 = undefined;
457
+ if (rawKeyFrames[i].o !== undefined && rawKeyFrames[i].i !== undefined) {
458
+ if (Array.isArray(rawKeyFrames[i].o.x)) {
459
+ // Value is an array
460
+ easeFunction2 = new BezierCurve(rawKeyFrames[i].o.x[1], rawKeyFrames[i].o.y[1], rawKeyFrames[i].i.x[1], rawKeyFrames[i].i.y[1], this._configuration.easingSteps);
461
+ }
462
+ else {
463
+ // Value is a number
464
+ easeFunction2 = new BezierCurve(rawKeyFrames[i].o.x, rawKeyFrames[i].o.y, rawKeyFrames[i].i.x, rawKeyFrames[i].i.y, this._configuration.easingSteps);
465
+ }
466
+ }
467
+ keyframes.push({
468
+ value: this._calculateFinalVector(rawKeyFrames[i].s[0], rawKeyFrames[i].s[1], vectorType),
469
+ time: rawKeyFrames[i].t,
470
+ easeFunction1: easeFunction1, // We assume that the ease function is always defined if we have keyframes
471
+ easeFunction2: easeFunction2, // We assume that the ease function is always defined if we have keyframes
472
+ });
473
+ }
474
+ const startValue = this._calculateFinalVector(rawKeyFrames[0].s[0], rawKeyFrames[0].s[1], vectorType);
475
+ return {
476
+ startValue: startValue,
477
+ currentValue: { x: startValue.x, y: startValue.y }, // All vectors are passed by reference, so we need to create a copy to avoid modifying the start value
478
+ keyframes: keyframes,
479
+ currentKeyframeIndex: 0,
480
+ };
481
+ }
482
+ _calculateFinalVector(x, y, vectorType) {
483
+ const result = { x, y };
484
+ if (vectorType === "Position") {
485
+ // Lottie uses a different coordinate system for position, so we need to invert the Y value
486
+ result.y = -result.y;
487
+ }
488
+ else if (vectorType === "AnchorPoint") {
489
+ // Lottie uses a different coordinate system for anchor point, so we need to invert the X value
490
+ result.x = -result.x;
491
+ }
492
+ else if (vectorType === "Scale") {
493
+ // Lottie uses a different coordinate system for scale, so we need to divide by 100
494
+ result.x = result.x / 100;
495
+ result.y = result.y / 100;
496
+ }
497
+ return result;
498
+ }
499
+ }
500
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../../dev/lottiePlayer/src/parsing/parser.ts"],"names":[],"mappings":"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"}