@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
package/nodes/node.js ADDED
@@ -0,0 +1,357 @@
1
+ import { ThinMatrix } from "../maths/matrix.js";
2
+ /**
3
+ * Represents a node in the scenegraph that contains the animation information from a lottie animation layer or group.
4
+ */
5
+ export class Node {
6
+ /**
7
+ * Gets the id of this node.
8
+ * @returns The unique identifier of this node.
9
+ */
10
+ get id() {
11
+ return this._id;
12
+ }
13
+ /**
14
+ * Gets the childer of this node.
15
+ * @returns An array of child nodes.
16
+ */
17
+ get children() {
18
+ return this._children;
19
+ }
20
+ /**
21
+ * Gets whether this node is a shape.
22
+ * @returns True if this node is a shape, false otherwise.
23
+ */
24
+ get isShape() {
25
+ return this._isShape;
26
+ }
27
+ /**
28
+ * Gets the world matrix of this node.
29
+ * @returns The world matrix.
30
+ */
31
+ get worldMatrix() {
32
+ return this._worldMatrix;
33
+ }
34
+ /**
35
+ * Gets whether this node is animated.
36
+ * @returns True if this node has animations, false otherwise.
37
+ */
38
+ get isAnimated() {
39
+ return this._isAnimated;
40
+ }
41
+ /**
42
+ * Gets the opacity of this node.
43
+ * If the node is not visible, the opacity will be 0.
44
+ * The opacity is multiplied by the parent opacity, except if the parent is a layer, in that case it is ignored
45
+ * @returns The opacity of the node, from 0 to 1.
46
+ */
47
+ get opacity() {
48
+ if (!this._isVisible) {
49
+ return 0;
50
+ }
51
+ if (this._opacity.currentValue === 0) {
52
+ return 0;
53
+ }
54
+ return this._opacity.currentValue * (this._parent?.opacity ?? 1);
55
+ }
56
+ /**
57
+ * Gets the initial scale of this node.
58
+ * @returns The initial scale.
59
+ */
60
+ get startScale() {
61
+ return this._scale.startValue;
62
+ }
63
+ /**
64
+ * Gets the local position start value.
65
+ */
66
+ get positionStart() {
67
+ return this._position.startValue;
68
+ }
69
+ /**
70
+ * Gets the local position current value.
71
+ */
72
+ get positionCurrent() {
73
+ return this._position.currentValue;
74
+ }
75
+ /**
76
+ * Gets the local rotation start value (in degrees).
77
+ */
78
+ get rotationStart() {
79
+ return this._rotation.startValue;
80
+ }
81
+ /**
82
+ * Gets the local rotation current value (in degrees).
83
+ */
84
+ get rotationCurrent() {
85
+ return this._rotation.currentValue;
86
+ }
87
+ /**
88
+ * Gets the local scale start value.
89
+ */
90
+ get scaleStart() {
91
+ return this._scale.startValue;
92
+ }
93
+ /**
94
+ * Gets the local scale current value.
95
+ */
96
+ get scaleCurrent() {
97
+ return this._scale.currentValue;
98
+ }
99
+ /**
100
+ * Gets the parent node of this node.
101
+ * @returns The parent node, or undefined if this is a root node.
102
+ */
103
+ get parent() {
104
+ return this._parent;
105
+ }
106
+ /**
107
+ * Sets the node visibility.
108
+ * @param value The new visibility value.
109
+ */
110
+ set isVisible(value) {
111
+ if (this._isVisible === value) {
112
+ return; // No change in visibility
113
+ }
114
+ this._isVisible = value;
115
+ // Propage to children
116
+ for (let i = 0; i < this._children.length; i++) {
117
+ this._children[i].isVisible = value;
118
+ }
119
+ }
120
+ /**
121
+ * Constructs a new node.
122
+ * @param id Unique identifier for the node.
123
+ * @param position Position of the node in the scene.
124
+ * @param rotation Rotation of the node in degrees.
125
+ * @param scale Scale of the node in the scene.
126
+ * @param opacity Opacity of the node, from 0 to 1.
127
+ * @param parent Parent node in the scenegraph.
128
+ */
129
+ constructor(id, position, rotation, scale, opacity, parent) {
130
+ this._isVisible = false;
131
+ this._isAnimated = false;
132
+ this._animationsFunctions = [];
133
+ this._isControl = false;
134
+ this._isShape = false;
135
+ this._isVisible = false;
136
+ this._id = id;
137
+ this._position = position || { startValue: { x: 0, y: 0 }, currentValue: { x: 0, y: 0 }, currentKeyframeIndex: 0 };
138
+ this._rotation = rotation || { startValue: 0, currentValue: 0, currentKeyframeIndex: 0 };
139
+ this._scale = scale || { startValue: { x: 1, y: 1 }, currentValue: { x: 1, y: 1 }, currentKeyframeIndex: 0 };
140
+ this._localMatrix = new ThinMatrix();
141
+ this._globalMatrix = new ThinMatrix();
142
+ // Store the matrix at least once
143
+ this._localMatrix.compose(this._scale.currentValue, this._rotation.currentValue, this._position.currentValue);
144
+ this._opacity = opacity || { startValue: 1, currentValue: 1, currentKeyframeIndex: 0 };
145
+ // Animated ?
146
+ if (this._position.keyframes !== undefined && this._position.keyframes.length > 0) {
147
+ this._isAnimated = true;
148
+ this._animationsFunctions.push((frame) => {
149
+ return this._updatePosition(frame);
150
+ });
151
+ }
152
+ if (this._rotation.keyframes !== undefined && this._rotation.keyframes.length > 0) {
153
+ this._isAnimated = true;
154
+ this._animationsFunctions.push((frame) => {
155
+ return this._updateRotation(frame);
156
+ });
157
+ }
158
+ if (this._scale.keyframes !== undefined && this._scale.keyframes.length > 0) {
159
+ this._isAnimated = true;
160
+ this._animationsFunctions.push((frame) => {
161
+ return this._updateScale(frame);
162
+ });
163
+ }
164
+ // Parenting
165
+ this._children = [];
166
+ if (parent) {
167
+ this._worldMatrix = this._globalMatrix;
168
+ this._parent = parent;
169
+ parent._children.push(this);
170
+ this._localMatrix.multiplyToRef(parent._worldMatrix, this._globalMatrix);
171
+ }
172
+ else {
173
+ this._worldMatrix = this._localMatrix;
174
+ }
175
+ }
176
+ /**
177
+ * Resets the node's properties to their initial values.
178
+ */
179
+ reset() {
180
+ // Vectors need to be copied to avoid modifying the original start values
181
+ this._position.currentValue = { x: this._position.startValue.x, y: this._position.startValue.y };
182
+ if (this._position.keyframes) {
183
+ this._position.currentKeyframeIndex = 0;
184
+ }
185
+ this._rotation.currentValue = this._rotation.startValue;
186
+ if (this._rotation.keyframes) {
187
+ this._rotation.currentKeyframeIndex = 0;
188
+ }
189
+ this._scale.currentValue = { x: this._scale.startValue.x, y: this._scale.startValue.y };
190
+ if (this._scale.keyframes) {
191
+ this._scale.currentKeyframeIndex = 0;
192
+ }
193
+ this._opacity.currentValue = this._opacity.startValue;
194
+ if (this._opacity.keyframes) {
195
+ this._opacity.currentKeyframeIndex = 0;
196
+ }
197
+ for (let i = 0; i < this._children.length; i++) {
198
+ this._children[i].reset();
199
+ }
200
+ // On reset update the scenegraph so all matrices are reset to their initial values
201
+ if (this._parent === undefined) {
202
+ this.update(0, false, true);
203
+ }
204
+ this._isVisible = false;
205
+ }
206
+ /**
207
+ * Updates the node's properties based on the current frame of the animation.
208
+ * @param frame Frame number we are playing in the animation.
209
+ * @param isParentUpdated Whether the parent node has been updated.
210
+ * @param isReset Whether the node is being reset.
211
+ * @returns True if the node was updated, false otherwise.
212
+ */
213
+ update(frame, isParentUpdated = false, isReset = false) {
214
+ let isUpdated = false || isReset;
215
+ if (this.isAnimated) {
216
+ for (let i = 0; i < this._animationsFunctions.length; i++) {
217
+ isUpdated = this._animationsFunctions[i](frame) || isUpdated;
218
+ }
219
+ if (isUpdated) {
220
+ this._localMatrix.compose(this._scale.currentValue, this._rotation.currentValue, this._position.currentValue);
221
+ }
222
+ }
223
+ if (this._parent) {
224
+ if (isParentUpdated || isUpdated) {
225
+ this._localMatrix.multiplyToRef(this._parent._worldMatrix, this._globalMatrix);
226
+ }
227
+ }
228
+ this._updateOpacity(frame);
229
+ for (let i = 0; i < this._children.length; i++) {
230
+ this._children[i].update(frame, isUpdated || isParentUpdated);
231
+ }
232
+ return isUpdated || isParentUpdated;
233
+ }
234
+ _updatePosition(frame) {
235
+ const keyframes = this._position.keyframes;
236
+ if (frame < keyframes[0].time) {
237
+ return false; // Animation not started yet
238
+ }
239
+ if (frame > keyframes[keyframes.length - 1].time) {
240
+ this._position.currentValue = keyframes[keyframes.length - 1].value;
241
+ return true;
242
+ }
243
+ // Find the right keyframe we are currently in
244
+ let currentFrameIndex = -1;
245
+ for (let i = this._position.currentKeyframeIndex; i < keyframes.length - 1; i++) {
246
+ if (frame >= keyframes[i].time && frame < keyframes[i + 1].time) {
247
+ currentFrameIndex = i;
248
+ this._position.currentKeyframeIndex = currentFrameIndex;
249
+ break;
250
+ }
251
+ }
252
+ if (currentFrameIndex === -1) {
253
+ return false; // No valid keyframe found for the current animation frame
254
+ }
255
+ const currentVector2Keyframe = keyframes[currentFrameIndex];
256
+ const nextVector2Keyframe = keyframes[currentFrameIndex + 1];
257
+ // Animate the position
258
+ const gradient = (frame - currentVector2Keyframe.time) / (nextVector2Keyframe.time - currentVector2Keyframe.time);
259
+ const easeGradientFactor = currentVector2Keyframe.easeFunction1.interpolate(gradient);
260
+ this._position.currentValue.x = currentVector2Keyframe.value.x + easeGradientFactor * (nextVector2Keyframe.value.x - currentVector2Keyframe.value.x);
261
+ const easeGradientFactor2 = currentVector2Keyframe.easeFunction2.interpolate(gradient);
262
+ this._position.currentValue.y = currentVector2Keyframe.value.y + easeGradientFactor2 * (nextVector2Keyframe.value.y - currentVector2Keyframe.value.y);
263
+ return true;
264
+ }
265
+ _updateRotation(frame) {
266
+ const keyframes = this._rotation.keyframes;
267
+ if (frame < keyframes[0].time) {
268
+ return false; // Animation not started yet
269
+ }
270
+ if (frame > keyframes[keyframes.length - 1].time) {
271
+ this._rotation.currentValue = keyframes[keyframes.length - 1].value;
272
+ return true;
273
+ }
274
+ // Find the right keyframe we are currently in
275
+ let currentFrameIndex = -1;
276
+ for (let i = this._rotation.currentKeyframeIndex; i < keyframes.length - 1; i++) {
277
+ if (frame >= keyframes[i].time && frame < keyframes[i + 1].time) {
278
+ currentFrameIndex = i;
279
+ this._rotation.currentKeyframeIndex = currentFrameIndex;
280
+ break;
281
+ }
282
+ }
283
+ if (currentFrameIndex === -1) {
284
+ return false; // No valid keyframe found for the current animation frame
285
+ }
286
+ const currentScalarKeyframe = keyframes[currentFrameIndex];
287
+ const nextScalarKeyframe = keyframes[currentFrameIndex + 1];
288
+ // Animate the position
289
+ const gradient = (frame - currentScalarKeyframe.time) / (nextScalarKeyframe.time - currentScalarKeyframe.time);
290
+ const easeGradientFactor = currentScalarKeyframe.easeFunction.interpolate(gradient);
291
+ this._rotation.currentValue = -(currentScalarKeyframe.value + easeGradientFactor * (nextScalarKeyframe.value - currentScalarKeyframe.value));
292
+ return true;
293
+ }
294
+ _updateScale(frame) {
295
+ const keyframes = this._scale.keyframes;
296
+ if (frame < keyframes[0].time) {
297
+ return false; // Animation not started yet
298
+ }
299
+ if (frame > keyframes[keyframes.length - 1].time) {
300
+ this._scale.currentValue = keyframes[keyframes.length - 1].value;
301
+ return true;
302
+ }
303
+ // Find the right keyframe we are currently in
304
+ let currentFrameIndex = -1;
305
+ for (let i = this._scale.currentKeyframeIndex; i < keyframes.length - 1; i++) {
306
+ if (frame >= keyframes[i].time && frame < keyframes[i + 1].time) {
307
+ currentFrameIndex = i;
308
+ this._scale.currentKeyframeIndex = currentFrameIndex;
309
+ break;
310
+ }
311
+ }
312
+ if (currentFrameIndex === -1) {
313
+ return false; // No valid keyframe found for the current animation frame
314
+ }
315
+ const currentVector2Keyframe = keyframes[currentFrameIndex];
316
+ const nextVector2Keyframe = keyframes[currentFrameIndex + 1];
317
+ // Animate the scale
318
+ const gradient = (frame - currentVector2Keyframe.time) / (nextVector2Keyframe.time - currentVector2Keyframe.time);
319
+ const easeGradientFactor = currentVector2Keyframe.easeFunction1.interpolate(gradient);
320
+ this._scale.currentValue.x = currentVector2Keyframe.value.x + easeGradientFactor * (nextVector2Keyframe.value.x - currentVector2Keyframe.value.x);
321
+ const easeGradientFactor2 = currentVector2Keyframe.easeFunction2.interpolate(gradient);
322
+ this._scale.currentValue.y = currentVector2Keyframe.value.y + easeGradientFactor2 * (nextVector2Keyframe.value.y - currentVector2Keyframe.value.y);
323
+ return true;
324
+ }
325
+ _updateOpacity(frame) {
326
+ if (this._opacity.keyframes === undefined || this._opacity.keyframes.length === 0) {
327
+ return false;
328
+ }
329
+ if (frame < this._opacity.keyframes[0].time) {
330
+ return false; // Animation not started yet
331
+ }
332
+ if (frame > this._opacity.keyframes[this._opacity.keyframes.length - 1].time) {
333
+ this._opacity.currentValue = this._opacity.keyframes[this._opacity.keyframes.length - 1].value;
334
+ return true;
335
+ }
336
+ // Find the right keyframe we are currently in
337
+ let currentFrameIndex = -1;
338
+ for (let i = this._opacity.currentKeyframeIndex; i < this._opacity.keyframes.length - 1; i++) {
339
+ if (frame >= this._opacity.keyframes[i].time && frame < this._opacity.keyframes[i + 1].time) {
340
+ currentFrameIndex = i;
341
+ this._opacity.currentKeyframeIndex = currentFrameIndex;
342
+ break;
343
+ }
344
+ }
345
+ if (currentFrameIndex === -1) {
346
+ return false; // No valid keyframe found for the current animation frame
347
+ }
348
+ const currentScalarKeyframe = this._opacity.keyframes[currentFrameIndex];
349
+ const nextScalarKeyframe = this._opacity.keyframes[currentFrameIndex + 1];
350
+ // Animate the opacity
351
+ const gradient = (frame - currentScalarKeyframe.time) / (nextScalarKeyframe.time - currentScalarKeyframe.time);
352
+ const easeGradientFactor = currentScalarKeyframe.easeFunction?.interpolate(gradient) ?? 0;
353
+ this._opacity.currentValue = currentScalarKeyframe.value + easeGradientFactor * (nextScalarKeyframe.value - currentScalarKeyframe.value);
354
+ return true;
355
+ }
356
+ }
357
+ //# sourceMappingURL=node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../../../../dev/lottiePlayer/src/nodes/node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type { ThinSprite } from "@babylonjs/core/Sprites/thinSprite.js";
2
+ import type { ScalarProperty, Vector2Property } from "../parsing/parsedTypes.js";
3
+ import { Node } from "./node.js";
4
+ /**
5
+ * Represents a sprite in the scene graph.
6
+ */
7
+ export declare class SpriteNode extends Node {
8
+ private _sprite;
9
+ private _originalWidth;
10
+ private _originalHeight;
11
+ private _firstTime;
12
+ /**
13
+ * Creates a new SpriteNode instance.
14
+ * @param id Unique identifier for the sprite node.
15
+ * @param sprite The sprite associated with this node.
16
+ * @param position The position of the sprite in the scene.
17
+ * @param rotation The rotation of the sprite in degrees.
18
+ * @param scale The scale of the sprite in the scene.
19
+ * @param opacity The opacity of the sprite.
20
+ * @param parent The parent node in the scene graph.
21
+ */
22
+ constructor(id: string, sprite: ThinSprite, position?: Vector2Property, rotation?: ScalarProperty, scale?: Vector2Property, opacity?: ScalarProperty, parent?: Node);
23
+ /**
24
+ * Updates the node's properties based on the current frame of the animation.
25
+ * @param frame Frame number we are playing in the animation.
26
+ * @param isParentUpdated Whether the parent node has been updated.
27
+ * @param isReset Whether the node is being reset.
28
+ * @returns True if the node was updated, false otherwise.
29
+ */
30
+ update(frame: number, isParentUpdated?: boolean, isReset?: boolean): boolean;
31
+ }
32
+ //# sourceMappingURL=spriteNode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spriteNode.d.ts","sourceRoot":"","sources":["../../../../dev/lottiePlayer/src/nodes/spriteNode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,8CAAgC;AAE1D,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9E,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAO9B;;GAEG;AACH,qBAAa,UAAW,SAAQ,IAAI;IAChC,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,eAAe,CAAS;IAEhC,OAAO,CAAC,UAAU,CAAQ;IAE1B;;;;;;;;;OASG;gBACgB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,eAAe,EAAE,QAAQ,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,IAAI;IAU1K;;;;;;OAMG;IACa,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,eAAe,UAAQ,EAAE,OAAO,UAAQ,GAAG,OAAO;CAoB3F"}
@@ -0,0 +1,51 @@
1
+ import { Node } from "./node.js";
2
+ /**
3
+ * Temporary scale vector used during sprite updates for matrix decomposition.
4
+ */
5
+ const TempScale = { x: 1, y: 1 };
6
+ /**
7
+ * Represents a sprite in the scene graph.
8
+ */
9
+ export class SpriteNode extends Node {
10
+ /**
11
+ * Creates a new SpriteNode instance.
12
+ * @param id Unique identifier for the sprite node.
13
+ * @param sprite The sprite associated with this node.
14
+ * @param position The position of the sprite in the scene.
15
+ * @param rotation The rotation of the sprite in degrees.
16
+ * @param scale The scale of the sprite in the scene.
17
+ * @param opacity The opacity of the sprite.
18
+ * @param parent The parent node in the scene graph.
19
+ */
20
+ constructor(id, sprite, position, rotation, scale, opacity, parent) {
21
+ super(id, position, rotation, scale, opacity, parent);
22
+ this._firstTime = true;
23
+ this._sprite = sprite;
24
+ this._originalWidth = sprite.width;
25
+ this._originalHeight = sprite.height;
26
+ this._isShape = true;
27
+ }
28
+ /**
29
+ * Updates the node's properties based on the current frame of the animation.
30
+ * @param frame Frame number we are playing in the animation.
31
+ * @param isParentUpdated Whether the parent node has been updated.
32
+ * @param isReset Whether the node is being reset.
33
+ * @returns True if the node was updated, false otherwise.
34
+ */
35
+ update(frame, isParentUpdated = false, isReset = false) {
36
+ const isDirty = super.update(frame, isParentUpdated, isReset) || this._firstTime;
37
+ this._firstTime = false;
38
+ if (isDirty) {
39
+ const rotation = this.worldMatrix.decompose(TempScale, this._sprite.position);
40
+ // Apply scaling to the original sprite dimensions
41
+ this._sprite.width = this._originalWidth * TempScale.x;
42
+ this._sprite.height = this._originalHeight * TempScale.y;
43
+ // Rotation
44
+ this._sprite.angle = rotation;
45
+ }
46
+ // Opacity
47
+ this._sprite.color.a = this.opacity;
48
+ return isDirty;
49
+ }
50
+ }
51
+ //# sourceMappingURL=spriteNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spriteNode.js","sourceRoot":"","sources":["../../../../dev/lottiePlayer/src/nodes/spriteNode.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B;;GAEG;AACH,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAEjC;;GAEG;AACH,MAAM,OAAO,UAAW,SAAQ,IAAI;IAOhC;;;;;;;;;OASG;IACH,YAAmB,EAAU,EAAE,MAAkB,EAAE,QAA0B,EAAE,QAAyB,EAAE,KAAuB,EAAE,OAAwB,EAAE,MAAa;QACtK,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAblD,eAAU,GAAG,IAAI,CAAC;QAetB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC;QACnC,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC;QAErC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACzB,CAAC;IAED;;;;;;OAMG;IACa,MAAM,CAAC,KAAa,EAAE,eAAe,GAAG,KAAK,EAAE,OAAO,GAAG,KAAK;QAC1E,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,eAAe,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC;QACjF,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QAExB,IAAI,OAAO,EAAE,CAAC;YACV,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAE9E,kDAAkD;YAClD,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC,CAAC,CAAC;YACvD,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC,CAAC;YAEzD,WAAW;YACX,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC;QAClC,CAAC;QAED,UAAU;QACV,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;QAEpC,OAAO,OAAO,CAAC;IACnB,CAAC;CACJ"}
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "@babylonjs/lottie-player",
3
+ "version": "8.24.1",
4
+ "main": "index.js",
5
+ "module": "index.js",
6
+ "types": "index.d.ts",
7
+ "esnext": "index.js",
8
+ "description": "Babylon.js Lottie Player",
9
+ "keywords": [
10
+ "animation",
11
+ "2D",
12
+ "javascript",
13
+ "html5",
14
+ "webgl",
15
+ "webgl2",
16
+ "webgpu",
17
+ "babylon",
18
+ "lottie"
19
+ ],
20
+ "license": "MIT",
21
+ "readme": "README.md",
22
+ "type": "module",
23
+ "sideEffects": true,
24
+ "repository": {
25
+ "type": "git",
26
+ "url": "git+https://github.com/BabylonJS/Babylon.js.git"
27
+ },
28
+ "files": [
29
+ "**/*.js",
30
+ "**/*.d.ts",
31
+ "**/*.map",
32
+ "readme.md",
33
+ "license.md"
34
+ ],
35
+ "scripts": {
36
+ "build": "npm run clean && npm run compile",
37
+ "clean": "rimraf dist && rimraf *.tsbuildinfo -g && rimraf \"./**/*.!(cmd|md|json|build.json|lts.json|tasks.json|cjs)\" -g",
38
+ "compile": "tsc -b tsconfig.build.json",
39
+ "postcompile": "build-tools -c add-js-to-es6"
40
+ },
41
+ "devDependencies": {
42
+ "@dev/build-tools": "^1.0.0",
43
+ "@dev/core": "^1.0.0"
44
+ },
45
+ "peerDependencies": {
46
+ "@babylonjs/core": "^7.47.3 || ^8.0.1"
47
+ }
48
+ }
@@ -0,0 +1,141 @@
1
+ import type { IVector2Like } from "@babylonjs/core/Maths/math.like.js";
2
+ import type { BezierCurve } from "../maths/bezier.js";
3
+ import type { Node } from "../nodes/node.js";
4
+ /**
5
+ * Represents a Babylon.js thin version of a Lottie animation.
6
+ */
7
+ export type AnimationInfo = {
8
+ /**
9
+ * Frame number where the animation starts.
10
+ */
11
+ startFrame: number;
12
+ /**
13
+ * Frame number where the animation ends.
14
+ */
15
+ endFrame: number;
16
+ /**
17
+ * Frame rate of the animation.
18
+ */
19
+ frameRate: number;
20
+ /**
21
+ * Width of the animation in pixels
22
+ */
23
+ widthPx: number;
24
+ /**
25
+ * Height of the animation in pixels
26
+ */
27
+ heightPx: number;
28
+ /**
29
+ * Nodes representing the animation
30
+ */
31
+ nodes: Node[];
32
+ };
33
+ /**
34
+ * Transform properties for a Lottie animation.
35
+ * Any of these properties may be animated.
36
+ */
37
+ export type Transform = {
38
+ /**
39
+ * The anchor point of the layer, which is the point around which transformations are applied.
40
+ */
41
+ anchorPoint: Vector2Property;
42
+ /**
43
+ * The position of the layer in the animation.
44
+ */
45
+ position: Vector2Property;
46
+ /**
47
+ * The rotation of the layer in degrees.
48
+ */
49
+ rotation: ScalarProperty;
50
+ /**
51
+ * The scale of the layer in the X and Y axis.
52
+ */
53
+ scale: Vector2Property;
54
+ /**
55
+ * The opacity of the layer, represented as a scalar value.
56
+ */
57
+ opacity: ScalarProperty;
58
+ };
59
+ /**
60
+ * Represents a scalar that can be animated.
61
+ */
62
+ export type ScalarProperty = {
63
+ /**
64
+ * The initial value of the property at the start of the animation.
65
+ */
66
+ startValue: number;
67
+ /**
68
+ * The current value of the property during the animation.
69
+ */
70
+ currentValue: number;
71
+ /**
72
+ * An array of keyframes for the property.
73
+ */
74
+ keyframes?: ScalarKeyframe[];
75
+ /**
76
+ * The index of the current keyframe being processed in the animation.
77
+ */
78
+ currentKeyframeIndex: number;
79
+ };
80
+ /**
81
+ * Represents a keyframe for a scalar property.
82
+ */
83
+ export type ScalarKeyframe = {
84
+ /**
85
+ * The value at this keyframe.
86
+ */
87
+ value: number;
88
+ /**
89
+ * The time at which this keyframe occurs in the animation, in frames.
90
+ */
91
+ time: number;
92
+ /**
93
+ * The easing function applied to the transition from this keyframe to the next one.
94
+ */
95
+ easeFunction: BezierCurve;
96
+ };
97
+ /**
98
+ * Represents a 2D vector that can be animated.
99
+ */
100
+ export type Vector2Property = {
101
+ /**
102
+ * The initial value at the start of the animation.
103
+ */
104
+ startValue: IVector2Like;
105
+ /**
106
+ * The current value during the animation.
107
+ */
108
+ currentValue: IVector2Like;
109
+ /**
110
+ * An array of keyframes for the property.
111
+ */
112
+ keyframes?: Vector2Keyframe[];
113
+ /**
114
+ * The index of the current keyframe being processed in the animation.
115
+ */
116
+ currentKeyframeIndex: number;
117
+ };
118
+ /**
119
+ * Represents a keyframe for a 2D vector property.
120
+ */
121
+ export type Vector2Keyframe = {
122
+ /**
123
+ * The value at this keyframe.
124
+ */
125
+ value: IVector2Like;
126
+ /**
127
+ * The time at which this keyframe occurs in the animation, in frames.
128
+ */
129
+ time: number;
130
+ /**
131
+ * The easing function applied to the transition from this keyframe to the next one.
132
+ * This is used for the first dimension of the vector.
133
+ */
134
+ easeFunction1: BezierCurve;
135
+ /**
136
+ * The easing function applied to the transition from this keyframe to the next one.
137
+ * This is used for the second dimension of the vector.
138
+ */
139
+ easeFunction2: BezierCurve;
140
+ };
141
+ //# sourceMappingURL=parsedTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parsedTypes.d.ts","sourceRoot":"","sources":["../../../../dev/lottiePlayer/src/parsing/parsedTypes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,2CAA6B;AAEzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IACxB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,KAAK,EAAE,IAAI,EAAE,CAAC;CACjB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG;IACpB;;OAEG;IACH,WAAW,EAAE,eAAe,CAAC;IAC7B;;OAEG;IACH,QAAQ,EAAE,eAAe,CAAC;IAC1B;;OAEG;IACH,QAAQ,EAAE,cAAc,CAAC;IACzB;;OAEG;IACH,KAAK,EAAE,eAAe,CAAC;IACvB;;OAEG;IACH,OAAO,EAAE,cAAc,CAAC;CAC3B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IACzB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;IAC7B;;OAEG;IACH,oBAAoB,EAAE,MAAM,CAAC;CAChC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IACzB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,YAAY,EAAE,WAAW,CAAC;CAC7B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC1B;;OAEG;IACH,UAAU,EAAE,YAAY,CAAC;IACzB;;OAEG;IACH,YAAY,EAAE,YAAY,CAAC;IAC3B;;OAEG;IACH,SAAS,CAAC,EAAE,eAAe,EAAE,CAAC;IAC9B;;OAEG;IACH,oBAAoB,EAAE,MAAM,CAAC;CAChC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC1B;;OAEG;IACH,KAAK,EAAE,YAAY,CAAC;IACpB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,aAAa,EAAE,WAAW,CAAC;IAC3B;;;OAGG;IACH,aAAa,EAAE,WAAW,CAAC;CAC9B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=parsedTypes.js.map