@babylonjs/core 5.22.1 → 5.23.0

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 (69) hide show
  1. package/Animations/animatable.js +2 -1
  2. package/Animations/animatable.js.map +1 -1
  3. package/Animations/animation.js +137 -139
  4. package/Animations/animation.js.map +1 -1
  5. package/Animations/runtimeAnimation.js +6 -7
  6. package/Animations/runtimeAnimation.js.map +1 -1
  7. package/Audio/sound.d.ts +2 -1
  8. package/Audio/sound.js +21 -9
  9. package/Audio/sound.js.map +1 -1
  10. package/Bones/skeleton.js +9 -3
  11. package/Bones/skeleton.js.map +1 -1
  12. package/Cameras/Inputs/BaseCameraMouseWheelInput.js +3 -22
  13. package/Cameras/Inputs/BaseCameraMouseWheelInput.js.map +1 -1
  14. package/Cameras/Inputs/BaseCameraPointersInput.js +3 -3
  15. package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
  16. package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js +1 -11
  17. package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js.map +1 -1
  18. package/Cameras/Inputs/flyCameraMouseInput.js +3 -3
  19. package/Cameras/Inputs/flyCameraMouseInput.js.map +1 -1
  20. package/Cameras/Inputs/followCameraMouseWheelInput.js +1 -4
  21. package/Cameras/Inputs/followCameraMouseWheelInput.js.map +1 -1
  22. package/Cameras/Inputs/freeCameraMouseInput.js +3 -3
  23. package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
  24. package/DeviceInput/webDeviceInputSystem.js +20 -2
  25. package/DeviceInput/webDeviceInputSystem.js.map +1 -1
  26. package/Engines/thinEngine.js +2 -2
  27. package/Engines/thinEngine.js.map +1 -1
  28. package/Events/deviceInputEvents.d.ts +11 -4
  29. package/Events/deviceInputEvents.js.map +1 -1
  30. package/Inputs/scene.inputManager.js +4 -4
  31. package/Inputs/scene.inputManager.js.map +1 -1
  32. package/Loading/Plugins/babylonFileLoader.js +3 -0
  33. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  34. package/Materials/Background/backgroundMaterial.js +4 -0
  35. package/Materials/Background/backgroundMaterial.js.map +1 -1
  36. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js +4 -1
  37. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js.map +1 -1
  38. package/Materials/Node/nodeMaterial.js +4 -0
  39. package/Materials/Node/nodeMaterial.js.map +1 -1
  40. package/Materials/PBR/pbrBaseMaterial.js +4 -1
  41. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  42. package/Materials/standardMaterial.js +4 -1
  43. package/Materials/standardMaterial.js.map +1 -1
  44. package/Meshes/abstractMesh.js +7 -1
  45. package/Meshes/abstractMesh.js.map +1 -1
  46. package/Meshes/groundMesh.d.ts +5 -4
  47. package/Meshes/groundMesh.js +5 -4
  48. package/Meshes/groundMesh.js.map +1 -1
  49. package/Meshes/transformNode.js +3 -0
  50. package/Meshes/transformNode.js.map +1 -1
  51. package/Misc/basis.js +16 -2
  52. package/Misc/basis.js.map +1 -1
  53. package/Misc/logger.js +1 -1
  54. package/Misc/logger.js.map +1 -1
  55. package/Offline/database.js +3 -3
  56. package/Offline/database.js.map +1 -1
  57. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js +3 -3
  58. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js.map +1 -1
  59. package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js +1 -2
  60. package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js.map +1 -1
  61. package/Sprites/spriteSceneComponent.js +4 -1
  62. package/Sprites/spriteSceneComponent.js.map +1 -1
  63. package/package.json +1 -1
  64. package/readme.md +0 -4
  65. package/scene.d.ts +19 -2
  66. package/scene.js +34 -0
  67. package/scene.js.map +1 -1
  68. package/sceneComponent.d.ts +1 -1
  69. package/sceneComponent.js.map +1 -1
