@babylonjs/core 5.0.0-alpha.50 → 5.0.0-alpha.51

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 (178) hide show
  1. package/Animations/animatable.js +5 -0
  2. package/Animations/animatable.js.map +1 -1
  3. package/Animations/animationGroup.js +0 -10
  4. package/Animations/animationGroup.js.map +1 -1
  5. package/Animations/runtimeAnimation.js +8 -3
  6. package/Animations/runtimeAnimation.js.map +1 -1
  7. package/Behaviors/Meshes/pointerDragBehavior.js +2 -1
  8. package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
  9. package/Buffers/buffer.js +0 -3
  10. package/Buffers/buffer.js.map +1 -1
  11. package/Cameras/VR/vrExperienceHelper.d.ts +0 -3
  12. package/Cameras/VR/vrExperienceHelper.js +24 -7
  13. package/Cameras/VR/vrExperienceHelper.js.map +1 -1
  14. package/Cameras/arcRotateCamera.d.ts +4 -0
  15. package/Cameras/arcRotateCamera.js +8 -0
  16. package/Cameras/arcRotateCamera.js.map +1 -1
  17. package/Debug/directionalLightFrustumViewer.js +13 -13
  18. package/Debug/directionalLightFrustumViewer.js.map +1 -1
  19. package/Debug/physicsViewer.js +8 -8
  20. package/Debug/physicsViewer.js.map +1 -1
  21. package/Debug/rayHelper.js +3 -3
  22. package/Debug/rayHelper.js.map +1 -1
  23. package/Debug/skeletonViewer.js +8 -8
  24. package/Debug/skeletonViewer.js.map +1 -1
  25. package/Engines/engine.js +1 -0
  26. package/Engines/engine.js.map +1 -1
  27. package/Engines/nullEngine.d.ts +25 -0
  28. package/Engines/nullEngine.js +54 -0
  29. package/Engines/nullEngine.js.map +1 -1
  30. package/Engines/thinEngine.js +4 -4
  31. package/Engines/thinEngine.js.map +1 -1
  32. package/Gizmos/axisDragGizmo.js +3 -3
  33. package/Gizmos/axisDragGizmo.js.map +1 -1
  34. package/Gizmos/axisScaleGizmo.js +4 -4
  35. package/Gizmos/axisScaleGizmo.js.map +1 -1
  36. package/Gizmos/boundingBoxGizmo.js +19 -20
  37. package/Gizmos/boundingBoxGizmo.js.map +1 -1
  38. package/Gizmos/cameraGizmo.js +10 -10
  39. package/Gizmos/cameraGizmo.js.map +1 -1
  40. package/Gizmos/lightGizmo.js +32 -10
  41. package/Gizmos/lightGizmo.js.map +1 -1
  42. package/Gizmos/planeDragGizmo.js +2 -2
  43. package/Gizmos/planeDragGizmo.js.map +1 -1
  44. package/Gizmos/planeRotationGizmo.js +13 -3
  45. package/Gizmos/planeRotationGizmo.js.map +1 -1
  46. package/Gizmos/scaleGizmo.js +3 -3
  47. package/Gizmos/scaleGizmo.js.map +1 -1
  48. package/Helpers/environmentHelper.js +4 -2
  49. package/Helpers/environmentHelper.js.map +1 -1
  50. package/Helpers/sceneHelpers.js +2 -2
  51. package/Helpers/sceneHelpers.js.map +1 -1
  52. package/Helpers/textureDome.js +3 -3
  53. package/Helpers/textureDome.js.map +1 -1
  54. package/Layers/glowLayer.js +3 -0
  55. package/Layers/glowLayer.js.map +1 -1
  56. package/Materials/shaderMaterial.d.ts +0 -2
  57. package/Materials/shaderMaterial.js +0 -18
  58. package/Materials/shaderMaterial.js.map +1 -1
  59. package/Meshes/Builders/boxBuilder.d.ts +63 -32
  60. package/Meshes/Builders/boxBuilder.js +49 -35
  61. package/Meshes/Builders/boxBuilder.js.map +1 -1
  62. package/Meshes/Builders/capsuleBuilder.d.ts +20 -10
  63. package/Meshes/Builders/capsuleBuilder.js +33 -34
  64. package/Meshes/Builders/capsuleBuilder.js.map +1 -1
  65. package/Meshes/Builders/cylinderBuilder.d.ts +87 -48
  66. package/Meshes/Builders/cylinderBuilder.js +65 -47
  67. package/Meshes/Builders/cylinderBuilder.js.map +1 -1
  68. package/Meshes/Builders/decalBuilder.d.ts +26 -24
  69. package/Meshes/Builders/decalBuilder.js +206 -208
  70. package/Meshes/Builders/decalBuilder.js.map +1 -1
  71. package/Meshes/Builders/discBuilder.d.ts +27 -25
  72. package/Meshes/Builders/discBuilder.js +44 -34
  73. package/Meshes/Builders/discBuilder.js.map +1 -1
  74. package/Meshes/Builders/geodesicBuilder.d.ts +34 -39
  75. package/Meshes/Builders/geodesicBuilder.js +56 -65
  76. package/Meshes/Builders/geodesicBuilder.js.map +1 -1
  77. package/Meshes/Builders/goldbergBuilder.d.ts +52 -29
  78. package/Meshes/Builders/goldbergBuilder.js +86 -76
  79. package/Meshes/Builders/goldbergBuilder.js.map +1 -1
  80. package/Meshes/Builders/groundBuilder.d.ts +151 -79
  81. package/Meshes/Builders/groundBuilder.js +166 -129
  82. package/Meshes/Builders/groundBuilder.js.map +1 -1
  83. package/Meshes/Builders/hemisphereBuilder.d.ts +16 -14
  84. package/Meshes/Builders/hemisphereBuilder.js +32 -33
  85. package/Meshes/Builders/hemisphereBuilder.js.map +1 -1
  86. package/Meshes/Builders/icoSphereBuilder.d.ts +57 -29
  87. package/Meshes/Builders/icoSphereBuilder.js +48 -35
  88. package/Meshes/Builders/icoSphereBuilder.js.map +1 -1
  89. package/Meshes/Builders/latheBuilder.d.ts +38 -36
  90. package/Meshes/Builders/latheBuilder.js +68 -70
  91. package/Meshes/Builders/latheBuilder.js.map +1 -1
  92. package/Meshes/Builders/linesBuilder.d.ts +113 -82
  93. package/Meshes/Builders/linesBuilder.js +197 -179
  94. package/Meshes/Builders/linesBuilder.js.map +1 -1
  95. package/Meshes/Builders/planeBuilder.d.ts +48 -26
  96. package/Meshes/Builders/planeBuilder.js +48 -38
  97. package/Meshes/Builders/planeBuilder.js.map +1 -1
  98. package/Meshes/Builders/polygonBuilder.d.ts +68 -51
  99. package/Meshes/Builders/polygonBuilder.js +84 -72
  100. package/Meshes/Builders/polygonBuilder.js.map +1 -1
  101. package/Meshes/Builders/polyhedronBuilder.d.ts +73 -36
  102. package/Meshes/Builders/polyhedronBuilder.js +59 -39
  103. package/Meshes/Builders/polyhedronBuilder.js.map +1 -1
  104. package/Meshes/Builders/ribbonBuilder.d.ts +69 -39
  105. package/Meshes/Builders/ribbonBuilder.js +162 -148
  106. package/Meshes/Builders/ribbonBuilder.js.map +1 -1
  107. package/Meshes/Builders/shapeBuilder.d.ts +83 -81
  108. package/Meshes/Builders/shapeBuilder.js +182 -183
  109. package/Meshes/Builders/shapeBuilder.js.map +1 -1
  110. package/Meshes/Builders/sphereBuilder.d.ts +62 -31
  111. package/Meshes/Builders/sphereBuilder.js +50 -36
  112. package/Meshes/Builders/sphereBuilder.js.map +1 -1
  113. package/Meshes/Builders/tiledBoxBuilder.d.ts +56 -29
  114. package/Meshes/Builders/tiledBoxBuilder.js +41 -32
  115. package/Meshes/Builders/tiledBoxBuilder.js.map +1 -1
  116. package/Meshes/Builders/tiledPlaneBuilder.d.ts +67 -38
  117. package/Meshes/Builders/tiledPlaneBuilder.js +49 -38
  118. package/Meshes/Builders/tiledPlaneBuilder.js.map +1 -1
  119. package/Meshes/Builders/torusBuilder.d.ts +47 -25
  120. package/Meshes/Builders/torusBuilder.js +43 -33
  121. package/Meshes/Builders/torusBuilder.js.map +1 -1
  122. package/Meshes/Builders/torusKnotBuilder.d.ts +57 -29
  123. package/Meshes/Builders/torusKnotBuilder.js +48 -34
  124. package/Meshes/Builders/torusKnotBuilder.js.map +1 -1
  125. package/Meshes/Builders/tubeBuilder.d.ts +42 -40
  126. package/Meshes/Builders/tubeBuilder.js +137 -139
  127. package/Meshes/Builders/tubeBuilder.js.map +1 -1
  128. package/Meshes/geometry.js +3 -7
  129. package/Meshes/geometry.js.map +1 -1
  130. package/Meshes/mesh.lts.js +0 -1
  131. package/Meshes/mesh.lts.js.map +1 -1
  132. package/Meshes/mesh.vertexData.d.ts +21 -64
  133. package/Meshes/mesh.vertexData.js +21 -46
  134. package/Meshes/mesh.vertexData.js.map +1 -1
  135. package/Meshes/meshBuilder.d.ts +52 -799
  136. package/Meshes/meshBuilder.js +52 -609
  137. package/Meshes/meshBuilder.js.map +1 -1
  138. package/Misc/filesInput.d.ts +1 -1
  139. package/Misc/filesInput.js +1 -1
  140. package/Misc/filesInput.js.map +1 -1
  141. package/Particles/particleSystem.js +1 -1
  142. package/Particles/particleSystem.js.map +1 -1
  143. package/Particles/particleSystemSet.js +2 -2
  144. package/Particles/particleSystemSet.js.map +1 -1
  145. package/Particles/solidParticleSystem.js +2 -2
  146. package/Particles/solidParticleSystem.js.map +1 -1
  147. package/Particles/subEmitter.d.ts +2 -1
  148. package/Particles/subEmitter.js +4 -2
  149. package/Particles/subEmitter.js.map +1 -1
  150. package/Physics/Plugins/ammoJSPlugin.js +4 -4
  151. package/Physics/Plugins/ammoJSPlugin.js.map +1 -1
  152. package/Physics/physicsHelper.js +5 -5
  153. package/Physics/physicsHelper.js.map +1 -1
  154. package/PostProcesses/volumetricLightScatteringPostProcess.js +2 -2
  155. package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
  156. package/Rendering/boundingBoxRenderer.js +2 -2
  157. package/Rendering/boundingBoxRenderer.js.map +1 -1
  158. package/Shaders/ShadersInclude/fogFragment.js +1 -1
  159. package/Shaders/ShadersInclude/fogFragment.js.map +1 -1
  160. package/Sprites/spriteMap.js +2 -2
  161. package/Sprites/spriteMap.js.map +1 -1
  162. package/XR/features/WebXRControllerPhysics.js +3 -3
  163. package/XR/features/WebXRControllerPhysics.js.map +1 -1
  164. package/XR/features/WebXRControllerPointerSelection.js +5 -5
  165. package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
  166. package/XR/features/WebXRControllerTeleportation.js +8 -8
  167. package/XR/features/WebXRControllerTeleportation.js.map +1 -1
  168. package/XR/features/WebXRHandTracking.js +2 -2
  169. package/XR/features/WebXRHandTracking.js.map +1 -1
  170. package/XR/features/WebXRNearInteraction.js +3 -3
  171. package/XR/features/WebXRNearInteraction.js.map +1 -1
  172. package/XR/motionController/webXRProfiledMotionController.js +2 -2
  173. package/XR/motionController/webXRProfiledMotionController.js.map +1 -1
  174. package/license.md +12 -13
  175. package/package.json +1 -1
  176. package/readme.md +12 -13
  177. package/scene.js +3 -0
  178. package/scene.js.map +1 -1
@@ -480,6 +480,11 @@ Scene.prototype.beginDirectAnimation = function (target, animations, from, to, l
480
480
  if (from > to && speedRatio > 0) {
481
481
  speedRatio *= -1;
482
482
  }
483
+ else if (to > from && speedRatio < 0) {
484
+ var temp = to;
485
+ to = from;
486
+ from = temp;
487
+ }
483
488
  var animatable = new Animatable(this, target, from, to, loop, speedRatio, onAnimationEnd, animations, onAnimationLoop, isAdditive);
484
489
  return animatable;
485
490
  };
