@onerjs/core 8.42.7 → 8.42.9
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.
- package/Animations/animatable.core.js +1 -1
- package/Animations/animatable.core.js.map +1 -1
- package/Animations/animatorAvatar.js +2 -2
- package/Animations/animatorAvatar.js.map +1 -1
- package/Animations/runtimeAnimation.js +1 -1
- package/Animations/runtimeAnimation.js.map +1 -1
- package/Audio/audioSceneComponent.js +1 -2
- package/Audio/audioSceneComponent.js.map +1 -1
- package/AudioV2/audioUtils.d.ts +23 -0
- package/AudioV2/audioUtils.js +37 -0
- package/AudioV2/audioUtils.js.map +1 -1
- package/AudioV2/webAudio/subNodes/webAudioBusAndSoundSubGraph.js +3 -3
- package/AudioV2/webAudio/subNodes/webAudioBusAndSoundSubGraph.js.map +1 -1
- package/AudioV2/webAudio/webAudioEngine.js +1 -1
- package/AudioV2/webAudio/webAudioEngine.js.map +1 -1
- package/AudioV2/webAudio/webAudioStaticSound.js +3 -2
- package/AudioV2/webAudio/webAudioStaticSound.js.map +1 -1
- package/AudioV2/webAudio/webAudioStreamingSound.js +10 -3
- package/AudioV2/webAudio/webAudioStreamingSound.js.map +1 -1
- package/Behaviors/Meshes/followBehavior.js +1 -1
- package/Behaviors/Meshes/followBehavior.js.map +1 -1
- package/Behaviors/Meshes/pointerDragBehavior.js +1 -1
- package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
- package/Bones/boneLookController.js +1 -1
- package/Bones/boneLookController.js.map +1 -1
- package/Buffers/buffer.js +1 -1
- package/Buffers/buffer.js.map +1 -1
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js +2 -2
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js.map +1 -1
- package/Cameras/camera.js +2 -2
- package/Cameras/camera.js.map +1 -1
- package/Engines/AbstractEngine/abstractEngine.renderPass.js +1 -0
- package/Engines/AbstractEngine/abstractEngine.renderPass.js.map +1 -1
- package/Engines/Extensions/engine.query.js +1 -1
- package/Engines/Extensions/engine.query.js.map +1 -1
- package/Engines/Processors/shaderProcessor.js +2 -3
- package/Engines/Processors/shaderProcessor.js.map +1 -1
- package/Engines/WebGL/webGLRenderTargetWrapper.js +1 -1
- package/Engines/WebGL/webGLRenderTargetWrapper.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.debugging.d.ts +87 -0
- package/Engines/WebGPU/Extensions/engine.debugging.js +123 -31
- package/Engines/WebGPU/Extensions/engine.debugging.js.map +1 -1
- package/Engines/WebGPU/webgpuBufferManager.js +1 -1
- package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessor.js +1 -1
- package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureManager.js +20 -6
- package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
- package/Engines/abstractEngine.js +2 -2
- package/Engines/abstractEngine.js.map +1 -1
- package/Engines/engine.common.js +2 -2
- package/Engines/engine.common.js.map +1 -1
- package/Engines/engine.js +0 -1
- package/Engines/engine.js.map +1 -1
- package/Engines/thinEngine.functions.js +1 -1
- package/Engines/thinEngine.functions.js.map +1 -1
- package/Engines/thinEngine.js +4 -5
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/thinNativeEngine.js +2 -5
- package/Engines/thinNativeEngine.js.map +1 -1
- package/Engines/thinWebGPUEngine.d.ts +6 -4
- package/Engines/thinWebGPUEngine.js +49 -25
- package/Engines/thinWebGPUEngine.js.map +1 -1
- package/Engines/webgpuEngine.d.ts +2 -1
- package/Engines/webgpuEngine.js +18 -16
- package/Engines/webgpuEngine.js.map +1 -1
- package/FlowGraph/flowGraph.d.ts +1 -0
- package/FlowGraph/flowGraph.js.map +1 -1
- package/FlowGraph/flowGraphBlock.d.ts +1 -0
- package/FlowGraph/flowGraphBlock.js.map +1 -1
- package/FlowGraph/flowGraphContext.d.ts +1 -0
- package/FlowGraph/flowGraphContext.js.map +1 -1
- package/FlowGraph/flowGraphCoordinator.d.ts +1 -0
- package/FlowGraph/flowGraphCoordinator.js.map +1 -1
- package/FrameGraph/Node/nodeRenderGraph.d.ts +12 -1
- package/FrameGraph/Node/nodeRenderGraph.js +36 -2
- package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
- package/FrameGraph/Tasks/Layers/baseLayerTask.js +1 -1
- package/FrameGraph/Tasks/Layers/baseLayerTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.js +3 -0
- package/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.js +3 -0
- package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.d.ts +3 -1
- package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.js +14 -0
- package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.d.ts +2 -2
- package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js +20 -14
- package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.d.ts +3 -2
- package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js +38 -14
- package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js.map +1 -1
- package/Layers/glowLayer.js +1 -1
- package/Layers/glowLayer.js.map +1 -1
- package/Layers/highlightLayer.js +1 -1
- package/Layers/highlightLayer.js.map +1 -1
- package/Layers/selectionOutlineLayer.js +8 -0
- package/Layers/selectionOutlineLayer.js.map +1 -1
- package/Layers/thinSelectionOutlineLayer.js +15 -0
- package/Layers/thinSelectionOutlineLayer.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.js +0 -1
- package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.d.ts +28 -1
- package/Lights/Shadows/shadowGenerator.js +77 -11
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Lights/lightingVolume.d.ts +1 -0
- package/Lights/lightingVolume.js +10 -2
- package/Lights/lightingVolume.js.map +1 -1
- package/Loading/sceneLoader.js +1 -1
- package/Loading/sceneLoader.js.map +1 -1
- package/Materials/Node/Blocks/Dual/fogBlock.js +1 -1
- package/Materials/Node/Blocks/Dual/fogBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js +1 -1
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/sheenBlock.js +1 -2
- package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
- package/Materials/Node/Blocks/cloudBlock.js +1 -1
- package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
- package/Materials/Node/Blocks/curveBlock.js +2 -3
- package/Materials/Node/Blocks/curveBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.js +1 -2
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/PBR/openpbrMaterial.js +3 -5
- package/Materials/PBR/openpbrMaterial.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.js +2 -3
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/Textures/Procedurals/proceduralTexture.js +0 -1
- package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
- package/Materials/Textures/cubeTexture.js +1 -1
- package/Materials/Textures/cubeTexture.js.map +1 -1
- package/Materials/Textures/htmlElementTexture.js +2 -2
- package/Materials/Textures/htmlElementTexture.js.map +1 -1
- package/Materials/Textures/multiRenderTarget.js +1 -1
- package/Materials/Textures/multiRenderTarget.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.js +13 -2
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/effect.js +2 -1
- package/Materials/effect.js.map +1 -1
- package/Materials/materialHelper.functions.js +1 -1
- package/Materials/materialHelper.functions.js.map +1 -1
- package/Materials/multiMaterial.js +1 -1
- package/Materials/multiMaterial.js.map +1 -1
- package/Materials/standardMaterial.js +1 -2
- package/Materials/standardMaterial.js.map +1 -1
- package/Maths/math.geospatial.d.ts +17 -2
- package/Maths/math.geospatial.functions.d.ts +16 -2
- package/Maths/math.geospatial.functions.js +37 -4
- package/Maths/math.geospatial.functions.js.map +1 -1
- package/Maths/math.geospatial.js.map +1 -1
- package/Maths/math.path.js +1 -1
- package/Maths/math.path.js.map +1 -1
- package/Maths/math.scalar.functions.js +3 -3
- package/Maths/math.scalar.functions.js.map +1 -1
- package/Maths/math.vector.js +1 -1
- package/Maths/math.vector.js.map +1 -1
- package/Meshes/Builders/boxBuilder.js +1 -2
- package/Meshes/Builders/boxBuilder.js.map +1 -1
- package/Meshes/Builders/cylinderBuilder.js +2 -2
- package/Meshes/Builders/cylinderBuilder.js.map +1 -1
- package/Meshes/Builders/decalBuilder.js +1 -2
- package/Meshes/Builders/decalBuilder.js.map +1 -1
- package/Meshes/Builders/latheBuilder.js +2 -2
- package/Meshes/Builders/latheBuilder.js.map +1 -1
- package/Meshes/Builders/linesBuilder.js +11 -15
- package/Meshes/Builders/linesBuilder.js.map +1 -1
- package/Meshes/Builders/polygonBuilder.js +6 -6
- package/Meshes/Builders/polygonBuilder.js.map +1 -1
- package/Meshes/Builders/polyhedronBuilder.js +2 -2
- package/Meshes/Builders/polyhedronBuilder.js.map +1 -1
- package/Meshes/Builders/ribbonBuilder.js +6 -6
- package/Meshes/Builders/ribbonBuilder.js.map +1 -1
- package/Meshes/Builders/shapeBuilder.js +2 -3
- package/Meshes/Builders/shapeBuilder.js.map +1 -1
- package/Meshes/Builders/tiledBoxBuilder.js +1 -1
- package/Meshes/Builders/tiledBoxBuilder.js.map +1 -1
- package/Meshes/Builders/tiledPlaneBuilder.js +1 -1
- package/Meshes/Builders/tiledPlaneBuilder.js.map +1 -1
- package/Meshes/GreasedLine/greasedLineMesh.js +1 -2
- package/Meshes/GreasedLine/greasedLineMesh.js.map +1 -1
- package/Meshes/GreasedLine/greasedLineRibbonMesh.js +1 -1
- package/Meshes/GreasedLine/greasedLineRibbonMesh.js.map +1 -1
- package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.js +1 -1
- package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.js +1 -1
- package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.js.map +1 -1
- package/Meshes/Node/Blocks/extrudeGeometryBlock.d.ts +61 -0
- package/Meshes/Node/Blocks/extrudeGeometryBlock.js +297 -0
- package/Meshes/Node/Blocks/extrudeGeometryBlock.js.map +1 -0
- package/Meshes/Node/Blocks/mappingBlock.js +1 -1
- package/Meshes/Node/Blocks/mappingBlock.js.map +1 -1
- package/Meshes/Node/index.d.ts +1 -0
- package/Meshes/Node/index.js +1 -0
- package/Meshes/Node/index.js.map +1 -1
- package/Meshes/abstractMesh.d.ts +4 -0
- package/Meshes/abstractMesh.js +14 -10
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/csg.js +1 -1
- package/Meshes/csg.js.map +1 -1
- package/Meshes/csg2.js +1 -1
- package/Meshes/csg2.js.map +1 -1
- package/Meshes/geodesicMesh.js +11 -13
- package/Meshes/geodesicMesh.js.map +1 -1
- package/Meshes/geometry.js +2 -2
- package/Meshes/geometry.js.map +1 -1
- package/Meshes/groundMesh.js +7 -7
- package/Meshes/groundMesh.js.map +1 -1
- package/Meshes/mesh.d.ts +2 -0
- package/Meshes/mesh.js +21 -7
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/mesh.vertexData.js +22 -22
- package/Meshes/mesh.vertexData.js.map +1 -1
- package/Meshes/meshSimplification.js +1 -1
- package/Meshes/meshSimplification.js.map +1 -1
- package/Meshes/polygonMesh.js +1 -1
- package/Meshes/polygonMesh.js.map +1 -1
- package/Meshes/trailMesh.js +1 -1
- package/Meshes/trailMesh.js.map +1 -1
- package/Misc/HighDynamicRange/hdr.js +4 -6
- package/Misc/HighDynamicRange/hdr.js.map +1 -1
- package/Misc/HighDynamicRange/panoramaToCubemap.js +1 -1
- package/Misc/HighDynamicRange/panoramaToCubemap.js.map +1 -1
- package/Misc/basisWorker.js +1 -1
- package/Misc/basisWorker.js.map +1 -1
- package/Misc/environmentTextureTools.js +1 -1
- package/Misc/environmentTextureTools.js.map +1 -1
- package/Misc/meshExploder.js +1 -2
- package/Misc/meshExploder.js.map +1 -1
- package/Misc/tga.js +2 -2
- package/Misc/tga.js.map +1 -1
- package/Misc/timer.js +4 -2
- package/Misc/timer.js.map +1 -1
- package/Misc/tools.d.ts +7 -0
- package/Misc/tools.js +25 -7
- package/Misc/tools.js.map +1 -1
- package/Misc/webRequest.d.ts +34 -3
- package/Misc/webRequest.js +107 -24
- package/Misc/webRequest.js.map +1 -1
- package/Morph/morphTargetManager.js +1 -1
- package/Morph/morphTargetManager.js.map +1 -1
- package/Particles/Node/Blocks/Update/updateNoiseBlock.js +1 -1
- package/Particles/Node/Blocks/Update/updateNoiseBlock.js.map +1 -1
- package/Particles/Node/Blocks/particleSourceTextureBlock.d.ts +11 -1
- package/Particles/Node/Blocks/particleSourceTextureBlock.js +25 -11
- package/Particles/Node/Blocks/particleSourceTextureBlock.js.map +1 -1
- package/Particles/Node/nodeParticleSystemSet.helper.js +3 -3
- package/Particles/Node/nodeParticleSystemSet.helper.js.map +1 -1
- package/Particles/Node/nodeParticleSystemSet.js +1 -1
- package/Particles/Node/nodeParticleSystemSet.js.map +1 -1
- package/Particles/computeShaderParticleSystem.js +2 -0
- package/Particles/computeShaderParticleSystem.js.map +1 -1
- package/Particles/gpuParticleSystem.d.ts +14 -0
- package/Particles/gpuParticleSystem.js +94 -12
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Particles/particleSystem.js +4 -1
- package/Particles/particleSystem.js.map +1 -1
- package/Particles/pointsCloudSystem.js +46 -47
- package/Particles/pointsCloudSystem.js.map +1 -1
- package/Particles/solidParticleSystem.js +5 -6
- package/Particles/solidParticleSystem.js.map +1 -1
- package/Particles/thinParticleSystem.js +3 -4
- package/Particles/thinParticleSystem.js.map +1 -1
- package/Particles/webgl2ParticleSystem.js +2 -1
- package/Particles/webgl2ParticleSystem.js.map +1 -1
- package/Physics/v1/Plugins/ammoJSPlugin.js +0 -8
- package/Physics/v1/Plugins/ammoJSPlugin.js.map +1 -1
- package/Physics/v2/characterController.js +4 -8
- package/Physics/v2/characterController.js.map +1 -1
- package/Physics/v2/ragdoll.js +1 -2
- package/Physics/v2/ragdoll.js.map +1 -1
- package/PostProcesses/postProcess.js +3 -3
- package/PostProcesses/postProcess.js.map +1 -1
- package/PostProcesses/thinDepthOfFieldEffect.js +2 -2
- package/PostProcesses/thinDepthOfFieldEffect.js.map +1 -1
- package/Probes/reflectionProbe.js +0 -1
- package/Probes/reflectionProbe.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +0 -5
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
- package/Rendering/depthRenderer.js +0 -11
- package/Rendering/depthRenderer.js.map +1 -1
- package/Rendering/depthRendererSceneComponent.js +1 -1
- package/Rendering/depthRendererSceneComponent.js.map +1 -1
- package/Rendering/geometryBufferRenderer.js +0 -1
- package/Rendering/geometryBufferRenderer.js.map +1 -1
- package/Rendering/objectRenderer.js +7 -5
- package/Rendering/objectRenderer.js.map +1 -1
- package/Rendering/thinDepthPeelingRenderer.js +1 -1
- package/Rendering/thinDepthPeelingRenderer.js.map +1 -1
- package/Rendering/utilityLayerRenderer.js +1 -1
- package/Rendering/utilityLayerRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/screenSpaceRayTrace.js +18 -8
- package/Shaders/ShadersInclude/screenSpaceRayTrace.js.map +1 -1
- package/Shaders/gpuRenderParticles.vertex.js +4 -0
- package/Shaders/gpuRenderParticles.vertex.js.map +1 -1
- package/Shaders/gpuUpdateParticles.vertex.js +15 -3
- package/Shaders/gpuUpdateParticles.vertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/screenSpaceRayTrace.js +18 -7
- package/ShadersWGSL/ShadersInclude/screenSpaceRayTrace.js.map +1 -1
- package/ShadersWGSL/gpuUpdateParticles.compute.js +16 -1
- package/ShadersWGSL/gpuUpdateParticles.compute.js.map +1 -1
- package/ShadersWGSL/lightingVolume.compute.js +1 -1
- package/ShadersWGSL/lightingVolume.compute.js.map +1 -1
- package/Sprites/spriteManager.js +4 -4
- package/Sprites/spriteManager.js.map +1 -1
- package/XR/features/WebXRAnchorSystem.js +2 -2
- package/XR/features/WebXRAnchorSystem.js.map +1 -1
- package/XR/features/WebXRHandTracking.js +1 -1
- package/XR/features/WebXRHandTracking.js.map +1 -1
- package/XR/features/WebXRNearInteraction.js +1 -1
- package/XR/features/WebXRNearInteraction.js.map +1 -1
- package/XR/motionController/webXRMicrosoftMixedRealityController.js +1 -1
- package/XR/motionController/webXRMicrosoftMixedRealityController.js.map +1 -1
- package/XR/motionController/webXROculusTouchMotionController.js +1 -1
- package/XR/motionController/webXROculusTouchMotionController.js.map +1 -1
- package/XR/webXRFeaturesManager.js +1 -1
- package/XR/webXRFeaturesManager.js.map +1 -1
- package/assetContainer.js +1 -1
- package/assetContainer.js.map +1 -1
- package/package.json +1 -1
- package/scene.d.ts +16 -0
- package/scene.js +28 -0
- package/scene.js.map +1 -1
- package/sceneComponent.js +1 -1
- package/sceneComponent.js.map +1 -1
package/Misc/timer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timer.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/timer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { IDisposable } from \"../scene\";\r\n\r\n/**\r\n * Construction options for a timer\r\n */\r\nexport interface ITimerOptions<T> {\r\n /**\r\n * Time-to-end\r\n */\r\n timeout: number;\r\n /**\r\n * The context observable is used to calculate time deltas and provides the context of the timer's callbacks. Will usually be OnBeforeRenderObservable.\r\n * Countdown calculation is done ONLY when the observable is notifying its observers, meaning that if\r\n * you choose an observable that doesn't trigger too often, the wait time might extend further than the requested max time\r\n */\r\n contextObservable: Observable<T>;\r\n /**\r\n * Optional parameters when adding an observer to the observable\r\n */\r\n observableParameters?: {\r\n mask?: number;\r\n insertFirst?: boolean;\r\n scope?: any;\r\n };\r\n /**\r\n * An optional break condition that will stop the times prematurely. In this case onEnded will not be triggered!\r\n */\r\n breakCondition?: (data?: ITimerData<T>) => boolean;\r\n /**\r\n * Will be triggered when the time condition has met\r\n */\r\n onEnded?: (data: ITimerData<any>) => void;\r\n /**\r\n * Will be triggered when the break condition has met (prematurely ended)\r\n */\r\n onAborted?: (data: ITimerData<any>) => void;\r\n /**\r\n * Optional function to execute on each tick (or count)\r\n */\r\n onTick?: (data: ITimerData<any>) => void;\r\n}\r\n\r\n/**\r\n * An interface defining the data sent by the timer\r\n */\r\nexport interface ITimerData<T> {\r\n /**\r\n * When did it start\r\n */\r\n startTime: number;\r\n /**\r\n * Time now\r\n */\r\n currentTime: number;\r\n /**\r\n * Time passed since started\r\n */\r\n deltaTime: number;\r\n /**\r\n * How much is completed, in [0.0...1.0].\r\n * Note that this CAN be higher than 1 due to the fact that we don't actually measure time but delta between observable calls\r\n */\r\n completeRate: number;\r\n /**\r\n * What the registered observable sent in the last count\r\n */\r\n payload: T;\r\n}\r\n\r\n/**\r\n * The current state of the timer\r\n */\r\nexport const enum TimerState {\r\n /**\r\n * Timer initialized, not yet started\r\n */\r\n INIT,\r\n /**\r\n * Timer started and counting\r\n */\r\n STARTED,\r\n /**\r\n * Timer ended (whether aborted or time reached)\r\n */\r\n ENDED,\r\n}\r\n\r\n/**\r\n * A simple version of the timer. Will take options and start the timer immediately after calling it\r\n *\r\n * @param options options with which to initialize this timer\r\n * @returns an observer that can be used to stop the timer\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function setAndStartTimer<T = any>(options: ITimerOptions<T>): Nullable<Observer<T>> {\r\n let timer = 0;\r\n const startTime = Date.now();\r\n options.observableParameters = options.observableParameters ?? {};\r\n const observer = options.contextObservable.add(\r\n (payload: any) => {\r\n const now = Date.now();\r\n timer = now - startTime;\r\n const data: ITimerData<any> = {\r\n startTime,\r\n currentTime: now,\r\n deltaTime: timer,\r\n completeRate: timer / options.timeout,\r\n payload,\r\n };\r\n options.onTick && options.onTick(data);\r\n if (options.breakCondition && options.breakCondition()) {\r\n options.contextObservable.remove(observer);\r\n options.onAborted && options.onAborted(data);\r\n }\r\n if (timer >= options.timeout) {\r\n options.contextObservable.remove(observer);\r\n options.onEnded && options.onEnded(data);\r\n }\r\n },\r\n options.observableParameters.mask,\r\n options.observableParameters.insertFirst,\r\n options.observableParameters.scope\r\n );\r\n return observer;\r\n}\r\n\r\n/**\r\n * An advanced implementation of a timer class\r\n */\r\nexport class AdvancedTimer<T = any> implements IDisposable {\r\n /**\r\n * Will notify each time the timer calculates the remaining time\r\n */\r\n public onEachCountObservable: Observable<ITimerData<T>> = new Observable();\r\n /**\r\n * Will trigger when the timer was aborted due to the break condition\r\n */\r\n public onTimerAbortedObservable: Observable<ITimerData<T>> = new Observable();\r\n /**\r\n * Will trigger when the timer ended successfully\r\n */\r\n public onTimerEndedObservable: Observable<ITimerData<T>> = new Observable();\r\n /**\r\n * Will trigger when the timer state has changed\r\n */\r\n public onStateChangedObservable: Observable<TimerState> = new Observable();\r\n\r\n private _observer: Nullable<Observer<T>> = null;\r\n private _contextObservable: Observable<T>;\r\n private _observableParameters: {\r\n mask?: number;\r\n insertFirst?: boolean;\r\n scope?: any;\r\n };\r\n private _startTime: number;\r\n private _timer: number;\r\n private _state: TimerState;\r\n private _breakCondition: (data: ITimerData<T>) => boolean;\r\n private _timeToEnd: number;\r\n private _breakOnNextTick: boolean = false;\r\n\r\n /**\r\n * Will construct a new advanced timer based on the options provided. Timer will not start until start() is called.\r\n * @param options construction options for this advanced timer\r\n */\r\n constructor(options: ITimerOptions<T>) {\r\n this._setState(TimerState.INIT);\r\n this._contextObservable = options.contextObservable;\r\n this._observableParameters = options.observableParameters ?? {};\r\n this._breakCondition = options.breakCondition ?? (() => false);\r\n this._timeToEnd = options.timeout;\r\n if (options.onEnded) {\r\n this.onTimerEndedObservable.add(options.onEnded);\r\n }\r\n if (options.onTick) {\r\n this.onEachCountObservable.add(options.onTick);\r\n }\r\n if (options.onAborted) {\r\n this.onTimerAbortedObservable.add(options.onAborted);\r\n }\r\n }\r\n\r\n /**\r\n * set a breaking condition for this timer. Default is to never break during count\r\n * @param predicate the new break condition. Returns true to break, false otherwise\r\n */\r\n public set breakCondition(predicate: (data: ITimerData<T>) => boolean) {\r\n this._breakCondition = predicate;\r\n }\r\n\r\n /**\r\n * Reset ALL associated observables in this advanced timer\r\n */\r\n public clearObservables() {\r\n this.onEachCountObservable.clear();\r\n this.onTimerAbortedObservable.clear();\r\n this.onTimerEndedObservable.clear();\r\n this.onStateChangedObservable.clear();\r\n }\r\n\r\n /**\r\n * Will start a new iteration of this timer. Only one instance of this timer can run at a time.\r\n *\r\n * @param timeToEnd how much time to measure until timer ended\r\n */\r\n public start(timeToEnd: number = this._timeToEnd) {\r\n if (this._state === TimerState.STARTED) {\r\n throw new Error(\"Timer already started. Please stop it before starting again\");\r\n }\r\n this._timeToEnd = timeToEnd;\r\n this._startTime = Date.now();\r\n this._timer = 0;\r\n this._observer = this._contextObservable.add(this._tick, this._observableParameters.mask, this._observableParameters.insertFirst, this._observableParameters.scope);\r\n this._setState(TimerState.STARTED);\r\n }\r\n\r\n /**\r\n * Will force a stop on the next tick.\r\n */\r\n public stop() {\r\n if (this._state !== TimerState.STARTED) {\r\n return;\r\n }\r\n this._breakOnNextTick = true;\r\n }\r\n\r\n /**\r\n * Dispose this timer, clearing all resources\r\n */\r\n public dispose() {\r\n if (this._observer) {\r\n this._contextObservable.remove(this._observer);\r\n }\r\n this.clearObservables();\r\n }\r\n\r\n private _setState(newState: TimerState) {\r\n this._state = newState;\r\n this.onStateChangedObservable.notifyObservers(this._state);\r\n }\r\n\r\n private _tick = (payload: T) => {\r\n const now = Date.now();\r\n this._timer = now - this._startTime;\r\n const data: ITimerData<T> = {\r\n startTime: this._startTime,\r\n currentTime: now,\r\n deltaTime: this._timer,\r\n completeRate: this._timer / this._timeToEnd,\r\n payload,\r\n };\r\n const shouldBreak = this._breakOnNextTick || this._breakCondition(data);\r\n if (shouldBreak || this._timer >= this._timeToEnd) {\r\n this._stop(data, shouldBreak);\r\n } else {\r\n this.onEachCountObservable.notifyObservers(data);\r\n }\r\n };\r\n\r\n private _stop(data: ITimerData<T>, aborted: boolean = false) {\r\n this._contextObservable.remove(this._observer);\r\n this._setState(TimerState.ENDED);\r\n if (aborted) {\r\n this.onTimerAbortedObservable.notifyObservers(data);\r\n } else {\r\n this.onTimerEndedObservable.notifyObservers(data);\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"timer.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/timer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { IDisposable } from \"../scene\";\r\n\r\n/**\r\n * Construction options for a timer\r\n */\r\nexport interface ITimerOptions<T> {\r\n /**\r\n * Time-to-end\r\n */\r\n timeout: number;\r\n /**\r\n * The context observable is used to calculate time deltas and provides the context of the timer's callbacks. Will usually be OnBeforeRenderObservable.\r\n * Countdown calculation is done ONLY when the observable is notifying its observers, meaning that if\r\n * you choose an observable that doesn't trigger too often, the wait time might extend further than the requested max time\r\n */\r\n contextObservable: Observable<T>;\r\n /**\r\n * Optional parameters when adding an observer to the observable\r\n */\r\n observableParameters?: {\r\n mask?: number;\r\n insertFirst?: boolean;\r\n scope?: any;\r\n };\r\n /**\r\n * An optional break condition that will stop the times prematurely. In this case onEnded will not be triggered!\r\n */\r\n breakCondition?: (data?: ITimerData<T>) => boolean;\r\n /**\r\n * Will be triggered when the time condition has met\r\n */\r\n onEnded?: (data: ITimerData<any>) => void;\r\n /**\r\n * Will be triggered when the break condition has met (prematurely ended)\r\n */\r\n onAborted?: (data: ITimerData<any>) => void;\r\n /**\r\n * Optional function to execute on each tick (or count)\r\n */\r\n onTick?: (data: ITimerData<any>) => void;\r\n}\r\n\r\n/**\r\n * An interface defining the data sent by the timer\r\n */\r\nexport interface ITimerData<T> {\r\n /**\r\n * When did it start\r\n */\r\n startTime: number;\r\n /**\r\n * Time now\r\n */\r\n currentTime: number;\r\n /**\r\n * Time passed since started\r\n */\r\n deltaTime: number;\r\n /**\r\n * How much is completed, in [0.0...1.0].\r\n * Note that this CAN be higher than 1 due to the fact that we don't actually measure time but delta between observable calls\r\n */\r\n completeRate: number;\r\n /**\r\n * What the registered observable sent in the last count\r\n */\r\n payload: T;\r\n}\r\n\r\n/**\r\n * The current state of the timer\r\n */\r\nexport const enum TimerState {\r\n /**\r\n * Timer initialized, not yet started\r\n */\r\n INIT,\r\n /**\r\n * Timer started and counting\r\n */\r\n STARTED,\r\n /**\r\n * Timer ended (whether aborted or time reached)\r\n */\r\n ENDED,\r\n}\r\n\r\n/**\r\n * A simple version of the timer. Will take options and start the timer immediately after calling it\r\n *\r\n * @param options options with which to initialize this timer\r\n * @returns an observer that can be used to stop the timer\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function setAndStartTimer<T = any>(options: ITimerOptions<T>): Nullable<Observer<T>> {\r\n let timer = 0;\r\n const startTime = Date.now();\r\n options.observableParameters = options.observableParameters ?? {};\r\n const observer = options.contextObservable.add(\r\n (payload: any) => {\r\n const now = Date.now();\r\n timer = now - startTime;\r\n const data: ITimerData<any> = {\r\n startTime,\r\n currentTime: now,\r\n deltaTime: timer,\r\n completeRate: timer / options.timeout,\r\n payload,\r\n };\r\n if (options.breakCondition && options.breakCondition(data)) {\r\n options.contextObservable.remove(observer);\r\n options.onAborted && options.onAborted(data);\r\n return;\r\n }\r\n if (timer >= options.timeout) {\r\n options.contextObservable.remove(observer);\r\n options.onEnded && options.onEnded(data);\r\n return;\r\n }\r\n options.onTick && options.onTick(data);\r\n },\r\n options.observableParameters.mask,\r\n options.observableParameters.insertFirst,\r\n options.observableParameters.scope\r\n );\r\n return observer;\r\n}\r\n\r\n/**\r\n * An advanced implementation of a timer class\r\n */\r\nexport class AdvancedTimer<T = any> implements IDisposable {\r\n /**\r\n * Will notify each time the timer calculates the remaining time\r\n */\r\n public onEachCountObservable: Observable<ITimerData<T>> = new Observable();\r\n /**\r\n * Will trigger when the timer was aborted due to the break condition\r\n */\r\n public onTimerAbortedObservable: Observable<ITimerData<T>> = new Observable();\r\n /**\r\n * Will trigger when the timer ended successfully\r\n */\r\n public onTimerEndedObservable: Observable<ITimerData<T>> = new Observable();\r\n /**\r\n * Will trigger when the timer state has changed\r\n */\r\n public onStateChangedObservable: Observable<TimerState> = new Observable();\r\n\r\n private _observer: Nullable<Observer<T>> = null;\r\n private _contextObservable: Observable<T>;\r\n private _observableParameters: {\r\n mask?: number;\r\n insertFirst?: boolean;\r\n scope?: any;\r\n };\r\n private _startTime: number;\r\n private _timer: number;\r\n private _state: TimerState;\r\n private _breakCondition: (data: ITimerData<T>) => boolean;\r\n private _timeToEnd: number;\r\n private _breakOnNextTick: boolean = false;\r\n\r\n /**\r\n * Will construct a new advanced timer based on the options provided. Timer will not start until start() is called.\r\n * @param options construction options for this advanced timer\r\n */\r\n constructor(options: ITimerOptions<T>) {\r\n this._setState(TimerState.INIT);\r\n this._contextObservable = options.contextObservable;\r\n this._observableParameters = options.observableParameters ?? {};\r\n this._breakCondition = options.breakCondition ?? (() => false);\r\n this._timeToEnd = options.timeout;\r\n if (options.onEnded) {\r\n this.onTimerEndedObservable.add(options.onEnded);\r\n }\r\n if (options.onTick) {\r\n this.onEachCountObservable.add(options.onTick);\r\n }\r\n if (options.onAborted) {\r\n this.onTimerAbortedObservable.add(options.onAborted);\r\n }\r\n }\r\n\r\n /**\r\n * set a breaking condition for this timer. Default is to never break during count\r\n * @param predicate the new break condition. Returns true to break, false otherwise\r\n */\r\n public set breakCondition(predicate: (data: ITimerData<T>) => boolean) {\r\n this._breakCondition = predicate;\r\n }\r\n\r\n /**\r\n * Reset ALL associated observables in this advanced timer\r\n */\r\n public clearObservables() {\r\n this.onEachCountObservable.clear();\r\n this.onTimerAbortedObservable.clear();\r\n this.onTimerEndedObservable.clear();\r\n this.onStateChangedObservable.clear();\r\n }\r\n\r\n /**\r\n * Will start a new iteration of this timer. Only one instance of this timer can run at a time.\r\n *\r\n * @param timeToEnd how much time to measure until timer ended\r\n */\r\n public start(timeToEnd: number = this._timeToEnd) {\r\n if (this._state === TimerState.STARTED) {\r\n throw new Error(\"Timer already started. Please stop it before starting again\");\r\n }\r\n this._timeToEnd = timeToEnd;\r\n this._startTime = Date.now();\r\n this._timer = 0;\r\n this._observer = this._contextObservable.add(this._tick, this._observableParameters.mask, this._observableParameters.insertFirst, this._observableParameters.scope);\r\n this._setState(TimerState.STARTED);\r\n }\r\n\r\n /**\r\n * Will force a stop on the next tick.\r\n */\r\n public stop() {\r\n if (this._state !== TimerState.STARTED) {\r\n return;\r\n }\r\n this._breakOnNextTick = true;\r\n }\r\n\r\n /**\r\n * Dispose this timer, clearing all resources\r\n */\r\n public dispose() {\r\n if (this._observer) {\r\n this._contextObservable.remove(this._observer);\r\n }\r\n this.clearObservables();\r\n }\r\n\r\n private _setState(newState: TimerState) {\r\n this._state = newState;\r\n this.onStateChangedObservable.notifyObservers(this._state);\r\n }\r\n\r\n private _tick = (payload: T) => {\r\n const now = Date.now();\r\n this._timer = now - this._startTime;\r\n const data: ITimerData<T> = {\r\n startTime: this._startTime,\r\n currentTime: now,\r\n deltaTime: this._timer,\r\n completeRate: this._timer / this._timeToEnd,\r\n payload,\r\n };\r\n const shouldBreak = this._breakOnNextTick || this._breakCondition(data);\r\n if (shouldBreak || this._timer >= this._timeToEnd) {\r\n this._stop(data, shouldBreak);\r\n } else {\r\n this.onEachCountObservable.notifyObservers(data);\r\n }\r\n };\r\n\r\n private _stop(data: ITimerData<T>, aborted: boolean = false) {\r\n this._contextObservable.remove(this._observer);\r\n this._setState(TimerState.ENDED);\r\n if (aborted) {\r\n this.onTimerAbortedObservable.notifyObservers(data);\r\n } else {\r\n this.onTimerEndedObservable.notifyObservers(data);\r\n }\r\n }\r\n}\r\n"]}
|
package/Misc/tools.d.ts
CHANGED
|
@@ -242,6 +242,13 @@ export declare class Tools {
|
|
|
242
242
|
* @internal
|
|
243
243
|
*/
|
|
244
244
|
static readonly _DefaultCdnUrl = "https://cdn.babylonjs.com";
|
|
245
|
+
/**
|
|
246
|
+
* The CDN version to use when constructing versioned CDN URLs.
|
|
247
|
+
* Injected at build time by the version update script.
|
|
248
|
+
* When set, unversioned CDN URLs will be rewritten to include this version prefix.
|
|
249
|
+
* @internal
|
|
250
|
+
*/
|
|
251
|
+
static _CdnVersion: string;
|
|
245
252
|
/**
|
|
246
253
|
* @internal
|
|
247
254
|
*/
|
package/Misc/tools.js
CHANGED
|
@@ -372,7 +372,7 @@ export class Tools {
|
|
|
372
372
|
}
|
|
373
373
|
if (_a.AssetBaseUrl && url.startsWith(_a._DefaultAssetsUrl)) {
|
|
374
374
|
// normalize the baseUrl
|
|
375
|
-
const baseUrl = _a.AssetBaseUrl
|
|
375
|
+
const baseUrl = _a.AssetBaseUrl.endsWith("/") ? _a.AssetBaseUrl.slice(0, -1) : _a.AssetBaseUrl;
|
|
376
376
|
return url.replace(_a._DefaultAssetsUrl, baseUrl);
|
|
377
377
|
}
|
|
378
378
|
return url;
|
|
@@ -387,12 +387,23 @@ export class Tools {
|
|
|
387
387
|
if (!scriptUrl) {
|
|
388
388
|
return "";
|
|
389
389
|
}
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
390
|
+
if (scriptUrl.startsWith(_a._DefaultCdnUrl)) {
|
|
391
|
+
if (_a.ScriptBaseUrl) {
|
|
392
|
+
// if the base URL was set, and the script Url is an absolute path change the default path
|
|
393
|
+
// change the default host, which is https://cdn.babylonjs.com with the one defined
|
|
394
|
+
// make sure no trailing slash is present
|
|
395
|
+
const baseUrl = _a.ScriptBaseUrl.endsWith("/") ? _a.ScriptBaseUrl.slice(0, -1) : _a.ScriptBaseUrl;
|
|
396
|
+
scriptUrl = scriptUrl.replace(_a._DefaultCdnUrl, baseUrl);
|
|
397
|
+
}
|
|
398
|
+
else if (_a._CdnVersion) {
|
|
399
|
+
// If a CDN version is set (injected at build time), rewrite unversioned CDN URLs to versioned ones
|
|
400
|
+
const versionedBase = `${_a._DefaultCdnUrl}/v${_a._CdnVersion}`;
|
|
401
|
+
// Guard against double-versioning if the URL already contains the version prefix
|
|
402
|
+
// (e.g. when GetBabylonScriptURL is called multiple times on the same URL)
|
|
403
|
+
if (!scriptUrl.startsWith(versionedBase)) {
|
|
404
|
+
scriptUrl = scriptUrl.replace(_a._DefaultCdnUrl, versionedBase);
|
|
405
|
+
}
|
|
406
|
+
}
|
|
396
407
|
}
|
|
397
408
|
// run the preprocessor
|
|
398
409
|
scriptUrl = _a.ScriptPreprocessUrl(scriptUrl);
|
|
@@ -1204,6 +1215,13 @@ Tools.GetDOMTextContent = GetDOMTextContent;
|
|
|
1204
1215
|
* @internal
|
|
1205
1216
|
*/
|
|
1206
1217
|
Tools._DefaultCdnUrl = "https://cdn.babylonjs.com";
|
|
1218
|
+
/**
|
|
1219
|
+
* The CDN version to use when constructing versioned CDN URLs.
|
|
1220
|
+
* Injected at build time by the version update script.
|
|
1221
|
+
* When set, unversioned CDN URLs will be rewritten to include this version prefix.
|
|
1222
|
+
* @internal
|
|
1223
|
+
*/
|
|
1224
|
+
Tools._CdnVersion = "8.54.3";
|
|
1207
1225
|
/**
|
|
1208
1226
|
* @internal
|
|
1209
1227
|
*/
|