@@ -745,158 +745,156 @@ export class Animation {
745
745
  return state.highLimitValue.clone ? state.highLimitValue.clone() : state.highLimitValue;
746
746
  }
747
747
  const keys = this._keys;
748
- if (keys.length === 1) {
748
+ const keysLength = keys.length;
749
+ let key = state.key;
750
+ while (key >= 0 && currentFrame < keys[key].frame) {
751
+ --key;
752
+ }
753
+ while (key + 1 <= keysLength - 1 && currentFrame >= keys[key + 1].frame) {
754
+ ++key;
755
+ }
756
+ state.key = key;
757
+ if (key < 0) {
749
758
  return this._getKeyValue(keys[0].value);
750
759
  }
751
- let startKeyIndex = state.key;
752
- if (keys[startKeyIndex].frame >= currentFrame) {
753
- while (startKeyIndex - 1 >= 0 && keys[startKeyIndex].frame >= currentFrame) {
754
- startKeyIndex--;
760
+ else if (key + 1 > keysLength - 1) {
761
+ return this._getKeyValue(keys[keysLength - 1].value);
762
+ }
763
+ const startKey = keys[key];
764
+ const endKey = keys[key + 1];
765
+ const startValue = this._getKeyValue(startKey.value);
766
+ const endValue = this._getKeyValue(endKey.value);
767
+ if (startKey.interpolation === AnimationKeyInterpolation.STEP) {
768
+ if (endKey.frame > currentFrame) {
769
+ return startValue;
770
+ }
771
+ else {
772
+ return endValue;
755
773
  }
756
774
  }
757
- for (let key = startKeyIndex; key < keys.length - 1; key++) {
758
- const endKey = keys[key + 1];
759
- if (endKey.frame >= currentFrame) {
760
- state.key = key;
761
- const startKey = keys[key];
762
- const startValue = this._getKeyValue(startKey.value);
763
- const endValue = this._getKeyValue(endKey.value);
764
- if (startKey.interpolation === AnimationKeyInterpolation.STEP) {
765
- if (endKey.frame > currentFrame) {
766
- return startValue;
767
- }
768
- else {
769
- return endValue;
770
- }
771
- }
772
- const useTangent = startKey.outTangent !== undefined && endKey.inTangent !== undefined;
773
- const frameDelta = endKey.frame - startKey.frame;
774
- // gradient : percent of currentFrame between the frame inf and the frame sup
775
- let gradient = (currentFrame - startKey.frame) / frameDelta;
776
- // check for easingFunction and correction of gradient
777
- const easingFunction = this.getEasingFunction();
778
- if (easingFunction !== null) {
779
- gradient = easingFunction.ease(gradient);
775
+ const useTangent = startKey.outTangent !== undefined && endKey.inTangent !== undefined;
776
+ const frameDelta = endKey.frame - startKey.frame;
777
+ // gradient : percent of currentFrame between the frame inf and the frame sup
778
+ let gradient = (currentFrame - startKey.frame) / frameDelta;
779
+ // check for easingFunction and correction of gradient
780
+ const easingFunction = this.getEasingFunction();
781
+ if (easingFunction !== null) {
782
+ gradient = easingFunction.ease(gradient);
783
+ }
784
+ switch (this.dataType) {
785
+ // Float
786
+ case Animation.ANIMATIONTYPE_FLOAT: {
787
+ const floatValue = useTangent
788
+ ? this.floatInterpolateFunctionWithTangents(startValue, startKey.outTangent * frameDelta, endValue, endKey.inTangent * frameDelta, gradient)
789
+ : this.floatInterpolateFunction(startValue, endValue, gradient);
790
+ switch (state.loopMode) {
791
+ case Animation.ANIMATIONLOOPMODE_CYCLE:
792
+ case Animation.ANIMATIONLOOPMODE_CONSTANT:
793
+ return floatValue;
794
+ case Animation.ANIMATIONLOOPMODE_RELATIVE:
795
+ return state.offsetValue * state.repeatCount + floatValue;
780
796
  }
781
- switch (this.dataType) {
782
- // Float
783
- case Animation.ANIMATIONTYPE_FLOAT: {
784
- const floatValue = useTangent
785
- ? this.floatInterpolateFunctionWithTangents(startValue, startKey.outTangent * frameDelta, endValue, endKey.inTangent * frameDelta, gradient)
786
- : this.floatInterpolateFunction(startValue, endValue, gradient);
787
- switch (state.loopMode) {
788
- case Animation.ANIMATIONLOOPMODE_CYCLE:
789
- case Animation.ANIMATIONLOOPMODE_CONSTANT:
790
- return floatValue;
791
- case Animation.ANIMATIONLOOPMODE_RELATIVE:
792
- return state.offsetValue * state.repeatCount + floatValue;
793
- }
794
- break;
795
- }
796
- // Quaternion
797
- case Animation.ANIMATIONTYPE_QUATERNION: {
798
- const quatValue = useTangent
799
- ? this.quaternionInterpolateFunctionWithTangents(startValue, startKey.outTangent.scale(frameDelta), endValue, endKey.inTangent.scale(frameDelta), gradient)
800
- : this.quaternionInterpolateFunction(startValue, endValue, gradient);
801
- switch (state.loopMode) {
802
- case Animation.ANIMATIONLOOPMODE_CYCLE:
803
- case Animation.ANIMATIONLOOPMODE_CONSTANT:
804
- return quatValue;
805
- case Animation.ANIMATIONLOOPMODE_RELATIVE:
806
- return quatValue.addInPlace(state.offsetValue.scale(state.repeatCount));
807
- }
797
+ break;
798
+ }
799
+ // Quaternion
800
+ case Animation.ANIMATIONTYPE_QUATERNION: {
801
+ const quatValue = useTangent
802
+ ? this.quaternionInterpolateFunctionWithTangents(startValue, startKey.outTangent.scale(frameDelta), endValue, endKey.inTangent.scale(frameDelta), gradient)
803
+ : this.quaternionInterpolateFunction(startValue, endValue, gradient);
804
+ switch (state.loopMode) {
805
+ case Animation.ANIMATIONLOOPMODE_CYCLE:
806
+ case Animation.ANIMATIONLOOPMODE_CONSTANT:
808
807
  return quatValue;
809
- }
810
- // Vector3
811
- case Animation.ANIMATIONTYPE_VECTOR3: {
812
- const vec3Value = useTangent
813
- ? this.vector3InterpolateFunctionWithTangents(startValue, startKey.outTangent.scale(frameDelta), endValue, endKey.inTangent.scale(frameDelta), gradient)
814
- : this.vector3InterpolateFunction(startValue, endValue, gradient);
815
- switch (state.loopMode) {
816
- case Animation.ANIMATIONLOOPMODE_CYCLE:
817
- case Animation.ANIMATIONLOOPMODE_CONSTANT:
818
- return vec3Value;
819
- case Animation.ANIMATIONLOOPMODE_RELATIVE:
820
- return vec3Value.add(state.offsetValue.scale(state.repeatCount));
821
- }
822
- break;
823
- }
824
- // Vector2
825
- case Animation.ANIMATIONTYPE_VECTOR2: {
826
- const vec2Value = useTangent
827
- ? this.vector2InterpolateFunctionWithTangents(startValue, startKey.outTangent.scale(frameDelta), endValue, endKey.inTangent.scale(frameDelta), gradient)
828
- : this.vector2InterpolateFunction(startValue, endValue, gradient);
829
- switch (state.loopMode) {
830
- case Animation.ANIMATIONLOOPMODE_CYCLE:
831
- case Animation.ANIMATIONLOOPMODE_CONSTANT:
832
- return vec2Value;
833
- case Animation.ANIMATIONLOOPMODE_RELATIVE:
834
- return vec2Value.add(state.offsetValue.scale(state.repeatCount));
835
- }
836
- break;
837
- }
838
- // Size
839
- case Animation.ANIMATIONTYPE_SIZE: {
840
- switch (state.loopMode) {
841
- case Animation.ANIMATIONLOOPMODE_CYCLE:
842
- case Animation.ANIMATIONLOOPMODE_CONSTANT:
843
- return this.sizeInterpolateFunction(startValue, endValue, gradient);
844
- case Animation.ANIMATIONLOOPMODE_RELATIVE:
845
- return this.sizeInterpolateFunction(startValue, endValue, gradient).add(state.offsetValue.scale(state.repeatCount));
846
- }
847
- break;
848
- }
849
- // Color3
850
- case Animation.ANIMATIONTYPE_COLOR3: {
851
- const color3Value = useTangent
852
- ? this.color3InterpolateFunctionWithTangents(startValue, startKey.outTangent.scale(frameDelta), endValue, endKey.inTangent.scale(frameDelta), gradient)
853
- : this.color3InterpolateFunction(startValue, endValue, gradient);
854
- switch (state.loopMode) {
855
- case Animation.ANIMATIONLOOPMODE_CYCLE:
856
- case Animation.ANIMATIONLOOPMODE_CONSTANT:
857
- return color3Value;
858
- case Animation.ANIMATIONLOOPMODE_RELATIVE:
859
- return color3Value.add(state.offsetValue.scale(state.repeatCount));
860
- }
861
- break;
862
- }
863
- // Color4
864
- case Animation.ANIMATIONTYPE_COLOR4: {
865
- const color4Value = useTangent
866
- ? this.color4InterpolateFunctionWithTangents(startValue, startKey.outTangent.scale(frameDelta), endValue, endKey.inTangent.scale(frameDelta), gradient)
867
- : this.color4InterpolateFunction(startValue, endValue, gradient);
868
- switch (state.loopMode) {
869
- case Animation.ANIMATIONLOOPMODE_CYCLE:
870
- case Animation.ANIMATIONLOOPMODE_CONSTANT:
871
- return color4Value;
872
- case Animation.ANIMATIONLOOPMODE_RELATIVE:
873
- return color4Value.add(state.offsetValue.scale(state.repeatCount));
808
+ case Animation.ANIMATIONLOOPMODE_RELATIVE:
809
+ return quatValue.addInPlace(state.offsetValue.scale(state.repeatCount));
810
+ }
811
+ return quatValue;
812
+ }
813
+ // Vector3
814
+ case Animation.ANIMATIONTYPE_VECTOR3: {
815
+ const vec3Value = useTangent
816
+ ? this.vector3InterpolateFunctionWithTangents(startValue, startKey.outTangent.scale(frameDelta), endValue, endKey.inTangent.scale(frameDelta), gradient)
817
+ : this.vector3InterpolateFunction(startValue, endValue, gradient);
818
+ switch (state.loopMode) {
819
+ case Animation.ANIMATIONLOOPMODE_CYCLE:
820
+ case Animation.ANIMATIONLOOPMODE_CONSTANT:
821
+ return vec3Value;
822
+ case Animation.ANIMATIONLOOPMODE_RELATIVE:
823
+ return vec3Value.add(state.offsetValue.scale(state.repeatCount));
824
+ }
825
+ break;
826
+ }
827
+ // Vector2
828
+ case Animation.ANIMATIONTYPE_VECTOR2: {
829
+ const vec2Value = useTangent
830
+ ? this.vector2InterpolateFunctionWithTangents(startValue, startKey.outTangent.scale(frameDelta), endValue, endKey.inTangent.scale(frameDelta), gradient)
831
+ : this.vector2InterpolateFunction(startValue, endValue, gradient);
832
+ switch (state.loopMode) {
833
+ case Animation.ANIMATIONLOOPMODE_CYCLE:
834
+ case Animation.ANIMATIONLOOPMODE_CONSTANT:
835
+ return vec2Value;
836
+ case Animation.ANIMATIONLOOPMODE_RELATIVE:
837
+ return vec2Value.add(state.offsetValue.scale(state.repeatCount));
838
+ }
839
+ break;
840
+ }
841
+ // Size
842
+ case Animation.ANIMATIONTYPE_SIZE: {
843
+ switch (state.loopMode) {
844
+ case Animation.ANIMATIONLOOPMODE_CYCLE:
845
+ case Animation.ANIMATIONLOOPMODE_CONSTANT:
846
+ return this.sizeInterpolateFunction(startValue, endValue, gradient);
847
+ case Animation.ANIMATIONLOOPMODE_RELATIVE:
848
+ return this.sizeInterpolateFunction(startValue, endValue, gradient).add(state.offsetValue.scale(state.repeatCount));
849
+ }
850
+ break;
851
+ }
852
+ // Color3
853
+ case Animation.ANIMATIONTYPE_COLOR3: {
854
+ const color3Value = useTangent
855
+ ? this.color3InterpolateFunctionWithTangents(startValue, startKey.outTangent.scale(frameDelta), endValue, endKey.inTangent.scale(frameDelta), gradient)
856
+ : this.color3InterpolateFunction(startValue, endValue, gradient);
857
+ switch (state.loopMode) {
858
+ case Animation.ANIMATIONLOOPMODE_CYCLE:
859
+ case Animation.ANIMATIONLOOPMODE_CONSTANT:
860
+ return color3Value;
861
+ case Animation.ANIMATIONLOOPMODE_RELATIVE:
862
+ return color3Value.add(state.offsetValue.scale(state.repeatCount));
863
+ }
864
+ break;
865
+ }
866
+ // Color4
867
+ case Animation.ANIMATIONTYPE_COLOR4: {
868
+ const color4Value = useTangent
869
+ ? this.color4InterpolateFunctionWithTangents(startValue, startKey.outTangent.scale(frameDelta), endValue, endKey.inTangent.scale(frameDelta), gradient)
870
+ : this.color4InterpolateFunction(startValue, endValue, gradient);
871
+ switch (state.loopMode) {
872
+ case Animation.ANIMATIONLOOPMODE_CYCLE:
873
+ case Animation.ANIMATIONLOOPMODE_CONSTANT:
874
+ return color4Value;
875
+ case Animation.ANIMATIONLOOPMODE_RELATIVE:
876
+ return color4Value.add(state.offsetValue.scale(state.repeatCount));
877
+ }
878
+ break;
879
+ }
880
+ // Matrix
881
+ case Animation.ANIMATIONTYPE_MATRIX: {
882
+ switch (state.loopMode) {
883
+ case Animation.ANIMATIONLOOPMODE_CYCLE:
884
+ case Animation.ANIMATIONLOOPMODE_CONSTANT: {
885
+ if (Animation.AllowMatricesInterpolation) {
886
+ return this.matrixInterpolateFunction(startValue, endValue, gradient, state.workValue);
874
887
  }
875
- break;
888
+ return startValue;
876
889
  }
877
- // Matrix
878
- case Animation.ANIMATIONTYPE_MATRIX: {
879
- switch (state.loopMode) {
880
- case Animation.ANIMATIONLOOPMODE_CYCLE:
881
- case Animation.ANIMATIONLOOPMODE_CONSTANT: {
882
- if (Animation.AllowMatricesInterpolation) {
883
- return this.matrixInterpolateFunction(startValue, endValue, gradient, state.workValue);
884
- }
885
- return startValue;
886
- }
887
- case Animation.ANIMATIONLOOPMODE_RELATIVE: {
888
- return startValue;
889
- }
890
- }
891
- break;
890
+ case Animation.ANIMATIONLOOPMODE_RELATIVE: {
891
+ return startValue;
892
892
  }
893
- default:
894
- break;
895
893
  }
896
894
  break;
897
895
  }
898
896
  }
899
- return this._getKeyValue(keys[keys.length - 1].value);
897
+ return 0;
900
898
  }
901
899
  /**
902
900
  * Defines the function to use to interpolate matrices