@@ -1 +1 @@
1
- {"version":3,"file":"animatable.js","sourceRoot":"","sources":["../../../sourceES6/core/Animations/animatable.ts"],"names":[],"mappings":"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","sourcesContent":["import { Animation } from \"./animation\";\r\nimport { RuntimeAnimation } from \"./runtimeAnimation\";\r\n\r\nimport { Nullable } from \"../types\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport { Scene } from \"../scene\";\r\nimport { Matrix, Quaternion, Vector3, TmpVectors } from '../Maths/math.vector';\r\nimport { PrecisionDate } from '../Misc/precisionDate';\r\nimport { Bone } from '../Bones/bone';\r\nimport { Node } from \"../node\";\r\n\r\n/**\r\n * Class used to store an actual running animation\r\n */\r\nexport class Animatable {\r\n private _localDelayOffset: Nullable<number> = null;\r\n private _pausedDelay: Nullable<number> = null;\r\n private _manualJumpDelay: Nullable<number> = null;\r\n private _runtimeAnimations = new Array<RuntimeAnimation>();\r\n private _paused = false;\r\n private _scene: Scene;\r\n private _speedRatio = 1;\r\n private _weight = -1.0;\r\n private _syncRoot: Nullable<Animatable> = null;\r\n private _frameToSyncFromJump: Nullable<number> = 0;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if the animatable must be disposed and removed at the end of the animation.\r\n * This will only apply for non looping animation (default is true)\r\n */\r\n public disposeOnEnd = true;\r\n\r\n /**\r\n * Gets a boolean indicating if the animation has started\r\n */\r\n public animationStarted = false;\r\n\r\n /**\r\n * Observer raised when the animation ends\r\n */\r\n public onAnimationEndObservable = new Observable<Animatable>();\r\n\r\n /**\r\n * Observer raised when the animation loops\r\n */\r\n public onAnimationLoopObservable = new Observable<Animatable>();\r\n\r\n /**\r\n * Gets the root Animatable used to synchronize and normalize animations\r\n */\r\n public get syncRoot(): Nullable<Animatable> {\r\n return this._syncRoot;\r\n }\r\n\r\n /**\r\n * Gets the current frame of the first RuntimeAnimation\r\n * Used to synchronize Animatables\r\n */\r\n public get masterFrame(): number {\r\n if (this._runtimeAnimations.length === 0) {\r\n return 0;\r\n }\r\n\r\n return this._runtimeAnimations[0].currentFrame;\r\n }\r\n\r\n /**\r\n * Gets or sets the animatable weight (-1.0 by default meaning not weighted)\r\n */\r\n public get weight(): number {\r\n return this._weight;\r\n }\r\n\r\n public set weight(value: number) {\r\n if (value === -1) { // -1 is ok and means no weight\r\n this._weight = -1;\r\n return;\r\n }\r\n\r\n // Else weight must be in [0, 1] range\r\n this._weight = Math.min(Math.max(value, 0), 1.0);\r\n }\r\n\r\n /**\r\n * Gets or sets the speed ratio to apply to the animatable (1.0 by default)\r\n */\r\n public get speedRatio(): number {\r\n return this._speedRatio;\r\n }\r\n\r\n public set speedRatio(value: number) {\r\n for (var index = 0; index < this._runtimeAnimations.length; index++) {\r\n var animation = this._runtimeAnimations[index];\r\n\r\n animation._prepareForSpeedRatioChange(value);\r\n }\r\n this._speedRatio = value;\r\n }\r\n\r\n /**\r\n * Creates a new Animatable\r\n * @param scene defines the hosting scene\r\n * @param target defines the target object\r\n * @param fromFrame defines the starting frame number (default is 0)\r\n * @param toFrame defines the ending frame number (default is 100)\r\n * @param loopAnimation defines if the animation must loop (default is false)\r\n * @param speedRatio defines the factor to apply to animation speed (default is 1)\r\n * @param onAnimationEnd defines a callback to call when animation ends if it is not looping\r\n * @param animations defines a group of animation to add to the new Animatable\r\n * @param onAnimationLoop defines a callback to call when animation loops\r\n * @param isAdditive defines whether the animation should be evaluated additively\r\n */\r\n constructor(scene: Scene,\r\n /** defines the target object */\r\n public target: any,\r\n /** defines the starting frame number (default is 0) */\r\n public fromFrame: number = 0,\r\n /** defines the ending frame number (default is 100) */\r\n public toFrame: number = 100,\r\n /** defines if the animation must loop (default is false) */\r\n public loopAnimation: boolean = false,\r\n speedRatio: number = 1.0,\r\n /** defines a callback to call when animation ends if it is not looping */\r\n public onAnimationEnd?: Nullable<() => void>,\r\n animations?: Animation[],\r\n /** defines a callback to call when animation loops */\r\n public onAnimationLoop?: Nullable<() => void>,\r\n /** defines whether the animation should be evaluated additively */\r\n public isAdditive: boolean = false) {\r\n this._scene = scene;\r\n if (animations) {\r\n this.appendAnimations(target, animations);\r\n }\r\n\r\n this._speedRatio = speedRatio;\r\n scene._activeAnimatables.push(this);\r\n }\r\n\r\n // Methods\r\n /**\r\n * Synchronize and normalize current Animatable with a source Animatable\r\n * This is useful when using animation weights and when animations are not of the same length\r\n * @param root defines the root Animatable to synchronize with (null to stop synchronizing)\r\n * @returns the current Animatable\r\n */\r\n public syncWith(root: Nullable<Animatable>): Animatable {\r\n this._syncRoot = root;\r\n\r\n if (root) {\r\n // Make sure this animatable will animate after the root\r\n let index = this._scene._activeAnimatables.indexOf(this);\r\n if (index > -1) {\r\n this._scene._activeAnimatables.splice(index, 1);\r\n this._scene._activeAnimatables.push(this);\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets the list of runtime animations\r\n * @returns an array of RuntimeAnimation\r\n */\r\n public getAnimations(): RuntimeAnimation[] {\r\n return this._runtimeAnimations;\r\n }\r\n\r\n /**\r\n * Adds more animations to the current animatable\r\n * @param target defines the target of the animations\r\n * @param animations defines the new animations to add\r\n */\r\n public appendAnimations(target: any, animations: Animation[]): void {\r\n for (var index = 0; index < animations.length; index++) {\r\n var animation = animations[index];\r\n\r\n let newRuntimeAnimation = new RuntimeAnimation(target, animation, this._scene, this);\r\n newRuntimeAnimation._onLoop = () => {\r\n this.onAnimationLoopObservable.notifyObservers(this);\r\n if (this.onAnimationLoop) {\r\n this.onAnimationLoop();\r\n }\r\n };\r\n\r\n this._runtimeAnimations.push(newRuntimeAnimation);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the source animation for a specific property\r\n * @param property defines the property to look for\r\n * @returns null or the source animation for the given property\r\n */\r\n public getAnimationByTargetProperty(property: string): Nullable<Animation> {\r\n var runtimeAnimations = this._runtimeAnimations;\r\n\r\n for (var index = 0; index < runtimeAnimations.length; index++) {\r\n if (runtimeAnimations[index].animation.targetProperty === property) {\r\n return runtimeAnimations[index].animation;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Gets the runtime animation for a specific property\r\n * @param property defines the property to look for\r\n * @returns null or the runtime animation for the given property\r\n */\r\n public getRuntimeAnimationByTargetProperty(property: string): Nullable<RuntimeAnimation> {\r\n var runtimeAnimations = this._runtimeAnimations;\r\n\r\n for (var index = 0; index < runtimeAnimations.length; index++) {\r\n if (runtimeAnimations[index].animation.targetProperty === property) {\r\n return runtimeAnimations[index];\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Resets the animatable to its original state\r\n */\r\n public reset(): void {\r\n var runtimeAnimations = this._runtimeAnimations;\r\n\r\n for (var index = 0; index < runtimeAnimations.length; index++) {\r\n runtimeAnimations[index].reset(true);\r\n }\r\n\r\n this._localDelayOffset = null;\r\n this._pausedDelay = null;\r\n }\r\n\r\n /**\r\n * Allows the animatable to blend with current running animations\r\n * @see https://doc.babylonjs.com/babylon101/animations#animation-blending\r\n * @param blendingSpeed defines the blending speed to use\r\n */\r\n public enableBlending(blendingSpeed: number): void {\r\n var runtimeAnimations = this._runtimeAnimations;\r\n\r\n for (var index = 0; index < runtimeAnimations.length; index++) {\r\n runtimeAnimations[index].animation.enableBlending = true;\r\n runtimeAnimations[index].animation.blendingSpeed = blendingSpeed;\r\n }\r\n }\r\n\r\n /**\r\n * Disable animation blending\r\n * @see https://doc.babylonjs.com/babylon101/animations#animation-blending\r\n */\r\n public disableBlending(): void {\r\n var runtimeAnimations = this._runtimeAnimations;\r\n\r\n for (var index = 0; index < runtimeAnimations.length; index++) {\r\n runtimeAnimations[index].animation.enableBlending = false;\r\n }\r\n }\r\n\r\n /**\r\n * Jump directly to a given frame\r\n * @param frame defines the frame to jump to\r\n */\r\n public goToFrame(frame: number): void {\r\n var runtimeAnimations = this._runtimeAnimations;\r\n\r\n if (runtimeAnimations[0]) {\r\n var fps = runtimeAnimations[0].animation.framePerSecond;\r\n this._frameToSyncFromJump = this._frameToSyncFromJump ?? runtimeAnimations[0].currentFrame;\r\n var delay = this.speedRatio === 0 ? 0 : ((frame - this._frameToSyncFromJump) / fps * 1000) / this.speedRatio;\r\n this._manualJumpDelay = -delay;\r\n }\r\n\r\n for (var index = 0; index < runtimeAnimations.length; index++) {\r\n runtimeAnimations[index].goToFrame(frame);\r\n }\r\n }\r\n\r\n /**\r\n * Pause the animation\r\n */\r\n public pause(): void {\r\n if (this._paused) {\r\n return;\r\n }\r\n this._paused = true;\r\n }\r\n\r\n /**\r\n * Restart the animation\r\n */\r\n public restart(): void {\r\n this._paused = false;\r\n }\r\n\r\n private _raiseOnAnimationEnd() {\r\n if (this.onAnimationEnd) {\r\n this.onAnimationEnd();\r\n }\r\n\r\n this.onAnimationEndObservable.notifyObservers(this);\r\n }\r\n\r\n /**\r\n * Stop and delete the current animation\r\n * @param animationName defines a string used to only stop some of the runtime animations instead of all\r\n * @param targetMask - a function that determines if the animation should be stopped based on its target (all animations will be stopped if both this and animationName are empty)\r\n */\r\n public stop(animationName?: string, targetMask?: (target: any) => boolean): void {\r\n if (animationName || targetMask) {\r\n var idx = this._scene._activeAnimatables.indexOf(this);\r\n\r\n if (idx > -1) {\r\n\r\n var runtimeAnimations = this._runtimeAnimations;\r\n\r\n for (var index = runtimeAnimations.length - 1; index >= 0; index--) {\r\n const runtimeAnimation = runtimeAnimations[index];\r\n if (animationName && runtimeAnimation.animation.name != animationName) {\r\n continue;\r\n }\r\n if (targetMask && !targetMask(runtimeAnimation.target)) {\r\n continue;\r\n }\r\n\r\n runtimeAnimation.dispose();\r\n runtimeAnimations.splice(index, 1);\r\n }\r\n\r\n if (runtimeAnimations.length == 0) {\r\n this._scene._activeAnimatables.splice(idx, 1);\r\n this._raiseOnAnimationEnd();\r\n }\r\n }\r\n\r\n } else {\r\n\r\n var index = this._scene._activeAnimatables.indexOf(this);\r\n\r\n if (index > -1) {\r\n this._scene._activeAnimatables.splice(index, 1);\r\n var runtimeAnimations = this._runtimeAnimations;\r\n\r\n for (var index = 0; index < runtimeAnimations.length; index++) {\r\n runtimeAnimations[index].dispose();\r\n }\r\n\r\n this._raiseOnAnimationEnd();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Wait asynchronously for the animation to end\r\n * @returns a promise which will be fulfilled when the animation ends\r\n */\r\n public waitAsync(): Promise<Animatable> {\r\n return new Promise((resolve, reject) => {\r\n this.onAnimationEndObservable.add(() => {\r\n resolve(this);\r\n }, undefined, undefined, this, true);\r\n });\r\n }\r\n\r\n /** @hidden */\r\n public _animate(delay: number): boolean {\r\n if (this._paused) {\r\n this.animationStarted = false;\r\n if (this._pausedDelay === null) {\r\n this._pausedDelay = delay;\r\n }\r\n return true;\r\n }\r\n\r\n if (this._localDelayOffset === null) {\r\n this._localDelayOffset = delay;\r\n this._pausedDelay = null;\r\n } else if (this._pausedDelay !== null) {\r\n this._localDelayOffset += delay - this._pausedDelay;\r\n this._pausedDelay = null;\r\n }\r\n\r\n if (this._manualJumpDelay !== null) {\r\n this._localDelayOffset += this._manualJumpDelay;\r\n this._manualJumpDelay = null;\r\n this._frameToSyncFromJump = null;\r\n }\r\n\r\n if (this._weight === 0) { // We consider that an animation with a weight === 0 is \"actively\" paused\r\n return true;\r\n }\r\n\r\n // Animating\r\n var running = false;\r\n var runtimeAnimations = this._runtimeAnimations;\r\n var index: number;\r\n\r\n for (index = 0; index < runtimeAnimations.length; index++) {\r\n var animation = runtimeAnimations[index];\r\n var isRunning = animation.animate(delay - this._localDelayOffset, this.fromFrame,\r\n this.toFrame, this.loopAnimation, this._speedRatio, this._weight\r\n );\r\n running = running || isRunning;\r\n }\r\n\r\n this.animationStarted = running;\r\n\r\n if (!running) {\r\n if (this.disposeOnEnd) {\r\n // Remove from active animatables\r\n index = this._scene._activeAnimatables.indexOf(this);\r\n this._scene._activeAnimatables.splice(index, 1);\r\n\r\n // Dispose all runtime animations\r\n for (index = 0; index < runtimeAnimations.length; index++) {\r\n runtimeAnimations[index].dispose();\r\n }\r\n }\r\n\r\n this._raiseOnAnimationEnd();\r\n\r\n if (this.disposeOnEnd) {\r\n this.onAnimationEnd = null;\r\n this.onAnimationLoop = null;\r\n this.onAnimationLoopObservable.clear();\r\n this.onAnimationEndObservable.clear();\r\n }\r\n }\r\n\r\n return running;\r\n }\r\n}\r\n\r\ndeclare module \"../scene\" {\r\n export interface Scene {\r\n /** @hidden */\r\n _registerTargetForLateAnimationBinding(runtimeAnimation: RuntimeAnimation, originalValue: any): void;\r\n\r\n /** @hidden */\r\n _processLateAnimationBindingsForMatrices(holder: {\r\n totalWeight: number,\r\n totalAdditiveWeight: number,\r\n animations: RuntimeAnimation[],\r\n additiveAnimations: RuntimeAnimation[],\r\n originalValue: Matrix\r\n }): any;\r\n\r\n /** @hidden */\r\n _processLateAnimationBindingsForQuaternions(holder: {\r\n totalWeight: number,\r\n totalAdditiveWeight: number,\r\n animations: RuntimeAnimation[],\r\n additiveAnimations: RuntimeAnimation[],\r\n originalValue: Quaternion\r\n }, refQuaternion: Quaternion): Quaternion;\r\n\r\n /** @hidden */\r\n _processLateAnimationBindings(): void;\r\n\r\n /**\r\n * Will start the animation sequence of a given target\r\n * @param target defines the target\r\n * @param from defines from which frame should animation start\r\n * @param to defines until which frame should animation run.\r\n * @param weight defines the weight to apply to the animation (1.0 by default)\r\n * @param loop defines if the animation loops\r\n * @param speedRatio defines the speed in which to run the animation (1.0 by default)\r\n * @param onAnimationEnd defines the function to be executed when the animation ends\r\n * @param animatable defines an animatable object. If not provided a new one will be created from the given params\r\n * @param targetMask defines if the target should be animated if animations are present (this is called recursively on descendant animatables regardless of return value)\r\n * @param onAnimationLoop defines the callback to call when an animation loops\r\n * @param isAdditive defines whether the animation should be evaluated additively (false by default)\r\n * @returns the animatable object created for this animation\r\n */\r\n beginWeightedAnimation(target: any, from: number, to: number, weight: number, loop?: boolean, speedRatio?: number,\r\n onAnimationEnd?: () => void, animatable?: Animatable, targetMask?: (target: any) => boolean, onAnimationLoop?: () => void, isAdditive?: boolean): Animatable;\r\n\r\n /**\r\n * Will start the animation sequence of a given target\r\n * @param target defines the target\r\n * @param from defines from which frame should animation start\r\n * @param to defines until which frame should animation run.\r\n * @param loop defines if the animation loops\r\n * @param speedRatio defines the speed in which to run the animation (1.0 by default)\r\n * @param onAnimationEnd defines the function to be executed when the animation ends\r\n * @param animatable defines an animatable object. If not provided a new one will be created from the given params\r\n * @param stopCurrent defines if the current animations must be stopped first (true by default)\r\n * @param targetMask defines if the target should be animate if animations are present (this is called recursively on descendant animatables regardless of return value)\r\n * @param onAnimationLoop defines the callback to call when an animation loops\r\n * @param isAdditive defines whether the animation should be evaluated additively (false by default)\r\n * @returns the animatable object created for this animation\r\n */\r\n beginAnimation(target: any, from: number, to: number, loop?: boolean, speedRatio?: number,\r\n onAnimationEnd?: () => void, animatable?: Animatable, stopCurrent?: boolean,\r\n targetMask?: (target: any) => boolean, onAnimationLoop?: () => void, isAdditive?: boolean): Animatable;\r\n\r\n /**\r\n * Will start the animation sequence of a given target and its hierarchy\r\n * @param target defines the target\r\n * @param directDescendantsOnly if true only direct descendants will be used, if false direct and also indirect (children of children, an so on in a recursive manner) descendants will be used.\r\n * @param from defines from which frame should animation start\r\n * @param to defines until which frame should animation run.\r\n * @param loop defines if the animation loops\r\n * @param speedRatio defines the speed in which to run the animation (1.0 by default)\r\n * @param onAnimationEnd defines the function to be executed when the animation ends\r\n * @param animatable defines an animatable object. If not provided a new one will be created from the given params\r\n * @param stopCurrent defines if the current animations must be stopped first (true by default)\r\n * @param targetMask defines if the target should be animated if animations are present (this is called recursively on descendant animatables regardless of return value)\r\n * @param onAnimationLoop defines the callback to call when an animation loops\r\n * @param isAdditive defines whether the animation should be evaluated additively (false by default)\r\n * @returns the list of created animatables\r\n */\r\n beginHierarchyAnimation(target: any, directDescendantsOnly: boolean, from: number, to: number, loop?: boolean, speedRatio?: number,\r\n onAnimationEnd?: () => void, animatable?: Animatable, stopCurrent?: boolean,\r\n targetMask?: (target: any) => boolean, onAnimationLoop?: () => void, isAdditive?: boolean): Animatable[];\r\n\r\n /**\r\n * Begin a new animation on a given node\r\n * @param target defines the target where the animation will take place\r\n * @param animations defines the list of animations to start\r\n * @param from defines the initial value\r\n * @param to defines the final value\r\n * @param loop defines if you want animation to loop (off by default)\r\n * @param speedRatio defines the speed ratio to apply to all animations\r\n * @param onAnimationEnd defines the callback to call when an animation ends (will be called once per node)\r\n * @param onAnimationLoop defines the callback to call when an animation loops\r\n * @param isAdditive defines whether the animation should be evaluated additively (false by default)\r\n * @returns the list of created animatables\r\n */\r\n beginDirectAnimation(target: any, animations: Animation[], from: number, to: number, loop?: boolean, speedRatio?: number, onAnimationEnd?: () => void, onAnimationLoop?: () => void, isAdditive?: boolean): Animatable;\r\n\r\n /**\r\n * Begin a new animation on a given node and its hierarchy\r\n * @param target defines the root node where the animation will take place\r\n * @param directDescendantsOnly if true only direct descendants will be used, if false direct and also indirect (children of children, an so on in a recursive manner) descendants will be used.\r\n * @param animations defines the list of animations to start\r\n * @param from defines the initial value\r\n * @param to defines the final value\r\n * @param loop defines if you want animation to loop (off by default)\r\n * @param speedRatio defines the speed ratio to apply to all animations\r\n * @param onAnimationEnd defines the callback to call when an animation ends (will be called once per node)\r\n * @param onAnimationLoop defines the callback to call when an animation loops\r\n * @param isAdditive defines whether the animation should be evaluated additively (false by default)\r\n * @returns the list of animatables created for all nodes\r\n */\r\n beginDirectHierarchyAnimation(target: Node, directDescendantsOnly: boolean, animations: Animation[], from: number, to: number, loop?: boolean, speedRatio?: number, onAnimationEnd?: () => void, onAnimationLoop?: () => void, isAdditive?: boolean): Animatable[];\r\n\r\n /**\r\n * Gets the animatable associated with a specific target\r\n * @param target defines the target of the animatable\r\n * @returns the required animatable if found\r\n */\r\n getAnimatableByTarget(target: any): Nullable<Animatable>;\r\n\r\n /**\r\n * Gets all animatables associated with a given target\r\n * @param target defines the target to look animatables for\r\n * @returns an array of Animatables\r\n */\r\n getAllAnimatablesByTarget(target: any): Array<Animatable>;\r\n\r\n /**\r\n * Stops and removes all animations that have been applied to the scene\r\n */\r\n stopAllAnimations(): void;\r\n\r\n /**\r\n * Gets the current delta time used by animation engine\r\n */\r\n deltaTime: number;\r\n }\r\n}\r\n\r\nScene.prototype._animate = function (): void {\r\n if (!this.animationsEnabled) {\r\n return;\r\n }\r\n\r\n // Getting time\r\n var now = PrecisionDate.Now;\r\n if (!this._animationTimeLast) {\r\n if (this._pendingData.length > 0) {\r\n return;\r\n }\r\n this._animationTimeLast = now;\r\n }\r\n\r\n this.deltaTime = this.useConstantAnimationDeltaTime ? 16.0 : (now - this._animationTimeLast) * this.animationTimeScale;\r\n this._animationTimeLast = now;\r\n\r\n const animatables = this._activeAnimatables;\r\n if (animatables.length === 0) {\r\n return;\r\n }\r\n\r\n this._animationTime += this.deltaTime;\r\n const animationTime = this._animationTime;\r\n\r\n for (let index = 0; index < animatables.length; index++) {\r\n let animatable = animatables[index];\r\n\r\n if (!animatable._animate(animationTime) && animatable.disposeOnEnd) {\r\n index--; // Array was updated\r\n }\r\n }\r\n\r\n // Late animation bindings\r\n this._processLateAnimationBindings();\r\n};\r\n\r\nScene.prototype.beginWeightedAnimation = function (target: any, from: number, to: number, weight = 1.0, loop?: boolean, speedRatio: number = 1.0,\r\n onAnimationEnd?: () => void, animatable?: Animatable, targetMask?: (target: any) => boolean, onAnimationLoop?: () => void, isAdditive = false): Animatable {\r\n\r\n let returnedAnimatable = this.beginAnimation(target, from, to, loop, speedRatio, onAnimationEnd, animatable, false, targetMask, onAnimationLoop, isAdditive);\r\n returnedAnimatable.weight = weight;\r\n\r\n return returnedAnimatable;\r\n};\r\n\r\nScene.prototype.beginAnimation = function (target: any, from: number, to: number, loop?: boolean, speedRatio: number = 1.0,\r\n onAnimationEnd?: () => void, animatable?: Animatable, stopCurrent = true,\r\n targetMask?: (target: any) => boolean, onAnimationLoop?: () => void, isAdditive = false): Animatable {\r\n\r\n if (from > to && speedRatio > 0) {\r\n speedRatio *= -1;\r\n }\r\n\r\n if (stopCurrent) {\r\n this.stopAnimation(target, undefined, targetMask);\r\n }\r\n\r\n if (!animatable) {\r\n animatable = new Animatable(this, target, from, to, loop, speedRatio, onAnimationEnd, undefined, onAnimationLoop, isAdditive);\r\n }\r\n\r\n const shouldRunTargetAnimations = targetMask ? targetMask(target) : true;\r\n // Local animations\r\n if (target.animations && shouldRunTargetAnimations) {\r\n animatable.appendAnimations(target, target.animations);\r\n }\r\n\r\n // Children animations\r\n if (target.getAnimatables) {\r\n var animatables = target.getAnimatables();\r\n for (var index = 0; index < animatables.length; index++) {\r\n this.beginAnimation(animatables[index], from, to, loop, speedRatio, onAnimationEnd, animatable, stopCurrent, targetMask, onAnimationLoop);\r\n }\r\n }\r\n\r\n animatable.reset();\r\n\r\n return animatable;\r\n};\r\n\r\nScene.prototype.beginHierarchyAnimation = function (target: any, directDescendantsOnly: boolean, from: number, to: number, loop?: boolean, speedRatio: number = 1.0,\r\n onAnimationEnd?: () => void, animatable?: Animatable, stopCurrent = true,\r\n targetMask?: (target: any) => boolean, onAnimationLoop?: () => void, isAdditive = false): Animatable[] {\r\n\r\n let children = target.getDescendants(directDescendantsOnly);\r\n\r\n let result = [];\r\n result.push(this.beginAnimation(target, from, to, loop, speedRatio, onAnimationEnd, animatable, stopCurrent, targetMask, undefined, isAdditive));\r\n for (var child of children) {\r\n result.push(this.beginAnimation(child, from, to, loop, speedRatio, onAnimationEnd, animatable, stopCurrent, targetMask, undefined, isAdditive));\r\n }\r\n\r\n return result;\r\n};\r\n\r\nScene.prototype.beginDirectAnimation = function (target: any, animations: Animation[], from: number, to: number, loop?: boolean, speedRatio?: number, onAnimationEnd?: () => void, onAnimationLoop?: () => void, isAdditive = false): Animatable {\r\n if (speedRatio === undefined) {\r\n speedRatio = 1.0;\r\n }\r\n\r\n if (from > to && speedRatio > 0) {\r\n speedRatio *= -1;\r\n }\r\n\r\n var animatable = new Animatable(this, target, from, to, loop, speedRatio, onAnimationEnd, animations, onAnimationLoop, isAdditive);\r\n\r\n return animatable;\r\n};\r\n\r\nScene.prototype.beginDirectHierarchyAnimation = function (target: Node, directDescendantsOnly: boolean, animations: Animation[], from: number, to: number, loop?: boolean, speedRatio?: number, onAnimationEnd?: () => void, onAnimationLoop?: () => void, isAdditive = false): Animatable[] {\r\n let children = target.getDescendants(directDescendantsOnly);\r\n\r\n let result = [];\r\n result.push(this.beginDirectAnimation(target, animations, from, to, loop, speedRatio, onAnimationEnd, onAnimationLoop, isAdditive));\r\n for (var child of children) {\r\n result.push(this.beginDirectAnimation(child, animations, from, to, loop, speedRatio, onAnimationEnd, onAnimationLoop, isAdditive));\r\n }\r\n\r\n return result;\r\n};\r\n\r\nScene.prototype.getAnimatableByTarget = function (target: any): Nullable<Animatable> {\r\n for (var index = 0; index < this._activeAnimatables.length; index++) {\r\n if (this._activeAnimatables[index].target === target) {\r\n return this._activeAnimatables[index];\r\n }\r\n }\r\n\r\n return null;\r\n};\r\n\r\nScene.prototype.getAllAnimatablesByTarget = function (target: any): Array<Animatable> {\r\n let result = [];\r\n for (var index = 0; index < this._activeAnimatables.length; index++) {\r\n if (this._activeAnimatables[index].target === target) {\r\n result.push(this._activeAnimatables[index]);\r\n }\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Will stop the animation of the given target\r\n * @param target - the target\r\n * @param animationName - the name of the animation to stop (all animations will be stopped if both this and targetMask are empty)\r\n * @param targetMask - a function that determines if the animation should be stopped based on its target (all animations will be stopped if both this and animationName are empty)\r\n */\r\nScene.prototype.stopAnimation = function (target: any, animationName?: string, targetMask?: (target: any) => boolean): void {\r\n var animatables = this.getAllAnimatablesByTarget(target);\r\n\r\n for (var animatable of animatables) {\r\n animatable.stop(animationName, targetMask);\r\n }\r\n};\r\n\r\n/**\r\n * Stops and removes all animations that have been applied to the scene\r\n */\r\nScene.prototype.stopAllAnimations = function (): void {\r\n if (this._activeAnimatables) {\r\n for (let i = 0; i < this._activeAnimatables.length; i++) {\r\n this._activeAnimatables[i].stop();\r\n }\r\n this._activeAnimatables = [];\r\n }\r\n\r\n for (var group of this.animationGroups) {\r\n group.stop();\r\n }\r\n};\r\n\r\nScene.prototype._registerTargetForLateAnimationBinding = function (runtimeAnimation: RuntimeAnimation, originalValue: any): void {\r\n let target = runtimeAnimation.target;\r\n this._registeredForLateAnimationBindings.pushNoDuplicate(target);\r\n\r\n if (!target._lateAnimationHolders) {\r\n target._lateAnimationHolders = {};\r\n }\r\n\r\n if (!target._lateAnimationHolders[runtimeAnimation.targetPath]) {\r\n target._lateAnimationHolders[runtimeAnimation.targetPath] = {\r\n totalWeight: 0,\r\n totalAdditiveWeight: 0,\r\n animations: [],\r\n additiveAnimations: [],\r\n originalValue: originalValue\r\n };\r\n }\r\n\r\n if (runtimeAnimation.isAdditive) {\r\n target._lateAnimationHolders[runtimeAnimation.targetPath].additiveAnimations.push(runtimeAnimation);\r\n target._lateAnimationHolders[runtimeAnimation.targetPath].totalAdditiveWeight += runtimeAnimation.weight;\r\n } else {\r\n target._lateAnimationHolders[runtimeAnimation.targetPath].animations.push(runtimeAnimation);\r\n target._lateAnimationHolders[runtimeAnimation.targetPath].totalWeight += runtimeAnimation.weight;\r\n }\r\n};\r\n\r\nScene.prototype._processLateAnimationBindingsForMatrices = function (holder: {\r\n totalWeight: number,\r\n totalAdditiveWeight: number,\r\n animations: RuntimeAnimation[],\r\n additiveAnimations: RuntimeAnimation[],\r\n originalValue: Matrix\r\n}): any {\r\n if (holder.totalWeight === 0 && holder.totalAdditiveWeight === 0) {\r\n return holder.originalValue;\r\n }\r\n\r\n let normalizer = 1.0;\r\n let finalPosition = TmpVectors.Vector3[0];\r\n let finalScaling = TmpVectors.Vector3[1];\r\n let finalQuaternion = TmpVectors.Quaternion[0];\r\n let startIndex = 0;\r\n let originalAnimation = holder.animations[0];\r\n let originalValue = holder.originalValue;\r\n\r\n var scale = 1;\r\n let skipOverride = false;\r\n if (holder.totalWeight < 1.0) {\r\n // We need to mix the original value in\r\n scale = 1.0 - holder.totalWeight;\r\n originalValue.decompose(finalScaling, finalQuaternion, finalPosition);\r\n } else {\r\n startIndex = 1;\r\n // We need to normalize the weights\r\n normalizer = holder.totalWeight;\r\n scale = originalAnimation.weight / normalizer;\r\n if (scale == 1) {\r\n if (holder.totalAdditiveWeight) {\r\n skipOverride = true;\r\n } else {\r\n return originalAnimation.currentValue;\r\n }\r\n }\r\n\r\n originalAnimation.currentValue.decompose(finalScaling, finalQuaternion, finalPosition);\r\n }\r\n\r\n // Add up the override animations\r\n if (!skipOverride) {\r\n finalScaling.scaleInPlace(scale);\r\n finalPosition.scaleInPlace(scale);\r\n finalQuaternion.scaleInPlace(scale);\r\n\r\n for (var animIndex = startIndex; animIndex < holder.animations.length; animIndex++) {\r\n var runtimeAnimation = holder.animations[animIndex];\r\n if (runtimeAnimation.weight === 0) {\r\n continue;\r\n }\r\n\r\n var scale = runtimeAnimation.weight / normalizer;\r\n let currentPosition = TmpVectors.Vector3[2];\r\n let currentScaling = TmpVectors.Vector3[3];\r\n let currentQuaternion = TmpVectors.Quaternion[1];\r\n\r\n runtimeAnimation.currentValue.decompose(currentScaling, currentQuaternion, currentPosition);\r\n currentScaling.scaleAndAddToRef(scale, finalScaling);\r\n currentQuaternion.scaleAndAddToRef(scale, finalQuaternion);\r\n currentPosition.scaleAndAddToRef(scale, finalPosition);\r\n }\r\n }\r\n\r\n // Add up the additive animations\r\n for (let animIndex = 0; animIndex < holder.additiveAnimations.length; animIndex++) {\r\n var runtimeAnimation = holder.additiveAnimations[animIndex];\r\n if (runtimeAnimation.weight === 0) {\r\n continue;\r\n }\r\n\r\n let currentPosition = TmpVectors.Vector3[2];\r\n let currentScaling = TmpVectors.Vector3[3];\r\n let currentQuaternion = TmpVectors.Quaternion[1];\r\n\r\n runtimeAnimation.currentValue.decompose(currentScaling, currentQuaternion, currentPosition);\r\n currentScaling.multiplyToRef(finalScaling, currentScaling);\r\n Vector3.LerpToRef(finalScaling, currentScaling, runtimeAnimation.weight, finalScaling);\r\n finalQuaternion.multiplyToRef(currentQuaternion, currentQuaternion);\r\n Quaternion.SlerpToRef(finalQuaternion, currentQuaternion, runtimeAnimation.weight, finalQuaternion);\r\n currentPosition.scaleAndAddToRef(runtimeAnimation.weight, finalPosition);\r\n\r\n }\r\n\r\n let workValue = originalAnimation ? originalAnimation._animationState.workValue : TmpVectors.Matrix[0].clone();\r\n Matrix.ComposeToRef(finalScaling, finalQuaternion, finalPosition, workValue);\r\n return workValue;\r\n};\r\n\r\nScene.prototype._processLateAnimationBindingsForQuaternions = function (holder: {\r\n totalWeight: number,\r\n totalAdditiveWeight: number,\r\n animations: RuntimeAnimation[],\r\n additiveAnimations: RuntimeAnimation[],\r\n originalValue: Quaternion\r\n}, refQuaternion: Quaternion): Quaternion {\r\n if (holder.totalWeight === 0 && holder.totalAdditiveWeight === 0) {\r\n return refQuaternion;\r\n }\r\n\r\n let originalAnimation = holder.animations[0];\r\n let originalValue = holder.originalValue;\r\n let cumulativeQuaternion = refQuaternion;\r\n\r\n if (holder.totalWeight === 0 && holder.totalAdditiveWeight > 0) {\r\n cumulativeQuaternion.copyFrom(originalValue);\r\n } else if (holder.animations.length === 1) {\r\n Quaternion.SlerpToRef(originalValue, originalAnimation.currentValue, Math.min(1.0, holder.totalWeight), cumulativeQuaternion);\r\n\r\n if (holder.totalAdditiveWeight === 0) {\r\n return cumulativeQuaternion;\r\n }\r\n } else if (holder.animations.length > 1) {\r\n // Add up the override animations\r\n let normalizer = 1.0;\r\n let quaternions: Array<Quaternion>;\r\n let weights: Array<number>;\r\n\r\n if (holder.totalWeight < 1.0) {\r\n let scale = 1.0 - holder.totalWeight;\r\n\r\n quaternions = [];\r\n weights = [];\r\n\r\n quaternions.push(originalValue);\r\n weights.push(scale);\r\n } else {\r\n if (holder.animations.length === 2) { // Slerp as soon as we can\r\n Quaternion.SlerpToRef(holder.animations[0].currentValue, holder.animations[1].currentValue, holder.animations[1].weight / holder.totalWeight, refQuaternion);\r\n\r\n if (holder.totalAdditiveWeight === 0) {\r\n return refQuaternion;\r\n }\r\n }\r\n\r\n quaternions = [];\r\n weights = [];\r\n normalizer = holder.totalWeight;\r\n }\r\n\r\n for (var animIndex = 0; animIndex < holder.animations.length; animIndex++) {\r\n let runtimeAnimation = holder.animations[animIndex];\r\n quaternions.push(runtimeAnimation.currentValue);\r\n weights.push(runtimeAnimation.weight / normalizer);\r\n }\r\n\r\n // https://gamedev.stackexchange.com/questions/62354/method-for-interpolation-between-3-quaternions\r\n\r\n let cumulativeAmount = 0;\r\n for (var index = 0; index < quaternions.length;) {\r\n if (!index) {\r\n Quaternion.SlerpToRef(quaternions[index], quaternions[index + 1], weights[index + 1] / (weights[index] + weights[index + 1]), refQuaternion);\r\n cumulativeQuaternion = refQuaternion;\r\n cumulativeAmount = weights[index] + weights[index + 1];\r\n index += 2;\r\n continue;\r\n }\r\n cumulativeAmount += weights[index];\r\n Quaternion.SlerpToRef(cumulativeQuaternion, quaternions[index], weights[index] / cumulativeAmount, cumulativeQuaternion);\r\n index++;\r\n }\r\n }\r\n\r\n // Add up the additive animations\r\n for (let animIndex = 0; animIndex < holder.additiveAnimations.length; animIndex++) {\r\n let runtimeAnimation = holder.additiveAnimations[animIndex];\r\n if (runtimeAnimation.weight === 0) {\r\n continue;\r\n }\r\n\r\n cumulativeQuaternion.multiplyToRef(runtimeAnimation.currentValue, TmpVectors.Quaternion[0]);\r\n Quaternion.SlerpToRef(cumulativeQuaternion, TmpVectors.Quaternion[0], runtimeAnimation.weight, cumulativeQuaternion);\r\n }\r\n\r\n return cumulativeQuaternion!;\r\n};\r\n\r\nScene.prototype._processLateAnimationBindings = function (): void {\r\n if (!this._registeredForLateAnimationBindings.length) {\r\n return;\r\n }\r\n for (var index = 0; index < this._registeredForLateAnimationBindings.length; index++) {\r\n var target = this._registeredForLateAnimationBindings.data[index];\r\n\r\n for (var path in target._lateAnimationHolders) {\r\n var holder = target._lateAnimationHolders[path];\r\n let originalAnimation: RuntimeAnimation = holder.animations[0];\r\n let originalValue = holder.originalValue;\r\n\r\n let matrixDecomposeMode = Animation.AllowMatrixDecomposeForInterpolation && originalValue.m; // ie. data is matrix\r\n\r\n let finalValue: any = target[path];\r\n if (matrixDecomposeMode) {\r\n finalValue = this._processLateAnimationBindingsForMatrices(holder);\r\n } else {\r\n let quaternionMode = originalValue.w !== undefined;\r\n if (quaternionMode) {\r\n finalValue = this._processLateAnimationBindingsForQuaternions(holder, finalValue || Quaternion.Identity());\r\n } else {\r\n\r\n let startIndex = 0;\r\n let normalizer = 1.0;\r\n\r\n if (holder.totalWeight < 1.0) {\r\n // We need to mix the original value in\r\n if (originalAnimation && originalValue.scale) {\r\n finalValue = originalValue.scale(1.0 - holder.totalWeight);\r\n } else if (originalAnimation) {\r\n finalValue = originalValue * (1.0 - holder.totalWeight);\r\n } else if (originalValue.clone) {\r\n finalValue = originalValue.clone();\r\n } else {\r\n finalValue = originalValue;\r\n }\r\n } else if (originalAnimation) {\r\n // We need to normalize the weights\r\n normalizer = holder.totalWeight;\r\n let scale = originalAnimation.weight / normalizer;\r\n if (scale !== 1) {\r\n if (originalAnimation.currentValue.scale) {\r\n finalValue = originalAnimation.currentValue.scale(scale);\r\n } else {\r\n finalValue = originalAnimation.currentValue * scale;\r\n }\r\n } else {\r\n finalValue = originalAnimation.currentValue;\r\n }\r\n\r\n startIndex = 1;\r\n }\r\n\r\n // Add up the override animations\r\n for (var animIndex = startIndex; animIndex < holder.animations.length; animIndex++) {\r\n var runtimeAnimation = holder.animations[animIndex];\r\n var scale = runtimeAnimation.weight / normalizer;\r\n\r\n if (!scale) {\r\n continue;\r\n } else if (runtimeAnimation.currentValue.scaleAndAddToRef) {\r\n runtimeAnimation.currentValue.scaleAndAddToRef(scale, finalValue);\r\n } else {\r\n finalValue += runtimeAnimation.currentValue * scale;\r\n }\r\n }\r\n\r\n // Add up the additive animations\r\n for (let animIndex = 0; animIndex < holder.additiveAnimations.length; animIndex++) {\r\n var runtimeAnimation = holder.additiveAnimations[animIndex];\r\n var scale: number = runtimeAnimation.weight;\r\n\r\n if (!scale) {\r\n continue;\r\n } else if (runtimeAnimation.currentValue.scaleAndAddToRef) {\r\n runtimeAnimation.currentValue.scaleAndAddToRef(scale, finalValue);\r\n } else {\r\n finalValue += runtimeAnimation.currentValue * scale;\r\n }\r\n }\r\n }\r\n }\r\n target[path] = finalValue;\r\n }\r\n\r\n target._lateAnimationHolders = {};\r\n }\r\n this._registeredForLateAnimationBindings.reset();\r\n};\r\n\r\ndeclare module \"../Bones/bone\" {\r\n export interface Bone {\r\n /**\r\n * Copy an animation range from another bone\r\n * @param source defines the source bone\r\n * @param rangeName defines the range name to copy\r\n * @param frameOffset defines the frame offset\r\n * @param rescaleAsRequired defines if rescaling must be applied if required\r\n * @param skelDimensionsRatio defines the scaling ratio\r\n * @returns true if operation was successful\r\n */\r\n copyAnimationRange(source: Bone, rangeName: string, frameOffset: number, rescaleAsRequired: boolean, skelDimensionsRatio: Nullable<Vector3>): boolean;\r\n }\r\n}\r\n\r\nBone.prototype.copyAnimationRange = function (source: Bone, rangeName: string, frameOffset: number, rescaleAsRequired = false, skelDimensionsRatio: Nullable<Vector3> = null): boolean {\r\n // all animation may be coming from a library skeleton, so may need to create animation\r\n if (this.animations.length === 0) {\r\n this.animations.push(new Animation(this.name, \"_matrix\", source.animations[0].framePerSecond, Animation.ANIMATIONTYPE_MATRIX, 0));\r\n this.animations[0].setKeys([]);\r\n }\r\n\r\n // get animation info / verify there is such a range from the source bone\r\n var sourceRange = source.animations[0].getRange(rangeName);\r\n if (!sourceRange) {\r\n return false;\r\n }\r\n var from = sourceRange.from;\r\n var to = sourceRange.to;\r\n var sourceKeys = source.animations[0].getKeys();\r\n\r\n // rescaling prep\r\n var sourceBoneLength = source.length;\r\n var sourceParent = source.getParent();\r\n var parent = this.getParent();\r\n var parentScalingReqd = rescaleAsRequired && sourceParent && sourceBoneLength && this.length && sourceBoneLength !== this.length;\r\n var parentRatio = parentScalingReqd && parent && sourceParent ? parent.length / sourceParent.length : 1;\r\n\r\n var dimensionsScalingReqd = rescaleAsRequired && !parent && skelDimensionsRatio && (skelDimensionsRatio.x !== 1 || skelDimensionsRatio.y !== 1 || skelDimensionsRatio.z !== 1);\r\n\r\n var destKeys = this.animations[0].getKeys();\r\n\r\n // loop vars declaration\r\n var orig: { frame: number, value: Matrix };\r\n var origTranslation: Vector3;\r\n var mat: Matrix;\r\n\r\n for (var key = 0, nKeys = sourceKeys.length; key < nKeys; key++) {\r\n orig = sourceKeys[key];\r\n if (orig.frame >= from && orig.frame <= to) {\r\n if (rescaleAsRequired) {\r\n mat = orig.value.clone();\r\n\r\n // scale based on parent ratio, when bone has parent\r\n if (parentScalingReqd) {\r\n origTranslation = mat.getTranslation();\r\n mat.setTranslation(origTranslation.scaleInPlace(parentRatio));\r\n\r\n // scale based on skeleton dimension ratio when root bone, and value is passed\r\n } else if (dimensionsScalingReqd && skelDimensionsRatio) {\r\n origTranslation = mat.getTranslation();\r\n mat.setTranslation(origTranslation.multiplyInPlace(skelDimensionsRatio));\r\n\r\n // use original when root bone, and no data for skelDimensionsRatio\r\n } else {\r\n mat = orig.value;\r\n }\r\n } else {\r\n mat = orig.value;\r\n }\r\n destKeys.push({ frame: orig.frame + frameOffset, value: mat });\r\n }\r\n }\r\n this.animations[0].createRange(rangeName, from + frameOffset, to + frameOffset);\r\n return true;\r\n};\r\n"]}
1
+ {"version":3,"file":"animatable.js","sourceRoot":"","sources":["../../../sourceES6/core/Animations/animatable.ts"],"names":[],"mappings":"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","sourcesContent":["import { Animation } from \"./animation\";\r\nimport { RuntimeAnimation } from \"./runtimeAnimation\";\r\n\r\nimport { Nullable } from \"../types\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport { Scene } from \"../scene\";\r\nimport { Matrix, Quaternion, Vector3, TmpVectors } from '../Maths/math.vector';\r\nimport { PrecisionDate } from '../Misc/precisionDate';\r\nimport { Bone } from '../Bones/bone';\r\nimport { Node } from \"../node\";\r\n\r\n/**\r\n * Class used to store an actual running animation\r\n */\r\nexport class Animatable {\r\n private _localDelayOffset: Nullable<number> = null;\r\n private _pausedDelay: Nullable<number> = null;\r\n private _manualJumpDelay: Nullable<number> = null;\r\n private _runtimeAnimations = new Array<RuntimeAnimation>();\r\n private _paused = false;\r\n private _scene: Scene;\r\n private _speedRatio = 1;\r\n private _weight = -1.0;\r\n private _syncRoot: Nullable<Animatable> = null;\r\n private _frameToSyncFromJump: Nullable<number> = 0;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if the animatable must be disposed and removed at the end of the animation.\r\n * This will only apply for non looping animation (default is true)\r\n */\r\n public disposeOnEnd = true;\r\n\r\n /**\r\n * Gets a boolean indicating if the animation has started\r\n */\r\n public animationStarted = false;\r\n\r\n /**\r\n * Observer raised when the animation ends\r\n */\r\n public onAnimationEndObservable = new Observable<Animatable>();\r\n\r\n /**\r\n * Observer raised when the animation loops\r\n */\r\n public onAnimationLoopObservable = new Observable<Animatable>();\r\n\r\n /**\r\n * Gets the root Animatable used to synchronize and normalize animations\r\n */\r\n public get syncRoot(): Nullable<Animatable> {\r\n return this._syncRoot;\r\n }\r\n\r\n /**\r\n * Gets the current frame of the first RuntimeAnimation\r\n * Used to synchronize Animatables\r\n */\r\n public get masterFrame(): number {\r\n if (this._runtimeAnimations.length === 0) {\r\n return 0;\r\n }\r\n\r\n return this._runtimeAnimations[0].currentFrame;\r\n }\r\n\r\n /**\r\n * Gets or sets the animatable weight (-1.0 by default meaning not weighted)\r\n */\r\n public get weight(): number {\r\n return this._weight;\r\n }\r\n\r\n public set weight(value: number) {\r\n if (value === -1) { // -1 is ok and means no weight\r\n this._weight = -1;\r\n return;\r\n }\r\n\r\n // Else weight must be in [0, 1] range\r\n this._weight = Math.min(Math.max(value, 0), 1.0);\r\n }\r\n\r\n /**\r\n * Gets or sets the speed ratio to apply to the animatable (1.0 by default)\r\n */\r\n public get speedRatio(): number {\r\n return this._speedRatio;\r\n }\r\n\r\n public set speedRatio(value: number) {\r\n for (var index = 0; index < this._runtimeAnimations.length; index++) {\r\n var animation = this._runtimeAnimations[index];\r\n\r\n animation._prepareForSpeedRatioChange(value);\r\n }\r\n this._speedRatio = value;\r\n }\r\n\r\n /**\r\n * Creates a new Animatable\r\n * @param scene defines the hosting scene\r\n * @param target defines the target object\r\n * @param fromFrame defines the starting frame number (default is 0)\r\n * @param toFrame defines the ending frame number (default is 100)\r\n * @param loopAnimation defines if the animation must loop (default is false)\r\n * @param speedRatio defines the factor to apply to animation speed (default is 1)\r\n * @param onAnimationEnd defines a callback to call when animation ends if it is not looping\r\n * @param animations defines a group of animation to add to the new Animatable\r\n * @param onAnimationLoop defines a callback to call when animation loops\r\n * @param isAdditive defines whether the animation should be evaluated additively\r\n */\r\n constructor(scene: Scene,\r\n /** defines the target object */\r\n public target: any,\r\n /** defines the starting frame number (default is 0) */\r\n public fromFrame: number = 0,\r\n /** defines the ending frame number (default is 100) */\r\n public toFrame: number = 100,\r\n /** defines if the animation must loop (default is false) */\r\n public loopAnimation: boolean = false,\r\n speedRatio: number = 1.0,\r\n /** defines a callback to call when animation ends if it is not looping */\r\n public onAnimationEnd?: Nullable<() => void>,\r\n animations?: Animation[],\r\n /** defines a callback to call when animation loops */\r\n public onAnimationLoop?: Nullable<() => void>,\r\n /** defines whether the animation should be evaluated additively */\r\n public isAdditive: boolean = false) {\r\n this._scene = scene;\r\n if (animations) {\r\n this.appendAnimations(target, animations);\r\n }\r\n\r\n this._speedRatio = speedRatio;\r\n scene._activeAnimatables.push(this);\r\n }\r\n\r\n // Methods\r\n /**\r\n * Synchronize and normalize current Animatable with a source Animatable\r\n * This is useful when using animation weights and when animations are not of the same length\r\n * @param root defines the root Animatable to synchronize with (null to stop synchronizing)\r\n * @returns the current Animatable\r\n */\r\n public syncWith(root: Nullable<Animatable>): Animatable {\r\n this._syncRoot = root;\r\n\r\n if (root) {\r\n // Make sure this animatable will animate after the root\r\n let index = this._scene._activeAnimatables.indexOf(this);\r\n if (index > -1) {\r\n this._scene._activeAnimatables.splice(index, 1);\r\n this._scene._activeAnimatables.push(this);\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets the list of runtime animations\r\n * @returns an array of RuntimeAnimation\r\n */\r\n public getAnimations(): RuntimeAnimation[] {\r\n return this._runtimeAnimations;\r\n }\r\n\r\n /**\r\n * Adds more animations to the current animatable\r\n * @param target defines the target of the animations\r\n * @param animations defines the new animations to add\r\n */\r\n public appendAnimations(target: any, animations: Animation[]): void {\r\n for (var index = 0; index < animations.length; index++) {\r\n var animation = animations[index];\r\n\r\n let newRuntimeAnimation = new RuntimeAnimation(target, animation, this._scene, this);\r\n newRuntimeAnimation._onLoop = () => {\r\n this.onAnimationLoopObservable.notifyObservers(this);\r\n if (this.onAnimationLoop) {\r\n this.onAnimationLoop();\r\n }\r\n };\r\n\r\n this._runtimeAnimations.push(newRuntimeAnimation);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the source animation for a specific property\r\n * @param property defines the property to look for\r\n * @returns null or the source animation for the given property\r\n */\r\n public getAnimationByTargetProperty(property: string): Nullable<Animation> {\r\n var runtimeAnimations = this._runtimeAnimations;\r\n\r\n for (var index = 0; index < runtimeAnimations.length; index++) {\r\n if (runtimeAnimations[index].animation.targetProperty === property) {\r\n return runtimeAnimations[index].animation;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Gets the runtime animation for a specific property\r\n * @param property defines the property to look for\r\n * @returns null or the runtime animation for the given property\r\n */\r\n public getRuntimeAnimationByTargetProperty(property: string): Nullable<RuntimeAnimation> {\r\n var runtimeAnimations = this._runtimeAnimations;\r\n\r\n for (var index = 0; index < runtimeAnimations.length; index++) {\r\n if (runtimeAnimations[index].animation.targetProperty === property) {\r\n return runtimeAnimations[index];\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Resets the animatable to its original state\r\n */\r\n public reset(): void {\r\n var runtimeAnimations = this._runtimeAnimations;\r\n\r\n for (var index = 0; index < runtimeAnimations.length; index++) {\r\n runtimeAnimations[index].reset(true);\r\n }\r\n\r\n this._localDelayOffset = null;\r\n this._pausedDelay = null;\r\n }\r\n\r\n /**\r\n * Allows the animatable to blend with current running animations\r\n * @see https://doc.babylonjs.com/babylon101/animations#animation-blending\r\n * @param blendingSpeed defines the blending speed to use\r\n */\r\n public enableBlending(blendingSpeed: number): void {\r\n var runtimeAnimations = this._runtimeAnimations;\r\n\r\n for (var index = 0; index < runtimeAnimations.length; index++) {\r\n runtimeAnimations[index].animation.enableBlending = true;\r\n runtimeAnimations[index].animation.blendingSpeed = blendingSpeed;\r\n }\r\n }\r\n\r\n /**\r\n * Disable animation blending\r\n * @see https://doc.babylonjs.com/babylon101/animations#animation-blending\r\n */\r\n public disableBlending(): void {\r\n var runtimeAnimations = this._runtimeAnimations;\r\n\r\n for (var index = 0; index < runtimeAnimations.length; index++) {\r\n runtimeAnimations[index].animation.enableBlending = false;\r\n }\r\n }\r\n\r\n /**\r\n * Jump directly to a given frame\r\n * @param frame defines the frame to jump to\r\n */\r\n public goToFrame(frame: number): void {\r\n var runtimeAnimations = this._runtimeAnimations;\r\n\r\n if (runtimeAnimations[0]) {\r\n var fps = runtimeAnimations[0].animation.framePerSecond;\r\n this._frameToSyncFromJump = this._frameToSyncFromJump ?? runtimeAnimations[0].currentFrame;\r\n var delay = this.speedRatio === 0 ? 0 : ((frame - this._frameToSyncFromJump) / fps * 1000) / this.speedRatio;\r\n this._manualJumpDelay = -delay;\r\n }\r\n\r\n for (var index = 0; index < runtimeAnimations.length; index++) {\r\n runtimeAnimations[index].goToFrame(frame);\r\n }\r\n }\r\n\r\n /**\r\n * Pause the animation\r\n */\r\n public pause(): void {\r\n if (this._paused) {\r\n return;\r\n }\r\n this._paused = true;\r\n }\r\n\r\n /**\r\n * Restart the animation\r\n */\r\n public restart(): void {\r\n this._paused = false;\r\n }\r\n\r\n private _raiseOnAnimationEnd() {\r\n if (this.onAnimationEnd) {\r\n this.onAnimationEnd();\r\n }\r\n\r\n this.onAnimationEndObservable.notifyObservers(this);\r\n }\r\n\r\n /**\r\n * Stop and delete the current animation\r\n * @param animationName defines a string used to only stop some of the runtime animations instead of all\r\n * @param targetMask - a function that determines if the animation should be stopped based on its target (all animations will be stopped if both this and animationName are empty)\r\n */\r\n public stop(animationName?: string, targetMask?: (target: any) => boolean): void {\r\n if (animationName || targetMask) {\r\n var idx = this._scene._activeAnimatables.indexOf(this);\r\n\r\n if (idx > -1) {\r\n\r\n var runtimeAnimations = this._runtimeAnimations;\r\n\r\n for (var index = runtimeAnimations.length - 1; index >= 0; index--) {\r\n const runtimeAnimation = runtimeAnimations[index];\r\n if (animationName && runtimeAnimation.animation.name != animationName) {\r\n continue;\r\n }\r\n if (targetMask && !targetMask(runtimeAnimation.target)) {\r\n continue;\r\n }\r\n\r\n runtimeAnimation.dispose();\r\n runtimeAnimations.splice(index, 1);\r\n }\r\n\r\n if (runtimeAnimations.length == 0) {\r\n this._scene._activeAnimatables.splice(idx, 1);\r\n this._raiseOnAnimationEnd();\r\n }\r\n }\r\n\r\n } else {\r\n\r\n var index = this._scene._activeAnimatables.indexOf(this);\r\n\r\n if (index > -1) {\r\n this._scene._activeAnimatables.splice(index, 1);\r\n var runtimeAnimations = this._runtimeAnimations;\r\n\r\n for (var index = 0; index < runtimeAnimations.length; index++) {\r\n runtimeAnimations[index].dispose();\r\n }\r\n\r\n this._raiseOnAnimationEnd();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Wait asynchronously for the animation to end\r\n * @returns a promise which will be fulfilled when the animation ends\r\n */\r\n public waitAsync(): Promise<Animatable> {\r\n return new Promise((resolve, reject) => {\r\n this.onAnimationEndObservable.add(() => {\r\n resolve(this);\r\n }, undefined, undefined, this, true);\r\n });\r\n }\r\n\r\n /** @hidden */\r\n public _animate(delay: number): boolean {\r\n if (this._paused) {\r\n this.animationStarted = false;\r\n if (this._pausedDelay === null) {\r\n this._pausedDelay = delay;\r\n }\r\n return true;\r\n }\r\n\r\n if (this._localDelayOffset === null) {\r\n this._localDelayOffset = delay;\r\n this._pausedDelay = null;\r\n } else if (this._pausedDelay !== null) {\r\n this._localDelayOffset += delay - this._pausedDelay;\r\n this._pausedDelay = null;\r\n }\r\n\r\n if (this._manualJumpDelay !== null) {\r\n this._localDelayOffset += this._manualJumpDelay;\r\n this._manualJumpDelay = null;\r\n this._frameToSyncFromJump = null;\r\n }\r\n\r\n if (this._weight === 0) { // We consider that an animation with a weight === 0 is \"actively\" paused\r\n return true;\r\n }\r\n\r\n // Animating\r\n var running = false;\r\n var runtimeAnimations = this._runtimeAnimations;\r\n var index: number;\r\n\r\n for (index = 0; index < runtimeAnimations.length; index++) {\r\n var animation = runtimeAnimations[index];\r\n var isRunning = animation.animate(delay - this._localDelayOffset, this.fromFrame,\r\n this.toFrame, this.loopAnimation, this._speedRatio, this._weight\r\n );\r\n running = running || isRunning;\r\n }\r\n\r\n this.animationStarted = running;\r\n\r\n if (!running) {\r\n if (this.disposeOnEnd) {\r\n // Remove from active animatables\r\n index = this._scene._activeAnimatables.indexOf(this);\r\n this._scene._activeAnimatables.splice(index, 1);\r\n\r\n // Dispose all runtime animations\r\n for (index = 0; index < runtimeAnimations.length; index++) {\r\n runtimeAnimations[index].dispose();\r\n }\r\n }\r\n\r\n this._raiseOnAnimationEnd();\r\n\r\n if (this.disposeOnEnd) {\r\n this.onAnimationEnd = null;\r\n this.onAnimationLoop = null;\r\n this.onAnimationLoopObservable.clear();\r\n this.onAnimationEndObservable.clear();\r\n }\r\n }\r\n\r\n return running;\r\n }\r\n}\r\n\r\ndeclare module \"../scene\" {\r\n export interface Scene {\r\n /** @hidden */\r\n _registerTargetForLateAnimationBinding(runtimeAnimation: RuntimeAnimation, originalValue: any): void;\r\n\r\n /** @hidden */\r\n _processLateAnimationBindingsForMatrices(holder: {\r\n totalWeight: number,\r\n totalAdditiveWeight: number,\r\n animations: RuntimeAnimation[],\r\n additiveAnimations: RuntimeAnimation[],\r\n originalValue: Matrix\r\n }): any;\r\n\r\n /** @hidden */\r\n _processLateAnimationBindingsForQuaternions(holder: {\r\n totalWeight: number,\r\n totalAdditiveWeight: number,\r\n animations: RuntimeAnimation[],\r\n additiveAnimations: RuntimeAnimation[],\r\n originalValue: Quaternion\r\n }, refQuaternion: Quaternion): Quaternion;\r\n\r\n /** @hidden */\r\n _processLateAnimationBindings(): void;\r\n\r\n /**\r\n * Will start the animation sequence of a given target\r\n * @param target defines the target\r\n * @param from defines from which frame should animation start\r\n * @param to defines until which frame should animation run.\r\n * @param weight defines the weight to apply to the animation (1.0 by default)\r\n * @param loop defines if the animation loops\r\n * @param speedRatio defines the speed in which to run the animation (1.0 by default)\r\n * @param onAnimationEnd defines the function to be executed when the animation ends\r\n * @param animatable defines an animatable object. If not provided a new one will be created from the given params\r\n * @param targetMask defines if the target should be animated if animations are present (this is called recursively on descendant animatables regardless of return value)\r\n * @param onAnimationLoop defines the callback to call when an animation loops\r\n * @param isAdditive defines whether the animation should be evaluated additively (false by default)\r\n * @returns the animatable object created for this animation\r\n */\r\n beginWeightedAnimation(target: any, from: number, to: number, weight: number, loop?: boolean, speedRatio?: number,\r\n onAnimationEnd?: () => void, animatable?: Animatable, targetMask?: (target: any) => boolean, onAnimationLoop?: () => void, isAdditive?: boolean): Animatable;\r\n\r\n /**\r\n * Will start the animation sequence of a given target\r\n * @param target defines the target\r\n * @param from defines from which frame should animation start\r\n * @param to defines until which frame should animation run.\r\n * @param loop defines if the animation loops\r\n * @param speedRatio defines the speed in which to run the animation (1.0 by default)\r\n * @param onAnimationEnd defines the function to be executed when the animation ends\r\n * @param animatable defines an animatable object. If not provided a new one will be created from the given params\r\n * @param stopCurrent defines if the current animations must be stopped first (true by default)\r\n * @param targetMask defines if the target should be animate if animations are present (this is called recursively on descendant animatables regardless of return value)\r\n * @param onAnimationLoop defines the callback to call when an animation loops\r\n * @param isAdditive defines whether the animation should be evaluated additively (false by default)\r\n * @returns the animatable object created for this animation\r\n */\r\n beginAnimation(target: any, from: number, to: number, loop?: boolean, speedRatio?: number,\r\n onAnimationEnd?: () => void, animatable?: Animatable, stopCurrent?: boolean,\r\n targetMask?: (target: any) => boolean, onAnimationLoop?: () => void, isAdditive?: boolean): Animatable;\r\n\r\n /**\r\n * Will start the animation sequence of a given target and its hierarchy\r\n * @param target defines the target\r\n * @param directDescendantsOnly if true only direct descendants will be used, if false direct and also indirect (children of children, an so on in a recursive manner) descendants will be used.\r\n * @param from defines from which frame should animation start\r\n * @param to defines until which frame should animation run.\r\n * @param loop defines if the animation loops\r\n * @param speedRatio defines the speed in which to run the animation (1.0 by default)\r\n * @param onAnimationEnd defines the function to be executed when the animation ends\r\n * @param animatable defines an animatable object. If not provided a new one will be created from the given params\r\n * @param stopCurrent defines if the current animations must be stopped first (true by default)\r\n * @param targetMask defines if the target should be animated if animations are present (this is called recursively on descendant animatables regardless of return value)\r\n * @param onAnimationLoop defines the callback to call when an animation loops\r\n * @param isAdditive defines whether the animation should be evaluated additively (false by default)\r\n * @returns the list of created animatables\r\n */\r\n beginHierarchyAnimation(target: any, directDescendantsOnly: boolean, from: number, to: number, loop?: boolean, speedRatio?: number,\r\n onAnimationEnd?: () => void, animatable?: Animatable, stopCurrent?: boolean,\r\n targetMask?: (target: any) => boolean, onAnimationLoop?: () => void, isAdditive?: boolean): Animatable[];\r\n\r\n /**\r\n * Begin a new animation on a given node\r\n * @param target defines the target where the animation will take place\r\n * @param animations defines the list of animations to start\r\n * @param from defines the initial value\r\n * @param to defines the final value\r\n * @param loop defines if you want animation to loop (off by default)\r\n * @param speedRatio defines the speed ratio to apply to all animations\r\n * @param onAnimationEnd defines the callback to call when an animation ends (will be called once per node)\r\n * @param onAnimationLoop defines the callback to call when an animation loops\r\n * @param isAdditive defines whether the animation should be evaluated additively (false by default)\r\n * @returns the list of created animatables\r\n */\r\n beginDirectAnimation(target: any, animations: Animation[], from: number, to: number, loop?: boolean, speedRatio?: number, onAnimationEnd?: () => void, onAnimationLoop?: () => void, isAdditive?: boolean): Animatable;\r\n\r\n /**\r\n * Begin a new animation on a given node and its hierarchy\r\n * @param target defines the root node where the animation will take place\r\n * @param directDescendantsOnly if true only direct descendants will be used, if false direct and also indirect (children of children, an so on in a recursive manner) descendants will be used.\r\n * @param animations defines the list of animations to start\r\n * @param from defines the initial value\r\n * @param to defines the final value\r\n * @param loop defines if you want animation to loop (off by default)\r\n * @param speedRatio defines the speed ratio to apply to all animations\r\n * @param onAnimationEnd defines the callback to call when an animation ends (will be called once per node)\r\n * @param onAnimationLoop defines the callback to call when an animation loops\r\n * @param isAdditive defines whether the animation should be evaluated additively (false by default)\r\n * @returns the list of animatables created for all nodes\r\n */\r\n beginDirectHierarchyAnimation(target: Node, directDescendantsOnly: boolean, animations: Animation[], from: number, to: number, loop?: boolean, speedRatio?: number, onAnimationEnd?: () => void, onAnimationLoop?: () => void, isAdditive?: boolean): Animatable[];\r\n\r\n /**\r\n * Gets the animatable associated with a specific target\r\n * @param target defines the target of the animatable\r\n * @returns the required animatable if found\r\n */\r\n getAnimatableByTarget(target: any): Nullable<Animatable>;\r\n\r\n /**\r\n * Gets all animatables associated with a given target\r\n * @param target defines the target to look animatables for\r\n * @returns an array of Animatables\r\n */\r\n getAllAnimatablesByTarget(target: any): Array<Animatable>;\r\n\r\n /**\r\n * Stops and removes all animations that have been applied to the scene\r\n */\r\n stopAllAnimations(): void;\r\n\r\n /**\r\n * Gets the current delta time used by animation engine\r\n */\r\n deltaTime: number;\r\n }\r\n}\r\n\r\nScene.prototype._animate = function (): void {\r\n if (!this.animationsEnabled) {\r\n return;\r\n }\r\n\r\n // Getting time\r\n var now = PrecisionDate.Now;\r\n if (!this._animationTimeLast) {\r\n if (this._pendingData.length > 0) {\r\n return;\r\n }\r\n this._animationTimeLast = now;\r\n }\r\n\r\n this.deltaTime = this.useConstantAnimationDeltaTime ? 16.0 : (now - this._animationTimeLast) * this.animationTimeScale;\r\n this._animationTimeLast = now;\r\n\r\n const animatables = this._activeAnimatables;\r\n if (animatables.length === 0) {\r\n return;\r\n }\r\n\r\n this._animationTime += this.deltaTime;\r\n const animationTime = this._animationTime;\r\n\r\n for (let index = 0; index < animatables.length; index++) {\r\n let animatable = animatables[index];\r\n\r\n if (!animatable._animate(animationTime) && animatable.disposeOnEnd) {\r\n index--; // Array was updated\r\n }\r\n }\r\n\r\n // Late animation bindings\r\n this._processLateAnimationBindings();\r\n};\r\n\r\nScene.prototype.beginWeightedAnimation = function (target: any, from: number, to: number, weight = 1.0, loop?: boolean, speedRatio: number = 1.0,\r\n onAnimationEnd?: () => void, animatable?: Animatable, targetMask?: (target: any) => boolean, onAnimationLoop?: () => void, isAdditive = false): Animatable {\r\n\r\n let returnedAnimatable = this.beginAnimation(target, from, to, loop, speedRatio, onAnimationEnd, animatable, false, targetMask, onAnimationLoop, isAdditive);\r\n returnedAnimatable.weight = weight;\r\n\r\n return returnedAnimatable;\r\n};\r\n\r\nScene.prototype.beginAnimation = function (target: any, from: number, to: number, loop?: boolean, speedRatio: number = 1.0,\r\n onAnimationEnd?: () => void, animatable?: Animatable, stopCurrent = true,\r\n targetMask?: (target: any) => boolean, onAnimationLoop?: () => void, isAdditive = false): Animatable {\r\n\r\n if (from > to && speedRatio > 0) {\r\n speedRatio *= -1;\r\n }\r\n\r\n if (stopCurrent) {\r\n this.stopAnimation(target, undefined, targetMask);\r\n }\r\n\r\n if (!animatable) {\r\n animatable = new Animatable(this, target, from, to, loop, speedRatio, onAnimationEnd, undefined, onAnimationLoop, isAdditive);\r\n }\r\n\r\n const shouldRunTargetAnimations = targetMask ? targetMask(target) : true;\r\n // Local animations\r\n if (target.animations && shouldRunTargetAnimations) {\r\n animatable.appendAnimations(target, target.animations);\r\n }\r\n\r\n // Children animations\r\n if (target.getAnimatables) {\r\n var animatables = target.getAnimatables();\r\n for (var index = 0; index < animatables.length; index++) {\r\n this.beginAnimation(animatables[index], from, to, loop, speedRatio, onAnimationEnd, animatable, stopCurrent, targetMask, onAnimationLoop);\r\n }\r\n }\r\n\r\n animatable.reset();\r\n\r\n return animatable;\r\n};\r\n\r\nScene.prototype.beginHierarchyAnimation = function (target: any, directDescendantsOnly: boolean, from: number, to: number, loop?: boolean, speedRatio: number = 1.0,\r\n onAnimationEnd?: () => void, animatable?: Animatable, stopCurrent = true,\r\n targetMask?: (target: any) => boolean, onAnimationLoop?: () => void, isAdditive = false): Animatable[] {\r\n\r\n let children = target.getDescendants(directDescendantsOnly);\r\n\r\n let result = [];\r\n result.push(this.beginAnimation(target, from, to, loop, speedRatio, onAnimationEnd, animatable, stopCurrent, targetMask, undefined, isAdditive));\r\n for (var child of children) {\r\n result.push(this.beginAnimation(child, from, to, loop, speedRatio, onAnimationEnd, animatable, stopCurrent, targetMask, undefined, isAdditive));\r\n }\r\n\r\n return result;\r\n};\r\n\r\nScene.prototype.beginDirectAnimation = function (target: any, animations: Animation[], from: number, to: number, loop?: boolean, speedRatio?: number, onAnimationEnd?: () => void, onAnimationLoop?: () => void, isAdditive = false): Animatable {\r\n if (speedRatio === undefined) {\r\n speedRatio = 1.0;\r\n }\r\n\r\n if (from > to && speedRatio > 0) {\r\n speedRatio *= -1;\r\n } else if (to > from && speedRatio < 0) {\r\n var temp = to;\r\n to = from;\r\n from = temp;\r\n }\r\n\r\n var animatable = new Animatable(this, target, from, to, loop, speedRatio, onAnimationEnd, animations, onAnimationLoop, isAdditive);\r\n\r\n return animatable;\r\n};\r\n\r\nScene.prototype.beginDirectHierarchyAnimation = function (target: Node, directDescendantsOnly: boolean, animations: Animation[], from: number, to: number, loop?: boolean, speedRatio?: number, onAnimationEnd?: () => void, onAnimationLoop?: () => void, isAdditive = false): Animatable[] {\r\n let children = target.getDescendants(directDescendantsOnly);\r\n\r\n let result = [];\r\n result.push(this.beginDirectAnimation(target, animations, from, to, loop, speedRatio, onAnimationEnd, onAnimationLoop, isAdditive));\r\n for (var child of children) {\r\n result.push(this.beginDirectAnimation(child, animations, from, to, loop, speedRatio, onAnimationEnd, onAnimationLoop, isAdditive));\r\n }\r\n\r\n return result;\r\n};\r\n\r\nScene.prototype.getAnimatableByTarget = function (target: any): Nullable<Animatable> {\r\n for (var index = 0; index < this._activeAnimatables.length; index++) {\r\n if (this._activeAnimatables[index].target === target) {\r\n return this._activeAnimatables[index];\r\n }\r\n }\r\n\r\n return null;\r\n};\r\n\r\nScene.prototype.getAllAnimatablesByTarget = function (target: any): Array<Animatable> {\r\n let result = [];\r\n for (var index = 0; index < this._activeAnimatables.length; index++) {\r\n if (this._activeAnimatables[index].target === target) {\r\n result.push(this._activeAnimatables[index]);\r\n }\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Will stop the animation of the given target\r\n * @param target - the target\r\n * @param animationName - the name of the animation to stop (all animations will be stopped if both this and targetMask are empty)\r\n * @param targetMask - a function that determines if the animation should be stopped based on its target (all animations will be stopped if both this and animationName are empty)\r\n */\r\nScene.prototype.stopAnimation = function (target: any, animationName?: string, targetMask?: (target: any) => boolean): void {\r\n var animatables = this.getAllAnimatablesByTarget(target);\r\n\r\n for (var animatable of animatables) {\r\n animatable.stop(animationName, targetMask);\r\n }\r\n};\r\n\r\n/**\r\n * Stops and removes all animations that have been applied to the scene\r\n */\r\nScene.prototype.stopAllAnimations = function (): void {\r\n if (this._activeAnimatables) {\r\n for (let i = 0; i < this._activeAnimatables.length; i++) {\r\n this._activeAnimatables[i].stop();\r\n }\r\n this._activeAnimatables = [];\r\n }\r\n\r\n for (var group of this.animationGroups) {\r\n group.stop();\r\n }\r\n};\r\n\r\nScene.prototype._registerTargetForLateAnimationBinding = function (runtimeAnimation: RuntimeAnimation, originalValue: any): void {\r\n let target = runtimeAnimation.target;\r\n this._registeredForLateAnimationBindings.pushNoDuplicate(target);\r\n\r\n if (!target._lateAnimationHolders) {\r\n target._lateAnimationHolders = {};\r\n }\r\n\r\n if (!target._lateAnimationHolders[runtimeAnimation.targetPath]) {\r\n target._lateAnimationHolders[runtimeAnimation.targetPath] = {\r\n totalWeight: 0,\r\n totalAdditiveWeight: 0,\r\n animations: [],\r\n additiveAnimations: [],\r\n originalValue: originalValue\r\n };\r\n }\r\n\r\n if (runtimeAnimation.isAdditive) {\r\n target._lateAnimationHolders[runtimeAnimation.targetPath].additiveAnimations.push(runtimeAnimation);\r\n target._lateAnimationHolders[runtimeAnimation.targetPath].totalAdditiveWeight += runtimeAnimation.weight;\r\n } else {\r\n target._lateAnimationHolders[runtimeAnimation.targetPath].animations.push(runtimeAnimation);\r\n target._lateAnimationHolders[runtimeAnimation.targetPath].totalWeight += runtimeAnimation.weight;\r\n }\r\n};\r\n\r\nScene.prototype._processLateAnimationBindingsForMatrices = function (holder: {\r\n totalWeight: number,\r\n totalAdditiveWeight: number,\r\n animations: RuntimeAnimation[],\r\n additiveAnimations: RuntimeAnimation[],\r\n originalValue: Matrix\r\n}): any {\r\n if (holder.totalWeight === 0 && holder.totalAdditiveWeight === 0) {\r\n return holder.originalValue;\r\n }\r\n\r\n let normalizer = 1.0;\r\n let finalPosition = TmpVectors.Vector3[0];\r\n let finalScaling = TmpVectors.Vector3[1];\r\n let finalQuaternion = TmpVectors.Quaternion[0];\r\n let startIndex = 0;\r\n let originalAnimation = holder.animations[0];\r\n let originalValue = holder.originalValue;\r\n\r\n var scale = 1;\r\n let skipOverride = false;\r\n if (holder.totalWeight < 1.0) {\r\n // We need to mix the original value in\r\n scale = 1.0 - holder.totalWeight;\r\n originalValue.decompose(finalScaling, finalQuaternion, finalPosition);\r\n } else {\r\n startIndex = 1;\r\n // We need to normalize the weights\r\n normalizer = holder.totalWeight;\r\n scale = originalAnimation.weight / normalizer;\r\n if (scale == 1) {\r\n if (holder.totalAdditiveWeight) {\r\n skipOverride = true;\r\n } else {\r\n return originalAnimation.currentValue;\r\n }\r\n }\r\n\r\n originalAnimation.currentValue.decompose(finalScaling, finalQuaternion, finalPosition);\r\n }\r\n\r\n // Add up the override animations\r\n if (!skipOverride) {\r\n finalScaling.scaleInPlace(scale);\r\n finalPosition.scaleInPlace(scale);\r\n finalQuaternion.scaleInPlace(scale);\r\n\r\n for (var animIndex = startIndex; animIndex < holder.animations.length; animIndex++) {\r\n var runtimeAnimation = holder.animations[animIndex];\r\n if (runtimeAnimation.weight === 0) {\r\n continue;\r\n }\r\n\r\n var scale = runtimeAnimation.weight / normalizer;\r\n let currentPosition = TmpVectors.Vector3[2];\r\n let currentScaling = TmpVectors.Vector3[3];\r\n let currentQuaternion = TmpVectors.Quaternion[1];\r\n\r\n runtimeAnimation.currentValue.decompose(currentScaling, currentQuaternion, currentPosition);\r\n currentScaling.scaleAndAddToRef(scale, finalScaling);\r\n currentQuaternion.scaleAndAddToRef(scale, finalQuaternion);\r\n currentPosition.scaleAndAddToRef(scale, finalPosition);\r\n }\r\n }\r\n\r\n // Add up the additive animations\r\n for (let animIndex = 0; animIndex < holder.additiveAnimations.length; animIndex++) {\r\n var runtimeAnimation = holder.additiveAnimations[animIndex];\r\n if (runtimeAnimation.weight === 0) {\r\n continue;\r\n }\r\n\r\n let currentPosition = TmpVectors.Vector3[2];\r\n let currentScaling = TmpVectors.Vector3[3];\r\n let currentQuaternion = TmpVectors.Quaternion[1];\r\n\r\n runtimeAnimation.currentValue.decompose(currentScaling, currentQuaternion, currentPosition);\r\n currentScaling.multiplyToRef(finalScaling, currentScaling);\r\n Vector3.LerpToRef(finalScaling, currentScaling, runtimeAnimation.weight, finalScaling);\r\n finalQuaternion.multiplyToRef(currentQuaternion, currentQuaternion);\r\n Quaternion.SlerpToRef(finalQuaternion, currentQuaternion, runtimeAnimation.weight, finalQuaternion);\r\n currentPosition.scaleAndAddToRef(runtimeAnimation.weight, finalPosition);\r\n\r\n }\r\n\r\n let workValue = originalAnimation ? originalAnimation._animationState.workValue : TmpVectors.Matrix[0].clone();\r\n Matrix.ComposeToRef(finalScaling, finalQuaternion, finalPosition, workValue);\r\n return workValue;\r\n};\r\n\r\nScene.prototype._processLateAnimationBindingsForQuaternions = function (holder: {\r\n totalWeight: number,\r\n totalAdditiveWeight: number,\r\n animations: RuntimeAnimation[],\r\n additiveAnimations: RuntimeAnimation[],\r\n originalValue: Quaternion\r\n}, refQuaternion: Quaternion): Quaternion {\r\n if (holder.totalWeight === 0 && holder.totalAdditiveWeight === 0) {\r\n return refQuaternion;\r\n }\r\n\r\n let originalAnimation = holder.animations[0];\r\n let originalValue = holder.originalValue;\r\n let cumulativeQuaternion = refQuaternion;\r\n\r\n if (holder.totalWeight === 0 && holder.totalAdditiveWeight > 0) {\r\n cumulativeQuaternion.copyFrom(originalValue);\r\n } else if (holder.animations.length === 1) {\r\n Quaternion.SlerpToRef(originalValue, originalAnimation.currentValue, Math.min(1.0, holder.totalWeight), cumulativeQuaternion);\r\n\r\n if (holder.totalAdditiveWeight === 0) {\r\n return cumulativeQuaternion;\r\n }\r\n } else if (holder.animations.length > 1) {\r\n // Add up the override animations\r\n let normalizer = 1.0;\r\n let quaternions: Array<Quaternion>;\r\n let weights: Array<number>;\r\n\r\n if (holder.totalWeight < 1.0) {\r\n let scale = 1.0 - holder.totalWeight;\r\n\r\n quaternions = [];\r\n weights = [];\r\n\r\n quaternions.push(originalValue);\r\n weights.push(scale);\r\n } else {\r\n if (holder.animations.length === 2) { // Slerp as soon as we can\r\n Quaternion.SlerpToRef(holder.animations[0].currentValue, holder.animations[1].currentValue, holder.animations[1].weight / holder.totalWeight, refQuaternion);\r\n\r\n if (holder.totalAdditiveWeight === 0) {\r\n return refQuaternion;\r\n }\r\n }\r\n\r\n quaternions = [];\r\n weights = [];\r\n normalizer = holder.totalWeight;\r\n }\r\n\r\n for (var animIndex = 0; animIndex < holder.animations.length; animIndex++) {\r\n let runtimeAnimation = holder.animations[animIndex];\r\n quaternions.push(runtimeAnimation.currentValue);\r\n weights.push(runtimeAnimation.weight / normalizer);\r\n }\r\n\r\n // https://gamedev.stackexchange.com/questions/62354/method-for-interpolation-between-3-quaternions\r\n\r\n let cumulativeAmount = 0;\r\n for (var index = 0; index < quaternions.length;) {\r\n if (!index) {\r\n Quaternion.SlerpToRef(quaternions[index], quaternions[index + 1], weights[index + 1] / (weights[index] + weights[index + 1]), refQuaternion);\r\n cumulativeQuaternion = refQuaternion;\r\n cumulativeAmount = weights[index] + weights[index + 1];\r\n index += 2;\r\n continue;\r\n }\r\n cumulativeAmount += weights[index];\r\n Quaternion.SlerpToRef(cumulativeQuaternion, quaternions[index], weights[index] / cumulativeAmount, cumulativeQuaternion);\r\n index++;\r\n }\r\n }\r\n\r\n // Add up the additive animations\r\n for (let animIndex = 0; animIndex < holder.additiveAnimations.length; animIndex++) {\r\n let runtimeAnimation = holder.additiveAnimations[animIndex];\r\n if (runtimeAnimation.weight === 0) {\r\n continue;\r\n }\r\n\r\n cumulativeQuaternion.multiplyToRef(runtimeAnimation.currentValue, TmpVectors.Quaternion[0]);\r\n Quaternion.SlerpToRef(cumulativeQuaternion, TmpVectors.Quaternion[0], runtimeAnimation.weight, cumulativeQuaternion);\r\n }\r\n\r\n return cumulativeQuaternion!;\r\n};\r\n\r\nScene.prototype._processLateAnimationBindings = function (): void {\r\n if (!this._registeredForLateAnimationBindings.length) {\r\n return;\r\n }\r\n for (var index = 0; index < this._registeredForLateAnimationBindings.length; index++) {\r\n var target = this._registeredForLateAnimationBindings.data[index];\r\n\r\n for (var path in target._lateAnimationHolders) {\r\n var holder = target._lateAnimationHolders[path];\r\n let originalAnimation: RuntimeAnimation = holder.animations[0];\r\n let originalValue = holder.originalValue;\r\n\r\n let matrixDecomposeMode = Animation.AllowMatrixDecomposeForInterpolation && originalValue.m; // ie. data is matrix\r\n\r\n let finalValue: any = target[path];\r\n if (matrixDecomposeMode) {\r\n finalValue = this._processLateAnimationBindingsForMatrices(holder);\r\n } else {\r\n let quaternionMode = originalValue.w !== undefined;\r\n if (quaternionMode) {\r\n finalValue = this._processLateAnimationBindingsForQuaternions(holder, finalValue || Quaternion.Identity());\r\n } else {\r\n\r\n let startIndex = 0;\r\n let normalizer = 1.0;\r\n\r\n if (holder.totalWeight < 1.0) {\r\n // We need to mix the original value in\r\n if (originalAnimation && originalValue.scale) {\r\n finalValue = originalValue.scale(1.0 - holder.totalWeight);\r\n } else if (originalAnimation) {\r\n finalValue = originalValue * (1.0 - holder.totalWeight);\r\n } else if (originalValue.clone) {\r\n finalValue = originalValue.clone();\r\n } else {\r\n finalValue = originalValue;\r\n }\r\n } else if (originalAnimation) {\r\n // We need to normalize the weights\r\n normalizer = holder.totalWeight;\r\n let scale = originalAnimation.weight / normalizer;\r\n if (scale !== 1) {\r\n if (originalAnimation.currentValue.scale) {\r\n finalValue = originalAnimation.currentValue.scale(scale);\r\n } else {\r\n finalValue = originalAnimation.currentValue * scale;\r\n }\r\n } else {\r\n finalValue = originalAnimation.currentValue;\r\n }\r\n\r\n startIndex = 1;\r\n }\r\n\r\n // Add up the override animations\r\n for (var animIndex = startIndex; animIndex < holder.animations.length; animIndex++) {\r\n var runtimeAnimation = holder.animations[animIndex];\r\n var scale = runtimeAnimation.weight / normalizer;\r\n\r\n if (!scale) {\r\n continue;\r\n } else if (runtimeAnimation.currentValue.scaleAndAddToRef) {\r\n runtimeAnimation.currentValue.scaleAndAddToRef(scale, finalValue);\r\n } else {\r\n finalValue += runtimeAnimation.currentValue * scale;\r\n }\r\n }\r\n\r\n // Add up the additive animations\r\n for (let animIndex = 0; animIndex < holder.additiveAnimations.length; animIndex++) {\r\n var runtimeAnimation = holder.additiveAnimations[animIndex];\r\n var scale: number = runtimeAnimation.weight;\r\n\r\n if (!scale) {\r\n continue;\r\n } else if (runtimeAnimation.currentValue.scaleAndAddToRef) {\r\n runtimeAnimation.currentValue.scaleAndAddToRef(scale, finalValue);\r\n } else {\r\n finalValue += runtimeAnimation.currentValue * scale;\r\n }\r\n }\r\n }\r\n }\r\n target[path] = finalValue;\r\n }\r\n\r\n target._lateAnimationHolders = {};\r\n }\r\n this._registeredForLateAnimationBindings.reset();\r\n};\r\n\r\ndeclare module \"../Bones/bone\" {\r\n export interface Bone {\r\n /**\r\n * Copy an animation range from another bone\r\n * @param source defines the source bone\r\n * @param rangeName defines the range name to copy\r\n * @param frameOffset defines the frame offset\r\n * @param rescaleAsRequired defines if rescaling must be applied if required\r\n * @param skelDimensionsRatio defines the scaling ratio\r\n * @returns true if operation was successful\r\n */\r\n copyAnimationRange(source: Bone, rangeName: string, frameOffset: number, rescaleAsRequired: boolean, skelDimensionsRatio: Nullable<Vector3>): boolean;\r\n }\r\n}\r\n\r\nBone.prototype.copyAnimationRange = function (source: Bone, rangeName: string, frameOffset: number, rescaleAsRequired = false, skelDimensionsRatio: Nullable<Vector3> = null): boolean {\r\n // all animation may be coming from a library skeleton, so may need to create animation\r\n if (this.animations.length === 0) {\r\n this.animations.push(new Animation(this.name, \"_matrix\", source.animations[0].framePerSecond, Animation.ANIMATIONTYPE_MATRIX, 0));\r\n this.animations[0].setKeys([]);\r\n }\r\n\r\n // get animation info / verify there is such a range from the source bone\r\n var sourceRange = source.animations[0].getRange(rangeName);\r\n if (!sourceRange) {\r\n return false;\r\n }\r\n var from = sourceRange.from;\r\n var to = sourceRange.to;\r\n var sourceKeys = source.animations[0].getKeys();\r\n\r\n // rescaling prep\r\n var sourceBoneLength = source.length;\r\n var sourceParent = source.getParent();\r\n var parent = this.getParent();\r\n var parentScalingReqd = rescaleAsRequired && sourceParent && sourceBoneLength && this.length && sourceBoneLength !== this.length;\r\n var parentRatio = parentScalingReqd && parent && sourceParent ? parent.length / sourceParent.length : 1;\r\n\r\n var dimensionsScalingReqd = rescaleAsRequired && !parent && skelDimensionsRatio && (skelDimensionsRatio.x !== 1 || skelDimensionsRatio.y !== 1 || skelDimensionsRatio.z !== 1);\r\n\r\n var destKeys = this.animations[0].getKeys();\r\n\r\n // loop vars declaration\r\n var orig: { frame: number, value: Matrix };\r\n var origTranslation: Vector3;\r\n var mat: Matrix;\r\n\r\n for (var key = 0, nKeys = sourceKeys.length; key < nKeys; key++) {\r\n orig = sourceKeys[key];\r\n if (orig.frame >= from && orig.frame <= to) {\r\n if (rescaleAsRequired) {\r\n mat = orig.value.clone();\r\n\r\n // scale based on parent ratio, when bone has parent\r\n if (parentScalingReqd) {\r\n origTranslation = mat.getTranslation();\r\n mat.setTranslation(origTranslation.scaleInPlace(parentRatio));\r\n\r\n // scale based on skeleton dimension ratio when root bone, and value is passed\r\n } else if (dimensionsScalingReqd && skelDimensionsRatio) {\r\n origTranslation = mat.getTranslation();\r\n mat.setTranslation(origTranslation.multiplyInPlace(skelDimensionsRatio));\r\n\r\n // use original when root bone, and no data for skelDimensionsRatio\r\n } else {\r\n mat = orig.value;\r\n }\r\n } else {\r\n mat = orig.value;\r\n }\r\n destKeys.push({ frame: orig.frame + frameOffset, value: mat });\r\n }\r\n }\r\n this.animations[0].createRange(rangeName, from + frameOffset, to + frameOffset);\r\n return true;\r\n};\r\n"]}
@@ -330,16 +330,6 @@ var AnimationGroup = /** @class */ (function () {
330
330
  _loop_1();
331
331
  }
332
332
  this._speedRatio = speedRatio;
333
- if (from !== undefined && to !== undefined) {
334
- if (from < to && this._speedRatio < 0) {
335
- var temp = to;
336
- to = from;
337
- from = temp;
338
- }
339
- else if (from > to && this._speedRatio > 0) {
340
- this._speedRatio = -speedRatio;
341
- }
342
- }
343
333
  this._isStarted = true;
344
334
  this._isPaused = false;
345
335
  this.onAnimationGroupPlayObservable.notifyObservers(this);
@@ -1 +1 @@
1
- {"version":3,"file":"animationGroup.js","sourceRoot":"","sources":["../../../sourceES6/core/Animations/animationGroup.ts"],"names":[],"mappings":"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","sourcesContent":["import { Animatable } from \"./animatable\";\r\nimport { Animation } from \"./animation\";\r\nimport { IAnimationKey } from \"./animationKey\";\r\n\r\nimport { Scene, IDisposable } from \"../scene\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport { Nullable } from \"../types\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\n\r\nimport \"./animatable\";\r\nimport { AbstractScene } from \"../abstractScene\";\r\n\r\n/**\r\n * This class defines the direct association between an animation and a target\r\n */\r\nexport class TargetedAnimation {\r\n /**\r\n * Animation to perform\r\n */\r\n public animation: Animation;\r\n /**\r\n * Target to animate\r\n */\r\n public target: any;\r\n\r\n /**\r\n * Returns the string \"TargetedAnimation\"\r\n * @returns \"TargetedAnimation\"\r\n */\r\n public getClassName(): string {\r\n return \"TargetedAnimation\";\r\n }\r\n\r\n /**\r\n * Serialize the object\r\n * @returns the JSON object representing the current entity\r\n */\r\n public serialize(): any {\r\n var serializationObject: any = {};\r\n serializationObject.animation = this.animation.serialize();\r\n serializationObject.targetId = this.target.id;\r\n\r\n return serializationObject;\r\n }\r\n}\r\n\r\n/**\r\n * Use this class to create coordinated animations on multiple targets\r\n */\r\nexport class AnimationGroup implements IDisposable {\r\n private _scene: Scene;\r\n\r\n private _targetedAnimations = new Array<TargetedAnimation>();\r\n private _animatables = new Array<Animatable>();\r\n private _from = Number.MAX_VALUE;\r\n private _to = -Number.MAX_VALUE;\r\n private _isStarted: boolean;\r\n private _isPaused: boolean;\r\n private _speedRatio = 1;\r\n private _loopAnimation = false;\r\n private _isAdditive = false;\r\n\r\n /** @hidden */\r\n public _parentContainer: Nullable<AbstractScene> = null;\r\n\r\n /**\r\n * Gets or sets the unique id of the node\r\n */\r\n public uniqueId: number;\r\n\r\n /**\r\n * This observable will notify when one animation have ended\r\n */\r\n public onAnimationEndObservable = new Observable<TargetedAnimation>();\r\n\r\n /**\r\n * Observer raised when one animation loops\r\n */\r\n public onAnimationLoopObservable = new Observable<TargetedAnimation>();\r\n\r\n /**\r\n * Observer raised when all animations have looped\r\n */\r\n public onAnimationGroupLoopObservable = new Observable<AnimationGroup>();\r\n\r\n /**\r\n * This observable will notify when all animations have ended.\r\n */\r\n public onAnimationGroupEndObservable = new Observable<AnimationGroup>();\r\n\r\n /**\r\n * This observable will notify when all animations have paused.\r\n */\r\n public onAnimationGroupPauseObservable = new Observable<AnimationGroup>();\r\n\r\n /**\r\n * This observable will notify when all animations are playing.\r\n */\r\n public onAnimationGroupPlayObservable = new Observable<AnimationGroup>();\r\n\r\n /**\r\n * Gets the first frame\r\n */\r\n public get from(): number {\r\n return this._from;\r\n }\r\n\r\n /**\r\n * Gets the last frame\r\n */\r\n public get to(): number {\r\n return this._to;\r\n }\r\n\r\n /**\r\n * Define if the animations are started\r\n */\r\n public get isStarted(): boolean {\r\n return this._isStarted;\r\n }\r\n\r\n /**\r\n * Gets a value indicating that the current group is playing\r\n */\r\n public get isPlaying(): boolean {\r\n return this._isStarted && !this._isPaused;\r\n }\r\n\r\n /**\r\n * Gets or sets the speed ratio to use for all animations\r\n */\r\n public get speedRatio(): number {\r\n return this._speedRatio;\r\n }\r\n\r\n /**\r\n * Gets or sets the speed ratio to use for all animations\r\n */\r\n public set speedRatio(value: number) {\r\n if (this._speedRatio === value) {\r\n return;\r\n }\r\n\r\n this._speedRatio = value;\r\n\r\n for (var index = 0; index < this._animatables.length; index++) {\r\n let animatable = this._animatables[index];\r\n animatable.speedRatio = this._speedRatio;\r\n }\r\n }\r\n\r\n /**\r\n * Gets or sets if all animations should loop or not\r\n */\r\n public get loopAnimation(): boolean {\r\n return this._loopAnimation;\r\n }\r\n\r\n public set loopAnimation(value: boolean) {\r\n if (this._loopAnimation === value) {\r\n return;\r\n }\r\n\r\n this._loopAnimation = value;\r\n\r\n for (var index = 0; index < this._animatables.length; index++) {\r\n let animatable = this._animatables[index];\r\n animatable.loopAnimation = this._loopAnimation;\r\n }\r\n }\r\n\r\n /**\r\n * Gets or sets if all animations should be evaluated additively\r\n */\r\n public get isAdditive(): boolean {\r\n return this._isAdditive;\r\n }\r\n\r\n public set isAdditive(value: boolean) {\r\n if (this._isAdditive === value) {\r\n return;\r\n }\r\n\r\n this._isAdditive = value;\r\n\r\n for (var index = 0; index < this._animatables.length; index++) {\r\n let animatable = this._animatables[index];\r\n animatable.isAdditive = this._isAdditive;\r\n }\r\n }\r\n\r\n /**\r\n * Gets the targeted animations for this animation group\r\n */\r\n public get targetedAnimations(): Array<TargetedAnimation> {\r\n return this._targetedAnimations;\r\n }\r\n\r\n /**\r\n * returning the list of animatables controlled by this animation group.\r\n */\r\n public get animatables(): Array<Animatable> {\r\n return this._animatables;\r\n }\r\n\r\n /**\r\n * Gets the list of target animations\r\n */\r\n public get children() {\r\n return this._targetedAnimations;\r\n }\r\n\r\n /**\r\n * Instantiates a new Animation Group.\r\n * This helps managing several animations at once.\r\n * @see https://doc.babylonjs.com/how_to/group\r\n * @param name Defines the name of the group\r\n * @param scene Defines the scene the group belongs to\r\n */\r\n public constructor(\r\n /** The name of the animation group */\r\n public name: string,\r\n scene: Nullable<Scene> = null) {\r\n this._scene = scene || EngineStore.LastCreatedScene!;\r\n this.uniqueId = this._scene.getUniqueId();\r\n\r\n this._scene.addAnimationGroup(this);\r\n }\r\n\r\n /**\r\n * Add an animation (with its target) in the group\r\n * @param animation defines the animation we want to add\r\n * @param target defines the target of the animation\r\n * @returns the TargetedAnimation object\r\n */\r\n public addTargetedAnimation(animation: Animation, target: any): TargetedAnimation {\r\n let targetedAnimation = new TargetedAnimation();\r\n targetedAnimation.animation = animation;\r\n targetedAnimation.target = target;\r\n\r\n let keys = animation.getKeys();\r\n if (this._from > keys[0].frame) {\r\n this._from = keys[0].frame;\r\n }\r\n\r\n if (this._to < keys[keys.length - 1].frame) {\r\n this._to = keys[keys.length - 1].frame;\r\n }\r\n\r\n this._targetedAnimations.push(targetedAnimation);\r\n\r\n return targetedAnimation;\r\n }\r\n\r\n /**\r\n * This function will normalize every animation in the group to make sure they all go from beginFrame to endFrame\r\n * It can add constant keys at begin or end\r\n * @param beginFrame defines the new begin frame for all animations or the smallest begin frame of all animations if null (defaults to null)\r\n * @param endFrame defines the new end frame for all animations or the largest end frame of all animations if null (defaults to null)\r\n * @returns the animation group\r\n */\r\n public normalize(beginFrame: Nullable<number> = null, endFrame: Nullable<number> = null): AnimationGroup {\r\n if (beginFrame == null) { beginFrame = this._from; }\r\n if (endFrame == null) { endFrame = this._to; }\r\n\r\n for (var index = 0; index < this._targetedAnimations.length; index++) {\r\n let targetedAnimation = this._targetedAnimations[index];\r\n let keys = targetedAnimation.animation.getKeys();\r\n let startKey = keys[0];\r\n let endKey = keys[keys.length - 1];\r\n\r\n if (startKey.frame > beginFrame) {\r\n let newKey: IAnimationKey = {\r\n frame: beginFrame,\r\n value: startKey.value,\r\n inTangent: startKey.inTangent,\r\n outTangent: startKey.outTangent,\r\n interpolation: startKey.interpolation\r\n };\r\n keys.splice(0, 0, newKey);\r\n }\r\n\r\n if (endKey.frame < endFrame) {\r\n let newKey: IAnimationKey = {\r\n frame: endFrame,\r\n value: endKey.value,\r\n inTangent: endKey.inTangent,\r\n outTangent: endKey.outTangent,\r\n interpolation: endKey.interpolation\r\n };\r\n keys.push(newKey);\r\n }\r\n }\r\n\r\n this._from = beginFrame;\r\n this._to = endFrame;\r\n\r\n return this;\r\n }\r\n\r\n private _animationLoopCount: number;\r\n private _animationLoopFlags: boolean[];\r\n\r\n private _processLoop(animatable: Animatable, targetedAnimation: TargetedAnimation, index: number) {\r\n animatable.onAnimationLoop = () => {\r\n this.onAnimationLoopObservable.notifyObservers(targetedAnimation);\r\n\r\n if (this._animationLoopFlags[index]) {\r\n return;\r\n }\r\n\r\n this._animationLoopFlags[index] = true;\r\n\r\n this._animationLoopCount++;\r\n if (this._animationLoopCount === this._targetedAnimations.length) {\r\n this.onAnimationGroupLoopObservable.notifyObservers(this);\r\n this._animationLoopCount = 0;\r\n this._animationLoopFlags = [];\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * Start all animations on given targets\r\n * @param loop defines if animations must loop\r\n * @param speedRatio defines the ratio to apply to animation speed (1 by default)\r\n * @param from defines the from key (optional)\r\n * @param to defines the to key (optional)\r\n * @param isAdditive defines the additive state for the resulting animatables (optional)\r\n * @returns the current animation group\r\n */\r\n public start(loop = false, speedRatio = 1, from?: number, to?: number, isAdditive?: boolean): AnimationGroup {\r\n if (this._isStarted || this._targetedAnimations.length === 0) {\r\n return this;\r\n }\r\n\r\n this._loopAnimation = loop;\r\n\r\n this._animationLoopCount = 0;\r\n this._animationLoopFlags = [];\r\n\r\n for (var index = 0; index < this._targetedAnimations.length; index++) {\r\n const targetedAnimation = this._targetedAnimations[index];\r\n let animatable = this._scene.beginDirectAnimation(\r\n targetedAnimation.target,\r\n [targetedAnimation.animation],\r\n from !== undefined ? from : this._from,\r\n to !== undefined ? to : this._to,\r\n loop,\r\n speedRatio,\r\n undefined,\r\n undefined,\r\n isAdditive !== undefined ? isAdditive : this._isAdditive\r\n );\r\n animatable.onAnimationEnd = () => {\r\n this.onAnimationEndObservable.notifyObservers(targetedAnimation);\r\n this._checkAnimationGroupEnded(animatable);\r\n };\r\n\r\n this._processLoop(animatable, targetedAnimation, index);\r\n this._animatables.push(animatable);\r\n }\r\n\r\n this._speedRatio = speedRatio;\r\n\r\n if (from !== undefined && to !== undefined) {\r\n if (from < to && this._speedRatio < 0) {\r\n let temp = to;\r\n to = from;\r\n from = temp;\r\n } else if (from > to && this._speedRatio > 0) {\r\n this._speedRatio = -speedRatio;\r\n }\r\n }\r\n\r\n this._isStarted = true;\r\n this._isPaused = false;\r\n\r\n this.onAnimationGroupPlayObservable.notifyObservers(this);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Pause all animations\r\n * @returns the animation group\r\n */\r\n public pause(): AnimationGroup {\r\n if (!this._isStarted) {\r\n return this;\r\n }\r\n\r\n this._isPaused = true;\r\n\r\n for (var index = 0; index < this._animatables.length; index++) {\r\n let animatable = this._animatables[index];\r\n animatable.pause();\r\n }\r\n\r\n this.onAnimationGroupPauseObservable.notifyObservers(this);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Play all animations to initial state\r\n * This function will start() the animations if they were not started or will restart() them if they were paused\r\n * @param loop defines if animations must loop\r\n * @returns the animation group\r\n */\r\n public play(loop?: boolean): AnimationGroup {\r\n // only if all animatables are ready and exist\r\n if (this.isStarted && this._animatables.length === this._targetedAnimations.length) {\r\n if (loop !== undefined) {\r\n this.loopAnimation = loop;\r\n }\r\n this.restart();\r\n } else {\r\n this.stop();\r\n this.start(loop, this._speedRatio);\r\n }\r\n\r\n this._isPaused = false;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Reset all animations to initial state\r\n * @returns the animation group\r\n */\r\n public reset(): AnimationGroup {\r\n if (!this._isStarted) {\r\n this.play();\r\n this.goToFrame(0);\r\n this.stop();\r\n return this;\r\n }\r\n\r\n for (var index = 0; index < this._animatables.length; index++) {\r\n let animatable = this._animatables[index];\r\n animatable.reset();\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Restart animations from key 0\r\n * @returns the animation group\r\n */\r\n public restart(): AnimationGroup {\r\n if (!this._isStarted) {\r\n return this;\r\n }\r\n\r\n for (var index = 0; index < this._animatables.length; index++) {\r\n let animatable = this._animatables[index];\r\n animatable.restart();\r\n }\r\n\r\n this.onAnimationGroupPlayObservable.notifyObservers(this);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Stop all animations\r\n * @returns the animation group\r\n */\r\n public stop(): AnimationGroup {\r\n if (!this._isStarted) {\r\n return this;\r\n }\r\n\r\n var list = this._animatables.slice();\r\n for (var index = 0; index < list.length; index++) {\r\n list[index].stop();\r\n }\r\n\r\n this._isStarted = false;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Set animation weight for all animatables\r\n * @param weight defines the weight to use\r\n * @return the animationGroup\r\n * @see https://doc.babylonjs.com/babylon101/animations#animation-weights\r\n */\r\n public setWeightForAllAnimatables(weight: number): AnimationGroup {\r\n for (var index = 0; index < this._animatables.length; index++) {\r\n let animatable = this._animatables[index];\r\n animatable.weight = weight;\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Synchronize and normalize all animatables with a source animatable\r\n * @param root defines the root animatable to synchronize with (null to stop synchronizing)\r\n * @return the animationGroup\r\n * @see https://doc.babylonjs.com/babylon101/animations#animation-weights\r\n */\r\n public syncAllAnimationsWith(root: Nullable<Animatable>): AnimationGroup {\r\n for (var index = 0; index < this._animatables.length; index++) {\r\n let animatable = this._animatables[index];\r\n animatable.syncWith(root);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Goes to a specific frame in this animation group\r\n * @param frame the frame number to go to\r\n * @return the animationGroup\r\n */\r\n public goToFrame(frame: number): AnimationGroup {\r\n if (!this._isStarted) {\r\n return this;\r\n }\r\n\r\n for (var index = 0; index < this._animatables.length; index++) {\r\n let animatable = this._animatables[index];\r\n animatable.goToFrame(frame);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Dispose all associated resources\r\n */\r\n public dispose(): void {\r\n this._targetedAnimations = [];\r\n this._animatables = [];\r\n\r\n // Remove from scene\r\n var index = this._scene.animationGroups.indexOf(this);\r\n\r\n if (index > -1) {\r\n this._scene.animationGroups.splice(index, 1);\r\n }\r\n\r\n if (this._parentContainer) {\r\n const index = this._parentContainer.animationGroups.indexOf(this);\r\n if (index > -1) {\r\n this._parentContainer.animationGroups.splice(index, 1);\r\n }\r\n this._parentContainer = null;\r\n }\r\n\r\n this.onAnimationEndObservable.clear();\r\n this.onAnimationGroupEndObservable.clear();\r\n this.onAnimationGroupPauseObservable.clear();\r\n this.onAnimationGroupPlayObservable.clear();\r\n this.onAnimationLoopObservable.clear();\r\n this.onAnimationGroupLoopObservable.clear();\r\n }\r\n\r\n private _checkAnimationGroupEnded(animatable: Animatable) {\r\n // animatable should be taken out of the array\r\n let idx = this._animatables.indexOf(animatable);\r\n if (idx > -1) {\r\n this._animatables.splice(idx, 1);\r\n }\r\n\r\n // all animatables were removed? animation group ended!\r\n if (this._animatables.length === 0) {\r\n this._isStarted = false;\r\n this.onAnimationGroupEndObservable.notifyObservers(this);\r\n }\r\n }\r\n\r\n /**\r\n * Clone the current animation group and returns a copy\r\n * @param newName defines the name of the new group\r\n * @param targetConverter defines an optional function used to convert current animation targets to new ones\r\n * @returns the new animation group\r\n */\r\n public clone(newName: string, targetConverter?: (oldTarget: any) => any): AnimationGroup {\r\n let newGroup = new AnimationGroup(newName || this.name, this._scene);\r\n\r\n for (var targetAnimation of this._targetedAnimations) {\r\n newGroup.addTargetedAnimation(targetAnimation.animation.clone(), targetConverter ? targetConverter(targetAnimation.target) : targetAnimation.target);\r\n }\r\n\r\n return newGroup;\r\n }\r\n\r\n /**\r\n * Serializes the animationGroup to an object\r\n * @returns Serialized object\r\n */\r\n public serialize(): any {\r\n var serializationObject: any = {};\r\n\r\n serializationObject.name = this.name;\r\n serializationObject.from = this.from;\r\n serializationObject.to = this.to;\r\n serializationObject.targetedAnimations = [];\r\n for (var targetedAnimationIndex = 0; targetedAnimationIndex < this.targetedAnimations.length; targetedAnimationIndex++) {\r\n var targetedAnimation = this.targetedAnimations[targetedAnimationIndex];\r\n serializationObject.targetedAnimations[targetedAnimationIndex] = targetedAnimation.serialize();\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n // Statics\r\n /**\r\n * Returns a new AnimationGroup object parsed from the source provided.\r\n * @param parsedAnimationGroup defines the source\r\n * @param scene defines the scene that will receive the animationGroup\r\n * @returns a new AnimationGroup\r\n */\r\n public static Parse(parsedAnimationGroup: any, scene: Scene): AnimationGroup {\r\n var animationGroup = new AnimationGroup(parsedAnimationGroup.name, scene);\r\n for (var i = 0; i < parsedAnimationGroup.targetedAnimations.length; i++) {\r\n var targetedAnimation = parsedAnimationGroup.targetedAnimations[i];\r\n var animation = Animation.Parse(targetedAnimation.animation);\r\n var id = targetedAnimation.targetId;\r\n if (targetedAnimation.animation.property === \"influence\") { // morph target animation\r\n let morphTarget = scene.getMorphTargetById(id);\r\n if (morphTarget) {\r\n animationGroup.addTargetedAnimation(animation, morphTarget);\r\n }\r\n }\r\n else {\r\n var targetNode = scene.getNodeById(id);\r\n\r\n if (targetNode != null) {\r\n animationGroup.addTargetedAnimation(animation, targetNode);\r\n }\r\n }\r\n }\r\n\r\n if (parsedAnimationGroup.from !== null && parsedAnimationGroup.to !== null) {\r\n animationGroup.normalize(parsedAnimationGroup.from, parsedAnimationGroup.to);\r\n }\r\n\r\n return animationGroup;\r\n }\r\n\r\n /**\r\n * Convert the keyframes for all animations belonging to the group to be relative to a given reference frame.\r\n * @param sourceAnimationGroup defines the AnimationGroup containing animations to convert\r\n * @param referenceFrame defines the frame that keyframes in the range will be relative to\r\n * @param range defines the name of the AnimationRange belonging to the animations in the group to convert\r\n * @param cloneOriginal defines whether or not to clone the group and convert the clone or convert the original group (default is false)\r\n * @param clonedName defines the name of the resulting cloned AnimationGroup if cloneOriginal is true\r\n * @returns a new AnimationGroup if cloneOriginal is true or the original AnimationGroup if cloneOriginal is false\r\n */\r\n public static MakeAnimationAdditive(sourceAnimationGroup: AnimationGroup, referenceFrame = 0, range?: string, cloneOriginal = false, clonedName?: string): AnimationGroup {\r\n let animationGroup = sourceAnimationGroup;\r\n if (cloneOriginal) {\r\n animationGroup = sourceAnimationGroup.clone(clonedName || animationGroup.name);\r\n }\r\n\r\n let targetedAnimations = animationGroup.targetedAnimations;\r\n for (var index = 0; index < targetedAnimations.length; index++) {\r\n let targetedAnimation = targetedAnimations[index];\r\n Animation.MakeAnimationAdditive(targetedAnimation.animation, referenceFrame, range);\r\n }\r\n\r\n animationGroup.isAdditive = true;\r\n\r\n return animationGroup;\r\n }\r\n\r\n /**\r\n * Returns the string \"AnimationGroup\"\r\n * @returns \"AnimationGroup\"\r\n */\r\n public getClassName(): string {\r\n return \"AnimationGroup\";\r\n }\r\n\r\n /**\r\n * Creates a detailed string about the object\r\n * @param fullDetails defines if the output string will support multiple levels of logging within scene loading\r\n * @returns a string representing the object\r\n */\r\n public toString(fullDetails?: boolean): string {\r\n var ret = \"Name: \" + this.name;\r\n ret += \", type: \" + this.getClassName();\r\n if (fullDetails) {\r\n ret += \", from: \" + this._from;\r\n ret += \", to: \" + this._to;\r\n ret += \", isStarted: \" + this._isStarted;\r\n ret += \", speedRatio: \" + this._speedRatio;\r\n ret += \", targetedAnimations length: \" + this._targetedAnimations.length;\r\n ret += \", animatables length: \" + this._animatables;\r\n }\r\n return ret;\r\n }\r\n\r\n}\r\n"]}
1
+ {"version":3,"file":"animationGroup.js","sourceRoot":"","sources":["../../../sourceES6/core/Animations/animationGroup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAIxC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,cAAc,CAAC;AAGtB;;GAEG;AACH;IAAA;IA6BA,CAAC;IAnBG;;;OAGG;IACI,wCAAY,GAAnB;QACI,OAAO,mBAAmB,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACI,qCAAS,GAAhB;QACI,IAAI,mBAAmB,GAAQ,EAAE,CAAC;QAClC,mBAAmB,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;QAC3D,mBAAmB,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAE9C,OAAO,mBAAmB,CAAC;IAC/B,CAAC;IACL,wBAAC;AAAD,CAAC,AA7BD,IA6BC;;AAED;;GAEG;AACH;IAmKI;;;;;;OAMG;IACH;IACI,sCAAsC;IAC/B,IAAY,EACnB,KAA6B;QAA7B,sBAAA,EAAA,YAA6B;QADtB,SAAI,GAAJ,IAAI,CAAQ;QAzKf,wBAAmB,GAAG,IAAI,KAAK,EAAqB,CAAC;QACrD,iBAAY,GAAG,IAAI,KAAK,EAAc,CAAC;QACvC,UAAK,GAAG,MAAM,CAAC,SAAS,CAAC;QACzB,QAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;QAGxB,gBAAW,GAAG,CAAC,CAAC;QAChB,mBAAc,GAAG,KAAK,CAAC;QACvB,gBAAW,GAAG,KAAK,CAAC;QAE5B,cAAc;QACP,qBAAgB,GAA4B,IAAI,CAAC;QAOxD;;WAEG;QACI,6BAAwB,GAAG,IAAI,UAAU,EAAqB,CAAC;QAEtE;;WAEG;QACI,8BAAyB,GAAG,IAAI,UAAU,EAAqB,CAAC;QAEvE;;WAEG;QACI,mCAA8B,GAAG,IAAI,UAAU,EAAkB,CAAC;QAEzE;;WAEG;QACI,kCAA6B,GAAG,IAAI,UAAU,EAAkB,CAAC;QAExE;;WAEG;QACI,oCAA+B,GAAG,IAAI,UAAU,EAAkB,CAAC;QAE1E;;WAEG;QACI,mCAA8B,GAAG,IAAI,UAAU,EAAkB,CAAC;QA6HrE,IAAI,CAAC,MAAM,GAAG,KAAK,IAAI,WAAW,CAAC,gBAAiB,CAAC;QACrD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAE1C,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IA5HD,sBAAW,gCAAI;QAHf;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,KAAK,CAAC;QACtB,CAAC;;;OAAA;IAKD,sBAAW,8BAAE;QAHb;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,GAAG,CAAC;QACpB,CAAC;;;OAAA;IAKD,sBAAW,qCAAS;QAHpB;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,UAAU,CAAC;QAC3B,CAAC;;;OAAA;IAKD,sBAAW,qCAAS;QAHpB;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;QAC9C,CAAC;;;OAAA;IAKD,sBAAW,sCAAU;QAHrB;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,WAAW,CAAC;QAC5B,CAAC;QAED;;WAEG;aACH,UAAsB,KAAa;YAC/B,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE;gBAC5B,OAAO;aACV;YAED,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YAEzB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBAC3D,IAAI,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;gBAC1C,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;aAC5C;QACL,CAAC;;;OAhBA;IAqBD,sBAAW,yCAAa;QAHxB;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,cAAc,CAAC;QAC/B,CAAC;aAED,UAAyB,KAAc;YACnC,IAAI,IAAI,CAAC,cAAc,KAAK,KAAK,EAAE;gBAC/B,OAAO;aACV;YAED,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;YAE5B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBAC3D,IAAI,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;gBAC1C,UAAU,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;aAClD;QACL,CAAC;;;OAbA;IAkBD,sBAAW,sCAAU;QAHrB;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,WAAW,CAAC;QAC5B,CAAC;aAED,UAAsB,KAAc;YAChC,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE;gBAC5B,OAAO;aACV;YAED,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YAEzB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBAC3D,IAAI,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;gBAC1C,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;aAC5C;QACL,CAAC;;;OAbA;IAkBD,sBAAW,8CAAkB;QAH7B;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,mBAAmB,CAAC;QACpC,CAAC;;;OAAA;IAKD,sBAAW,uCAAW;QAHtB;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,YAAY,CAAC;QAC7B,CAAC;;;OAAA;IAKD,sBAAW,oCAAQ;QAHnB;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,mBAAmB,CAAC;QACpC,CAAC;;;OAAA;IAmBD;;;;;OAKG;IACI,6CAAoB,GAA3B,UAA4B,SAAoB,EAAE,MAAW;QACzD,IAAI,iBAAiB,GAAG,IAAI,iBAAiB,EAAE,CAAC;QAChD,iBAAiB,CAAC,SAAS,GAAG,SAAS,CAAC;QACxC,iBAAiB,CAAC,MAAM,GAAG,MAAM,CAAC;QAElC,IAAI,IAAI,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;YAC5B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;SAC9B;QAED,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE;YACxC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;SAC1C;QAED,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAEjD,OAAO,iBAAiB,CAAC;IAC7B,CAAC;IAED;;;;;;OAMG;IACI,kCAAS,GAAhB,UAAiB,UAAmC,EAAE,QAAiC;QAAtE,2BAAA,EAAA,iBAAmC;QAAE,yBAAA,EAAA,eAAiC;QACnF,IAAI,UAAU,IAAI,IAAI,EAAE;YAAE,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;SAAE;QACpD,IAAI,QAAQ,IAAI,IAAI,EAAE;YAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC;SAAE;QAE9C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAClE,IAAI,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;YACxD,IAAI,IAAI,GAAG,iBAAiB,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACjD,IAAI,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAEnC,IAAI,QAAQ,CAAC,KAAK,GAAG,UAAU,EAAE;gBAC7B,IAAI,MAAM,GAAkB;oBACxB,KAAK,EAAE,UAAU;oBACjB,KAAK,EAAE,QAAQ,CAAC,KAAK;oBACrB,SAAS,EAAE,QAAQ,CAAC,SAAS;oBAC7B,UAAU,EAAE,QAAQ,CAAC,UAAU;oBAC/B,aAAa,EAAE,QAAQ,CAAC,aAAa;iBACxC,CAAC;gBACF,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;aAC7B;YAED,IAAI,MAAM,CAAC,KAAK,GAAG,QAAQ,EAAE;gBACzB,IAAI,MAAM,GAAkB;oBACxB,KAAK,EAAE,QAAQ;oBACf,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,SAAS,EAAE,MAAM,CAAC,SAAS;oBAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,aAAa,EAAE,MAAM,CAAC,aAAa;iBACtC,CAAC;gBACF,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACrB;SACJ;QAED,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC;QACxB,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC;QAEpB,OAAO,IAAI,CAAC;IAChB,CAAC;IAKO,qCAAY,GAApB,UAAqB,UAAsB,EAAE,iBAAoC,EAAE,KAAa;QAAhG,iBAiBC;QAhBG,UAAU,CAAC,eAAe,GAAG;YACzB,KAAI,CAAC,yBAAyB,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC;YAElE,IAAI,KAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE;gBACjC,OAAO;aACV;YAED,KAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;YAEvC,KAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,IAAI,KAAI,CAAC,mBAAmB,KAAK,KAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE;gBAC9D,KAAI,CAAC,8BAA8B,CAAC,eAAe,CAAC,KAAI,CAAC,CAAC;gBAC1D,KAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;gBAC7B,KAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;aACjC;QACL,CAAC,CAAC;IACN,CAAC;IAED;;;;;;;;OAQG;IACI,8BAAK,GAAZ,UAAa,IAAY,EAAE,UAAc,EAAE,IAAa,EAAE,EAAW,EAAE,UAAoB;QAA3F,iBAwCC;QAxCY,qBAAA,EAAA,YAAY;QAAE,2BAAA,EAAA,cAAc;QACrC,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAAE;YAC1D,OAAO,IAAI,CAAC;SACf;QAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAE3B,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;;YAG1B,IAAM,iBAAiB,GAAG,OAAK,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAC1D,IAAI,UAAU,GAAG,OAAK,MAAM,CAAC,oBAAoB,CAC7C,iBAAiB,CAAC,MAAM,EACxB,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAC7B,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAK,KAAK,EACtC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAK,GAAG,EAChC,IAAI,EACJ,UAAU,EACV,SAAS,EACT,SAAS,EACT,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAK,WAAW,CAC3D,CAAC;YACF,UAAU,CAAC,cAAc,GAAG;gBACxB,KAAI,CAAC,wBAAwB,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC;gBACjE,KAAI,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAC;YAC/C,CAAC,CAAC;YAEF,OAAK,YAAY,CAAC,UAAU,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC;YACxD,OAAK,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;;QAnBvC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE;;SAoBnE;QAED,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAE9B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QAEvB,IAAI,CAAC,8BAA8B,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAE1D,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;OAGG;IACI,8BAAK,GAAZ;QACI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClB,OAAO,IAAI,CAAC;SACf;QAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEtB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC3D,IAAI,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAC1C,UAAU,CAAC,KAAK,EAAE,CAAC;SACtB;QAED,IAAI,CAAC,+BAA+B,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAE3D,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACI,6BAAI,GAAX,UAAY,IAAc;QACtB,8CAA8C;QAC9C,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE;YAChF,IAAI,IAAI,KAAK,SAAS,EAAE;gBACpB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;aAC7B;YACD,IAAI,CAAC,OAAO,EAAE,CAAC;SAClB;aAAM;YACH,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;SACtC;QAED,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QAEvB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;OAGG;IACI,8BAAK,GAAZ;QACI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClB,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAClB,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;SACf;QAED,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC3D,IAAI,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAC1C,UAAU,CAAC,KAAK,EAAE,CAAC;SACtB;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;OAGG;IACI,gCAAO,GAAd;QACI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClB,OAAO,IAAI,CAAC;SACf;QAED,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC3D,IAAI,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAC1C,UAAU,CAAC,OAAO,EAAE,CAAC;SACxB;QAED,IAAI,CAAC,8BAA8B,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAE1D,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;OAGG;IACI,6BAAI,GAAX;QACI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClB,OAAO,IAAI,CAAC;SACf;QAED,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QACrC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC9C,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;SACtB;QAED,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QAExB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACI,mDAA0B,GAAjC,UAAkC,MAAc;QAC5C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC3D,IAAI,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAC1C,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;SAC9B;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACI,8CAAqB,GAA5B,UAA6B,IAA0B;QACnD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC3D,IAAI,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAC1C,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;SAC7B;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACI,kCAAS,GAAhB,UAAiB,KAAa;QAC1B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClB,OAAO,IAAI,CAAC;SACf;QAED,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC3D,IAAI,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAC1C,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;SAC/B;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACI,gCAAO,GAAd;QACI,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;QAC9B,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QAEvB,oBAAoB;QACpB,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAEtD,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;YACZ,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;SAChD;QAED,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAM,OAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAClE,IAAI,OAAK,GAAG,CAAC,CAAC,EAAE;gBACZ,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,MAAM,CAAC,OAAK,EAAE,CAAC,CAAC,CAAC;aAC1D;YACD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;SAChC;QAED,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,CAAC;QACtC,IAAI,CAAC,6BAA6B,CAAC,KAAK,EAAE,CAAC;QAC3C,IAAI,CAAC,+BAA+B,CAAC,KAAK,EAAE,CAAC;QAC7C,IAAI,CAAC,8BAA8B,CAAC,KAAK,EAAE,CAAC;QAC5C,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,CAAC;QACvC,IAAI,CAAC,8BAA8B,CAAC,KAAK,EAAE,CAAC;IAChD,CAAC;IAEO,kDAAyB,GAAjC,UAAkC,UAAsB;QACpD,8CAA8C;QAC9C,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE;YACV,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;SACpC;QAED,uDAAuD;QACvD,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;YAChC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,IAAI,CAAC,6BAA6B,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;SAC5D;IACL,CAAC;IAED;;;;;OAKG;IACI,8BAAK,GAAZ,UAAa,OAAe,EAAE,eAAyC;QACnE,IAAI,QAAQ,GAAG,IAAI,cAAc,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAErE,KAA4B,UAAwB,EAAxB,KAAA,IAAI,CAAC,mBAAmB,EAAxB,cAAwB,EAAxB,IAAwB,EAAE;YAAjD,IAAI,eAAe,SAAA;YACpB,QAAQ,CAAC,oBAAoB,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;SACxJ;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED;;;OAGG;IACI,kCAAS,GAAhB;QACI,IAAI,mBAAmB,GAAQ,EAAE,CAAC;QAElC,mBAAmB,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACrC,mBAAmB,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACrC,mBAAmB,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QACjC,mBAAmB,CAAC,kBAAkB,GAAG,EAAE,CAAC;QAC5C,KAAK,IAAI,sBAAsB,GAAG,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,sBAAsB,EAAE,EAAE;YACpH,IAAI,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,CAAC,CAAC;YACxE,mBAAmB,CAAC,kBAAkB,CAAC,sBAAsB,CAAC,GAAG,iBAAiB,CAAC,SAAS,EAAE,CAAC;SAClG;QAED,OAAO,mBAAmB,CAAC;IAC/B,CAAC;IAED,UAAU;IACV;;;;;OAKG;IACW,oBAAK,GAAnB,UAAoB,oBAAyB,EAAE,KAAY;QACvD,IAAI,cAAc,GAAG,IAAI,cAAc,CAAC,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC1E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,oBAAoB,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrE,IAAI,iBAAiB,GAAG,oBAAoB,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;YACnE,IAAI,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAC7D,IAAI,EAAE,GAAG,iBAAiB,CAAC,QAAQ,CAAC;YACpC,IAAI,iBAAiB,CAAC,SAAS,CAAC,QAAQ,KAAK,WAAW,EAAE,EAAE,yBAAyB;gBACjF,IAAI,WAAW,GAAG,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;gBAC/C,IAAI,WAAW,EAAE;oBACb,cAAc,CAAC,oBAAoB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;iBAC/D;aACJ;iBACI;gBACD,IAAI,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;gBAEvC,IAAI,UAAU,IAAI,IAAI,EAAE;oBACpB,cAAc,CAAC,oBAAoB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;iBAC9D;aACJ;SACJ;QAED,IAAI,oBAAoB,CAAC,IAAI,KAAK,IAAI,IAAI,oBAAoB,CAAC,EAAE,KAAK,IAAI,EAAE;YACxE,cAAc,CAAC,SAAS,CAAC,oBAAoB,CAAC,IAAI,EAAE,oBAAoB,CAAC,EAAE,CAAC,CAAC;SAChF;QAED,OAAO,cAAc,CAAC;IAC1B,CAAC;IAED;;;;;;;;OAQG;IACW,oCAAqB,GAAnC,UAAoC,oBAAoC,EAAE,cAAkB,EAAE,KAAc,EAAE,aAAqB,EAAE,UAAmB;QAA9E,+BAAA,EAAA,kBAAkB;QAAkB,8BAAA,EAAA,qBAAqB;QAC/H,IAAI,cAAc,GAAG,oBAAoB,CAAC;QAC1C,IAAI,aAAa,EAAE;YACf,cAAc,GAAG,oBAAoB,CAAC,KAAK,CAAC,UAAU,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;SAClF;QAED,IAAI,kBAAkB,GAAG,cAAc,CAAC,kBAAkB,CAAC;QAC3D,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC5D,IAAI,iBAAiB,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAClD,SAAS,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,SAAS,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;SACvF;QAED,cAAc,CAAC,UAAU,GAAG,IAAI,CAAC;QAEjC,OAAO,cAAc,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACI,qCAAY,GAAnB;QACI,OAAO,gBAAgB,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACI,iCAAQ,GAAf,UAAgB,WAAqB;QACjC,IAAI,GAAG,GAAG,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;QAC/B,GAAG,IAAI,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACxC,IAAI,WAAW,EAAE;YACb,GAAG,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;YAC/B,GAAG,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC;YAC3B,GAAG,IAAI,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC;YACzC,GAAG,IAAI,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC;YAC3C,GAAG,IAAI,+BAA+B,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;YACzE,GAAG,IAAI,wBAAwB,GAAG,IAAI,CAAC,YAAY,CAAC;SACvD;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAEL,qBAAC;AAAD,CAAC,AAjoBD,IAioBC","sourcesContent":["import { Animatable } from \"./animatable\";\r\nimport { Animation } from \"./animation\";\r\nimport { IAnimationKey } from \"./animationKey\";\r\n\r\nimport { Scene, IDisposable } from \"../scene\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport { Nullable } from \"../types\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\n\r\nimport \"./animatable\";\r\nimport { AbstractScene } from \"../abstractScene\";\r\n\r\n/**\r\n * This class defines the direct association between an animation and a target\r\n */\r\nexport class TargetedAnimation {\r\n /**\r\n * Animation to perform\r\n */\r\n public animation: Animation;\r\n /**\r\n * Target to animate\r\n */\r\n public target: any;\r\n\r\n /**\r\n * Returns the string \"TargetedAnimation\"\r\n * @returns \"TargetedAnimation\"\r\n */\r\n public getClassName(): string {\r\n return \"TargetedAnimation\";\r\n }\r\n\r\n /**\r\n * Serialize the object\r\n * @returns the JSON object representing the current entity\r\n */\r\n public serialize(): any {\r\n var serializationObject: any = {};\r\n serializationObject.animation = this.animation.serialize();\r\n serializationObject.targetId = this.target.id;\r\n\r\n return serializationObject;\r\n }\r\n}\r\n\r\n/**\r\n * Use this class to create coordinated animations on multiple targets\r\n */\r\nexport class AnimationGroup implements IDisposable {\r\n private _scene: Scene;\r\n\r\n private _targetedAnimations = new Array<TargetedAnimation>();\r\n private _animatables = new Array<Animatable>();\r\n private _from = Number.MAX_VALUE;\r\n private _to = -Number.MAX_VALUE;\r\n private _isStarted: boolean;\r\n private _isPaused: boolean;\r\n private _speedRatio = 1;\r\n private _loopAnimation = false;\r\n private _isAdditive = false;\r\n\r\n /** @hidden */\r\n public _parentContainer: Nullable<AbstractScene> = null;\r\n\r\n /**\r\n * Gets or sets the unique id of the node\r\n */\r\n public uniqueId: number;\r\n\r\n /**\r\n * This observable will notify when one animation have ended\r\n */\r\n public onAnimationEndObservable = new Observable<TargetedAnimation>();\r\n\r\n /**\r\n * Observer raised when one animation loops\r\n */\r\n public onAnimationLoopObservable = new Observable<TargetedAnimation>();\r\n\r\n /**\r\n * Observer raised when all animations have looped\r\n */\r\n public onAnimationGroupLoopObservable = new Observable<AnimationGroup>();\r\n\r\n /**\r\n * This observable will notify when all animations have ended.\r\n */\r\n public onAnimationGroupEndObservable = new Observable<AnimationGroup>();\r\n\r\n /**\r\n * This observable will notify when all animations have paused.\r\n */\r\n public onAnimationGroupPauseObservable = new Observable<AnimationGroup>();\r\n\r\n /**\r\n * This observable will notify when all animations are playing.\r\n */\r\n public onAnimationGroupPlayObservable = new Observable<AnimationGroup>();\r\n\r\n /**\r\n * Gets the first frame\r\n */\r\n public get from(): number {\r\n return this._from;\r\n }\r\n\r\n /**\r\n * Gets the last frame\r\n */\r\n public get to(): number {\r\n return this._to;\r\n }\r\n\r\n /**\r\n * Define if the animations are started\r\n */\r\n public get isStarted(): boolean {\r\n return this._isStarted;\r\n }\r\n\r\n /**\r\n * Gets a value indicating that the current group is playing\r\n */\r\n public get isPlaying(): boolean {\r\n return this._isStarted && !this._isPaused;\r\n }\r\n\r\n /**\r\n * Gets or sets the speed ratio to use for all animations\r\n */\r\n public get speedRatio(): number {\r\n return this._speedRatio;\r\n }\r\n\r\n /**\r\n * Gets or sets the speed ratio to use for all animations\r\n */\r\n public set speedRatio(value: number) {\r\n if (this._speedRatio === value) {\r\n return;\r\n }\r\n\r\n this._speedRatio = value;\r\n\r\n for (var index = 0; index < this._animatables.length; index++) {\r\n let animatable = this._animatables[index];\r\n animatable.speedRatio = this._speedRatio;\r\n }\r\n }\r\n\r\n /**\r\n * Gets or sets if all animations should loop or not\r\n */\r\n public get loopAnimation(): boolean {\r\n return this._loopAnimation;\r\n }\r\n\r\n public set loopAnimation(value: boolean) {\r\n if (this._loopAnimation === value) {\r\n return;\r\n }\r\n\r\n this._loopAnimation = value;\r\n\r\n for (var index = 0; index < this._animatables.length; index++) {\r\n let animatable = this._animatables[index];\r\n animatable.loopAnimation = this._loopAnimation;\r\n }\r\n }\r\n\r\n /**\r\n * Gets or sets if all animations should be evaluated additively\r\n */\r\n public get isAdditive(): boolean {\r\n return this._isAdditive;\r\n }\r\n\r\n public set isAdditive(value: boolean) {\r\n if (this._isAdditive === value) {\r\n return;\r\n }\r\n\r\n this._isAdditive = value;\r\n\r\n for (var index = 0; index < this._animatables.length; index++) {\r\n let animatable = this._animatables[index];\r\n animatable.isAdditive = this._isAdditive;\r\n }\r\n }\r\n\r\n /**\r\n * Gets the targeted animations for this animation group\r\n */\r\n public get targetedAnimations(): Array<TargetedAnimation> {\r\n return this._targetedAnimations;\r\n }\r\n\r\n /**\r\n * returning the list of animatables controlled by this animation group.\r\n */\r\n public get animatables(): Array<Animatable> {\r\n return this._animatables;\r\n }\r\n\r\n /**\r\n * Gets the list of target animations\r\n */\r\n public get children() {\r\n return this._targetedAnimations;\r\n }\r\n\r\n /**\r\n * Instantiates a new Animation Group.\r\n * This helps managing several animations at once.\r\n * @see https://doc.babylonjs.com/how_to/group\r\n * @param name Defines the name of the group\r\n * @param scene Defines the scene the group belongs to\r\n */\r\n public constructor(\r\n /** The name of the animation group */\r\n public name: string,\r\n scene: Nullable<Scene> = null) {\r\n this._scene = scene || EngineStore.LastCreatedScene!;\r\n this.uniqueId = this._scene.getUniqueId();\r\n\r\n this._scene.addAnimationGroup(this);\r\n }\r\n\r\n /**\r\n * Add an animation (with its target) in the group\r\n * @param animation defines the animation we want to add\r\n * @param target defines the target of the animation\r\n * @returns the TargetedAnimation object\r\n */\r\n public addTargetedAnimation(animation: Animation, target: any): TargetedAnimation {\r\n let targetedAnimation = new TargetedAnimation();\r\n targetedAnimation.animation = animation;\r\n targetedAnimation.target = target;\r\n\r\n let keys = animation.getKeys();\r\n if (this._from > keys[0].frame) {\r\n this._from = keys[0].frame;\r\n }\r\n\r\n if (this._to < keys[keys.length - 1].frame) {\r\n this._to = keys[keys.length - 1].frame;\r\n }\r\n\r\n this._targetedAnimations.push(targetedAnimation);\r\n\r\n return targetedAnimation;\r\n }\r\n\r\n /**\r\n * This function will normalize every animation in the group to make sure they all go from beginFrame to endFrame\r\n * It can add constant keys at begin or end\r\n * @param beginFrame defines the new begin frame for all animations or the smallest begin frame of all animations if null (defaults to null)\r\n * @param endFrame defines the new end frame for all animations or the largest end frame of all animations if null (defaults to null)\r\n * @returns the animation group\r\n */\r\n public normalize(beginFrame: Nullable<number> = null, endFrame: Nullable<number> = null): AnimationGroup {\r\n if (beginFrame == null) { beginFrame = this._from; }\r\n if (endFrame == null) { endFrame = this._to; }\r\n\r\n for (var index = 0; index < this._targetedAnimations.length; index++) {\r\n let targetedAnimation = this._targetedAnimations[index];\r\n let keys = targetedAnimation.animation.getKeys();\r\n let startKey = keys[0];\r\n let endKey = keys[keys.length - 1];\r\n\r\n if (startKey.frame > beginFrame) {\r\n let newKey: IAnimationKey = {\r\n frame: beginFrame,\r\n value: startKey.value,\r\n inTangent: startKey.inTangent,\r\n outTangent: startKey.outTangent,\r\n interpolation: startKey.interpolation\r\n };\r\n keys.splice(0, 0, newKey);\r\n }\r\n\r\n if (endKey.frame < endFrame) {\r\n let newKey: IAnimationKey = {\r\n frame: endFrame,\r\n value: endKey.value,\r\n inTangent: endKey.inTangent,\r\n outTangent: endKey.outTangent,\r\n interpolation: endKey.interpolation\r\n };\r\n keys.push(newKey);\r\n }\r\n }\r\n\r\n this._from = beginFrame;\r\n this._to = endFrame;\r\n\r\n return this;\r\n }\r\n\r\n private _animationLoopCount: number;\r\n private _animationLoopFlags: boolean[];\r\n\r\n private _processLoop(animatable: Animatable, targetedAnimation: TargetedAnimation, index: number) {\r\n animatable.onAnimationLoop = () => {\r\n this.onAnimationLoopObservable.notifyObservers(targetedAnimation);\r\n\r\n if (this._animationLoopFlags[index]) {\r\n return;\r\n }\r\n\r\n this._animationLoopFlags[index] = true;\r\n\r\n this._animationLoopCount++;\r\n if (this._animationLoopCount === this._targetedAnimations.length) {\r\n this.onAnimationGroupLoopObservable.notifyObservers(this);\r\n this._animationLoopCount = 0;\r\n this._animationLoopFlags = [];\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * Start all animations on given targets\r\n * @param loop defines if animations must loop\r\n * @param speedRatio defines the ratio to apply to animation speed (1 by default)\r\n * @param from defines the from key (optional)\r\n * @param to defines the to key (optional)\r\n * @param isAdditive defines the additive state for the resulting animatables (optional)\r\n * @returns the current animation group\r\n */\r\n public start(loop = false, speedRatio = 1, from?: number, to?: number, isAdditive?: boolean): AnimationGroup {\r\n if (this._isStarted || this._targetedAnimations.length === 0) {\r\n return this;\r\n }\r\n\r\n this._loopAnimation = loop;\r\n\r\n this._animationLoopCount = 0;\r\n this._animationLoopFlags = [];\r\n\r\n for (var index = 0; index < this._targetedAnimations.length; index++) {\r\n const targetedAnimation = this._targetedAnimations[index];\r\n let animatable = this._scene.beginDirectAnimation(\r\n targetedAnimation.target,\r\n [targetedAnimation.animation],\r\n from !== undefined ? from : this._from,\r\n to !== undefined ? to : this._to,\r\n loop,\r\n speedRatio,\r\n undefined,\r\n undefined,\r\n isAdditive !== undefined ? isAdditive : this._isAdditive\r\n );\r\n animatable.onAnimationEnd = () => {\r\n this.onAnimationEndObservable.notifyObservers(targetedAnimation);\r\n this._checkAnimationGroupEnded(animatable);\r\n };\r\n\r\n this._processLoop(animatable, targetedAnimation, index);\r\n this._animatables.push(animatable);\r\n }\r\n\r\n this._speedRatio = speedRatio;\r\n\r\n this._isStarted = true;\r\n this._isPaused = false;\r\n\r\n this.onAnimationGroupPlayObservable.notifyObservers(this);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Pause all animations\r\n * @returns the animation group\r\n */\r\n public pause(): AnimationGroup {\r\n if (!this._isStarted) {\r\n return this;\r\n }\r\n\r\n this._isPaused = true;\r\n\r\n for (var index = 0; index < this._animatables.length; index++) {\r\n let animatable = this._animatables[index];\r\n animatable.pause();\r\n }\r\n\r\n this.onAnimationGroupPauseObservable.notifyObservers(this);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Play all animations to initial state\r\n * This function will start() the animations if they were not started or will restart() them if they were paused\r\n * @param loop defines if animations must loop\r\n * @returns the animation group\r\n */\r\n public play(loop?: boolean): AnimationGroup {\r\n // only if all animatables are ready and exist\r\n if (this.isStarted && this._animatables.length === this._targetedAnimations.length) {\r\n if (loop !== undefined) {\r\n this.loopAnimation = loop;\r\n }\r\n this.restart();\r\n } else {\r\n this.stop();\r\n this.start(loop, this._speedRatio);\r\n }\r\n\r\n this._isPaused = false;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Reset all animations to initial state\r\n * @returns the animation group\r\n */\r\n public reset(): AnimationGroup {\r\n if (!this._isStarted) {\r\n this.play();\r\n this.goToFrame(0);\r\n this.stop();\r\n return this;\r\n }\r\n\r\n for (var index = 0; index < this._animatables.length; index++) {\r\n let animatable = this._animatables[index];\r\n animatable.reset();\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Restart animations from key 0\r\n * @returns the animation group\r\n */\r\n public restart(): AnimationGroup {\r\n if (!this._isStarted) {\r\n return this;\r\n }\r\n\r\n for (var index = 0; index < this._animatables.length; index++) {\r\n let animatable = this._animatables[index];\r\n animatable.restart();\r\n }\r\n\r\n this.onAnimationGroupPlayObservable.notifyObservers(this);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Stop all animations\r\n * @returns the animation group\r\n */\r\n public stop(): AnimationGroup {\r\n if (!this._isStarted) {\r\n return this;\r\n }\r\n\r\n var list = this._animatables.slice();\r\n for (var index = 0; index < list.length; index++) {\r\n list[index].stop();\r\n }\r\n\r\n this._isStarted = false;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Set animation weight for all animatables\r\n * @param weight defines the weight to use\r\n * @return the animationGroup\r\n * @see https://doc.babylonjs.com/babylon101/animations#animation-weights\r\n */\r\n public setWeightForAllAnimatables(weight: number): AnimationGroup {\r\n for (var index = 0; index < this._animatables.length; index++) {\r\n let animatable = this._animatables[index];\r\n animatable.weight = weight;\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Synchronize and normalize all animatables with a source animatable\r\n * @param root defines the root animatable to synchronize with (null to stop synchronizing)\r\n * @return the animationGroup\r\n * @see https://doc.babylonjs.com/babylon101/animations#animation-weights\r\n */\r\n public syncAllAnimationsWith(root: Nullable<Animatable>): AnimationGroup {\r\n for (var index = 0; index < this._animatables.length; index++) {\r\n let animatable = this._animatables[index];\r\n animatable.syncWith(root);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Goes to a specific frame in this animation group\r\n * @param frame the frame number to go to\r\n * @return the animationGroup\r\n */\r\n public goToFrame(frame: number): AnimationGroup {\r\n if (!this._isStarted) {\r\n return this;\r\n }\r\n\r\n for (var index = 0; index < this._animatables.length; index++) {\r\n let animatable = this._animatables[index];\r\n animatable.goToFrame(frame);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Dispose all associated resources\r\n */\r\n public dispose(): void {\r\n this._targetedAnimations = [];\r\n this._animatables = [];\r\n\r\n // Remove from scene\r\n var index = this._scene.animationGroups.indexOf(this);\r\n\r\n if (index > -1) {\r\n this._scene.animationGroups.splice(index, 1);\r\n }\r\n\r\n if (this._parentContainer) {\r\n const index = this._parentContainer.animationGroups.indexOf(this);\r\n if (index > -1) {\r\n this._parentContainer.animationGroups.splice(index, 1);\r\n }\r\n this._parentContainer = null;\r\n }\r\n\r\n this.onAnimationEndObservable.clear();\r\n this.onAnimationGroupEndObservable.clear();\r\n this.onAnimationGroupPauseObservable.clear();\r\n this.onAnimationGroupPlayObservable.clear();\r\n this.onAnimationLoopObservable.clear();\r\n this.onAnimationGroupLoopObservable.clear();\r\n }\r\n\r\n private _checkAnimationGroupEnded(animatable: Animatable) {\r\n // animatable should be taken out of the array\r\n let idx = this._animatables.indexOf(animatable);\r\n if (idx > -1) {\r\n this._animatables.splice(idx, 1);\r\n }\r\n\r\n // all animatables were removed? animation group ended!\r\n if (this._animatables.length === 0) {\r\n this._isStarted = false;\r\n this.onAnimationGroupEndObservable.notifyObservers(this);\r\n }\r\n }\r\n\r\n /**\r\n * Clone the current animation group and returns a copy\r\n * @param newName defines the name of the new group\r\n * @param targetConverter defines an optional function used to convert current animation targets to new ones\r\n * @returns the new animation group\r\n */\r\n public clone(newName: string, targetConverter?: (oldTarget: any) => any): AnimationGroup {\r\n let newGroup = new AnimationGroup(newName || this.name, this._scene);\r\n\r\n for (var targetAnimation of this._targetedAnimations) {\r\n newGroup.addTargetedAnimation(targetAnimation.animation.clone(), targetConverter ? targetConverter(targetAnimation.target) : targetAnimation.target);\r\n }\r\n\r\n return newGroup;\r\n }\r\n\r\n /**\r\n * Serializes the animationGroup to an object\r\n * @returns Serialized object\r\n */\r\n public serialize(): any {\r\n var serializationObject: any = {};\r\n\r\n serializationObject.name = this.name;\r\n serializationObject.from = this.from;\r\n serializationObject.to = this.to;\r\n serializationObject.targetedAnimations = [];\r\n for (var targetedAnimationIndex = 0; targetedAnimationIndex < this.targetedAnimations.length; targetedAnimationIndex++) {\r\n var targetedAnimation = this.targetedAnimations[targetedAnimationIndex];\r\n serializationObject.targetedAnimations[targetedAnimationIndex] = targetedAnimation.serialize();\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n // Statics\r\n /**\r\n * Returns a new AnimationGroup object parsed from the source provided.\r\n * @param parsedAnimationGroup defines the source\r\n * @param scene defines the scene that will receive the animationGroup\r\n * @returns a new AnimationGroup\r\n */\r\n public static Parse(parsedAnimationGroup: any, scene: Scene): AnimationGroup {\r\n var animationGroup = new AnimationGroup(parsedAnimationGroup.name, scene);\r\n for (var i = 0; i < parsedAnimationGroup.targetedAnimations.length; i++) {\r\n var targetedAnimation = parsedAnimationGroup.targetedAnimations[i];\r\n var animation = Animation.Parse(targetedAnimation.animation);\r\n var id = targetedAnimation.targetId;\r\n if (targetedAnimation.animation.property === \"influence\") { // morph target animation\r\n let morphTarget = scene.getMorphTargetById(id);\r\n if (morphTarget) {\r\n animationGroup.addTargetedAnimation(animation, morphTarget);\r\n }\r\n }\r\n else {\r\n var targetNode = scene.getNodeById(id);\r\n\r\n if (targetNode != null) {\r\n animationGroup.addTargetedAnimation(animation, targetNode);\r\n }\r\n }\r\n }\r\n\r\n if (parsedAnimationGroup.from !== null && parsedAnimationGroup.to !== null) {\r\n animationGroup.normalize(parsedAnimationGroup.from, parsedAnimationGroup.to);\r\n }\r\n\r\n return animationGroup;\r\n }\r\n\r\n /**\r\n * Convert the keyframes for all animations belonging to the group to be relative to a given reference frame.\r\n * @param sourceAnimationGroup defines the AnimationGroup containing animations to convert\r\n * @param referenceFrame defines the frame that keyframes in the range will be relative to\r\n * @param range defines the name of the AnimationRange belonging to the animations in the group to convert\r\n * @param cloneOriginal defines whether or not to clone the group and convert the clone or convert the original group (default is false)\r\n * @param clonedName defines the name of the resulting cloned AnimationGroup if cloneOriginal is true\r\n * @returns a new AnimationGroup if cloneOriginal is true or the original AnimationGroup if cloneOriginal is false\r\n */\r\n public static MakeAnimationAdditive(sourceAnimationGroup: AnimationGroup, referenceFrame = 0, range?: string, cloneOriginal = false, clonedName?: string): AnimationGroup {\r\n let animationGroup = sourceAnimationGroup;\r\n if (cloneOriginal) {\r\n animationGroup = sourceAnimationGroup.clone(clonedName || animationGroup.name);\r\n }\r\n\r\n let targetedAnimations = animationGroup.targetedAnimations;\r\n for (var index = 0; index < targetedAnimations.length; index++) {\r\n let targetedAnimation = targetedAnimations[index];\r\n Animation.MakeAnimationAdditive(targetedAnimation.animation, referenceFrame, range);\r\n }\r\n\r\n animationGroup.isAdditive = true;\r\n\r\n return animationGroup;\r\n }\r\n\r\n /**\r\n * Returns the string \"AnimationGroup\"\r\n * @returns \"AnimationGroup\"\r\n */\r\n public getClassName(): string {\r\n return \"AnimationGroup\";\r\n }\r\n\r\n /**\r\n * Creates a detailed string about the object\r\n * @param fullDetails defines if the output string will support multiple levels of logging within scene loading\r\n * @returns a string representing the object\r\n */\r\n public toString(fullDetails?: boolean): string {\r\n var ret = \"Name: \" + this.name;\r\n ret += \", type: \" + this.getClassName();\r\n if (fullDetails) {\r\n ret += \", from: \" + this._from;\r\n ret += \", to: \" + this._to;\r\n ret += \", isStarted: \" + this._isStarted;\r\n ret += \", speedRatio: \" + this._speedRatio;\r\n ret += \", targetedAnimations length: \" + this._targetedAnimations.length;\r\n ret += \", animatables length: \" + this._animatables;\r\n }\r\n return ret;\r\n }\r\n\r\n}\r\n"]}