@codexo/exojs 0.7.11 → 0.7.13
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/CHANGELOG.md +442 -0
- package/dist/esm/animation/Tween.d.ts +60 -1
- package/dist/esm/animation/Tween.js +60 -1
- package/dist/esm/animation/Tween.js.map +1 -1
- package/dist/esm/animation/TweenManager.d.ts +10 -0
- package/dist/esm/animation/TweenManager.js +10 -0
- package/dist/esm/animation/TweenManager.js.map +1 -1
- package/dist/esm/animation/types.d.ts +15 -0
- package/dist/esm/animation/types.js +6 -0
- package/dist/esm/animation/types.js.map +1 -1
- package/dist/esm/audio/AbstractMedia.d.ts +11 -0
- package/dist/esm/audio/AbstractMedia.js +10 -0
- package/dist/esm/audio/AbstractMedia.js.map +1 -1
- package/dist/esm/audio/AudioAnalyser.d.ts +21 -0
- package/dist/esm/audio/AudioAnalyser.js +16 -0
- package/dist/esm/audio/AudioAnalyser.js.map +1 -1
- package/dist/esm/audio/AudioBus.d.ts +37 -0
- package/dist/esm/audio/AudioBus.js +36 -0
- package/dist/esm/audio/AudioBus.js.map +1 -1
- package/dist/esm/audio/AudioFilter.d.ts +7 -0
- package/dist/esm/audio/AudioFilter.js +6 -0
- package/dist/esm/audio/AudioFilter.js.map +1 -1
- package/dist/esm/audio/AudioListener.d.ts +19 -0
- package/dist/esm/audio/AudioListener.js +11 -0
- package/dist/esm/audio/AudioListener.js.map +1 -1
- package/dist/esm/audio/AudioManager.d.ts +37 -0
- package/dist/esm/audio/AudioManager.js +37 -0
- package/dist/esm/audio/AudioManager.js.map +1 -1
- package/dist/esm/audio/BeatDetector.d.ts +21 -0
- package/dist/esm/audio/BeatDetector.js +21 -0
- package/dist/esm/audio/BeatDetector.js.map +1 -1
- package/dist/esm/audio/Media.d.ts +11 -0
- package/dist/esm/audio/Music.d.ts +12 -0
- package/dist/esm/audio/Music.js +12 -0
- package/dist/esm/audio/Music.js.map +1 -1
- package/dist/esm/audio/Sound.d.ts +25 -0
- package/dist/esm/audio/Sound.js +18 -0
- package/dist/esm/audio/Sound.js.map +1 -1
- package/dist/esm/audio/audio-context.d.ts +48 -0
- package/dist/esm/audio/audio-context.js +48 -5
- package/dist/esm/audio/audio-context.js.map +1 -1
- package/dist/esm/audio/filters/ChorusFilter.d.ts +5 -0
- package/dist/esm/audio/filters/ChorusFilter.js +4 -0
- package/dist/esm/audio/filters/ChorusFilter.js.map +1 -1
- package/dist/esm/audio/filters/CompressorFilter.d.ts +12 -0
- package/dist/esm/audio/filters/CompressorFilter.js +11 -0
- package/dist/esm/audio/filters/CompressorFilter.js.map +1 -1
- package/dist/esm/audio/filters/DelayFilter.d.ts +11 -0
- package/dist/esm/audio/filters/DelayFilter.js +10 -0
- package/dist/esm/audio/filters/DelayFilter.js.map +1 -1
- package/dist/esm/audio/filters/DuckingFilter.d.ts +13 -0
- package/dist/esm/audio/filters/DuckingFilter.js +12 -0
- package/dist/esm/audio/filters/DuckingFilter.js.map +1 -1
- package/dist/esm/audio/filters/EqualizerFilter.d.ts +20 -0
- package/dist/esm/audio/filters/EqualizerFilter.js +40 -0
- package/dist/esm/audio/filters/EqualizerFilter.js.map +1 -1
- package/dist/esm/audio/filters/GranularFilter.d.ts +6 -0
- package/dist/esm/audio/filters/GranularFilter.js +6 -0
- package/dist/esm/audio/filters/GranularFilter.js.map +1 -1
- package/dist/esm/audio/filters/HighpassFilter.d.ts +10 -0
- package/dist/esm/audio/filters/HighpassFilter.js +9 -0
- package/dist/esm/audio/filters/HighpassFilter.js.map +1 -1
- package/dist/esm/audio/filters/LowpassFilter.d.ts +10 -0
- package/dist/esm/audio/filters/LowpassFilter.js +9 -0
- package/dist/esm/audio/filters/LowpassFilter.js.map +1 -1
- package/dist/esm/audio/filters/PitchShiftFilter.d.ts +2 -0
- package/dist/esm/audio/filters/PitchShiftFilter.js +2 -0
- package/dist/esm/audio/filters/PitchShiftFilter.js.map +1 -1
- package/dist/esm/audio/filters/ReverbFilter.d.ts +12 -0
- package/dist/esm/audio/filters/ReverbFilter.js +11 -0
- package/dist/esm/audio/filters/ReverbFilter.js.map +1 -1
- package/dist/esm/audio/filters/VocoderFilter.d.ts +11 -0
- package/dist/esm/audio/filters/VocoderFilter.js +11 -0
- package/dist/esm/audio/filters/VocoderFilter.js.map +1 -1
- package/dist/esm/audio/filters/WorkletFilter.d.ts +6 -1
- package/dist/esm/audio/filters/WorkletFilter.js +6 -1
- package/dist/esm/audio/filters/WorkletFilter.js.map +1 -1
- package/dist/esm/core/Application.d.ts +66 -1
- package/dist/esm/core/Application.js +68 -6
- package/dist/esm/core/Application.js.map +1 -1
- package/dist/esm/core/Bounds.d.ts +23 -0
- package/dist/esm/core/Bounds.js +23 -0
- package/dist/esm/core/Bounds.js.map +1 -1
- package/dist/esm/core/Clock.d.ts +21 -0
- package/dist/esm/core/Clock.js +21 -0
- package/dist/esm/core/Clock.js.map +1 -1
- package/dist/esm/core/Color.d.ts +35 -0
- package/dist/esm/core/Color.js +35 -0
- package/dist/esm/core/Color.js.map +1 -1
- package/dist/esm/core/Scene.d.ts +76 -0
- package/dist/esm/core/Scene.js +83 -0
- package/dist/esm/core/Scene.js.map +1 -1
- package/dist/esm/core/SceneManager.d.ts +62 -0
- package/dist/esm/core/SceneManager.js +51 -2
- package/dist/esm/core/SceneManager.js.map +1 -1
- package/dist/esm/core/SceneNode.d.ts +31 -0
- package/dist/esm/core/SceneNode.js +31 -0
- package/dist/esm/core/SceneNode.js.map +1 -1
- package/dist/esm/core/Signal.d.ts +44 -0
- package/dist/esm/core/Signal.js +39 -0
- package/dist/esm/core/Signal.js.map +1 -1
- package/dist/esm/core/Time.d.ts +21 -0
- package/dist/esm/core/Time.js +21 -0
- package/dist/esm/core/Time.js.map +1 -1
- package/dist/esm/core/Timer.d.ts +7 -0
- package/dist/esm/core/Timer.js +7 -0
- package/dist/esm/core/Timer.js.map +1 -1
- package/dist/esm/core/capabilities.d.ts +12 -0
- package/dist/esm/core/capabilities.js +12 -0
- package/dist/esm/core/capabilities.js.map +1 -1
- package/dist/esm/core/types.d.ts +37 -0
- package/dist/esm/core/utils.d.ts +48 -0
- package/dist/esm/core/utils.js +48 -0
- package/dist/esm/core/utils.js.map +1 -1
- package/dist/esm/debug/BoundingBoxesLayer.d.ts +8 -0
- package/dist/esm/debug/BoundingBoxesLayer.js +8 -0
- package/dist/esm/debug/BoundingBoxesLayer.js.map +1 -1
- package/dist/esm/debug/DebugLayer.d.ts +16 -3
- package/dist/esm/debug/DebugLayer.js +11 -3
- package/dist/esm/debug/DebugLayer.js.map +1 -1
- package/dist/esm/debug/DebugOverlay.d.ts +11 -0
- package/dist/esm/debug/DebugOverlay.js +8 -2
- package/dist/esm/debug/DebugOverlay.js.map +1 -1
- package/dist/esm/debug/HitTestLayer.d.ts +9 -0
- package/dist/esm/debug/HitTestLayer.js +9 -0
- package/dist/esm/debug/HitTestLayer.js.map +1 -1
- package/dist/esm/debug/PerformanceLayer.d.ts +17 -1
- package/dist/esm/debug/PerformanceLayer.js +18 -0
- package/dist/esm/debug/PerformanceLayer.js.map +1 -1
- package/dist/esm/debug/PointerStackLayer.d.ts +8 -0
- package/dist/esm/debug/PointerStackLayer.js +11 -3
- package/dist/esm/debug/PointerStackLayer.js.map +1 -1
- package/dist/esm/index.js +6 -5
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/input/ArcadeStickGamepadMapping.d.ts +7 -0
- package/dist/esm/input/ArcadeStickGamepadMapping.js +25 -19
- package/dist/esm/input/ArcadeStickGamepadMapping.js.map +1 -1
- package/dist/esm/input/GameCubeGamepadMapping.d.ts +9 -0
- package/dist/esm/input/GameCubeGamepadMapping.js +9 -0
- package/dist/esm/input/GameCubeGamepadMapping.js.map +1 -1
- package/dist/esm/input/Gamepad.d.ts +181 -31
- package/dist/esm/input/Gamepad.js +307 -108
- package/dist/esm/input/Gamepad.js.map +1 -1
- package/dist/esm/input/GamepadAxis.d.ts +120 -0
- package/dist/esm/input/GamepadAxis.js +106 -0
- package/dist/esm/input/GamepadAxis.js.map +1 -0
- package/dist/esm/input/GamepadButton.d.ts +110 -0
- package/dist/esm/input/GamepadButton.js +99 -0
- package/dist/esm/input/GamepadButton.js.map +1 -0
- package/dist/esm/input/GamepadDefinitions.d.ts +64 -1
- package/dist/esm/input/GamepadDefinitions.js +44 -1
- package/dist/esm/input/GamepadDefinitions.js.map +1 -1
- package/dist/esm/input/GamepadMapping.d.ts +42 -8
- package/dist/esm/input/GamepadMapping.js +46 -5
- package/dist/esm/input/GamepadMapping.js.map +1 -1
- package/dist/esm/input/GamepadPromptLayouts.d.ts +35 -2
- package/dist/esm/input/GamepadPromptLayouts.js +43 -18
- package/dist/esm/input/GamepadPromptLayouts.js.map +1 -1
- package/dist/esm/input/GenericDualAnalogGamepadMapping.d.ts +13 -0
- package/dist/esm/input/GenericDualAnalogGamepadMapping.js +62 -43
- package/dist/esm/input/GenericDualAnalogGamepadMapping.js.map +1 -1
- package/dist/esm/input/GestureRecognizer.d.ts +11 -2
- package/dist/esm/input/GestureRecognizer.js +11 -2
- package/dist/esm/input/GestureRecognizer.js.map +1 -1
- package/dist/esm/input/InputBinding.d.ts +74 -0
- package/dist/esm/input/InputBinding.js +100 -0
- package/dist/esm/input/InputBinding.js.map +1 -0
- package/dist/esm/input/InputManager.d.ts +100 -21
- package/dist/esm/input/InputManager.js +248 -90
- package/dist/esm/input/InputManager.js.map +1 -1
- package/dist/esm/input/InteractionEvent.d.ts +13 -0
- package/dist/esm/input/InteractionEvent.js +8 -0
- package/dist/esm/input/InteractionEvent.js.map +1 -1
- package/dist/esm/input/InteractionManager.d.ts +34 -5
- package/dist/esm/input/InteractionManager.js +46 -17
- package/dist/esm/input/InteractionManager.js.map +1 -1
- package/dist/esm/input/JoyConLeftGamepadMapping.d.ts +17 -3
- package/dist/esm/input/JoyConLeftGamepadMapping.js +42 -3
- package/dist/esm/input/JoyConLeftGamepadMapping.js.map +1 -1
- package/dist/esm/input/JoyConRightGamepadMapping.d.ts +17 -3
- package/dist/esm/input/JoyConRightGamepadMapping.js +38 -3
- package/dist/esm/input/JoyConRightGamepadMapping.js.map +1 -1
- package/dist/esm/input/PlayStationGamepadMapping.d.ts +8 -0
- package/dist/esm/input/PlayStationGamepadMapping.js +8 -0
- package/dist/esm/input/PlayStationGamepadMapping.js.map +1 -1
- package/dist/esm/input/Pointer.d.ts +106 -71
- package/dist/esm/input/Pointer.js +93 -71
- package/dist/esm/input/Pointer.js.map +1 -1
- package/dist/esm/input/SteamControllerGamepadMapping.d.ts +8 -0
- package/dist/esm/input/SteamControllerGamepadMapping.js +8 -0
- package/dist/esm/input/SteamControllerGamepadMapping.js.map +1 -1
- package/dist/esm/input/SteamDeckGamepadMapping.d.ts +18 -0
- package/dist/esm/input/SteamDeckGamepadMapping.js +76 -0
- package/dist/esm/input/SteamDeckGamepadMapping.js.map +1 -0
- package/dist/esm/input/SwitchProGamepadMapping.d.ts +9 -0
- package/dist/esm/input/SwitchProGamepadMapping.js +9 -0
- package/dist/esm/input/SwitchProGamepadMapping.js.map +1 -1
- package/dist/esm/input/XboxGamepadMapping.d.ts +8 -0
- package/dist/esm/input/XboxGamepadMapping.js +8 -0
- package/dist/esm/input/XboxGamepadMapping.js.map +1 -1
- package/dist/esm/input/index.d.ts +7 -4
- package/dist/esm/input/types.d.ts +17 -73
- package/dist/esm/input/types.js +18 -77
- package/dist/esm/input/types.js.map +1 -1
- package/dist/esm/math/AbstractVector.d.ts +83 -0
- package/dist/esm/math/AbstractVector.js +83 -0
- package/dist/esm/math/AbstractVector.js.map +1 -1
- package/dist/esm/math/Circle.d.ts +32 -0
- package/dist/esm/math/Circle.js +34 -2
- package/dist/esm/math/Circle.js.map +1 -1
- package/dist/esm/math/CircleLike.d.ts +1 -0
- package/dist/esm/math/Collision.d.ts +39 -0
- package/dist/esm/math/Collision.js +5 -0
- package/dist/esm/math/Collision.js.map +1 -1
- package/dist/esm/math/Ellipse.d.ts +11 -0
- package/dist/esm/math/Ellipse.js +18 -2
- package/dist/esm/math/Ellipse.js.map +1 -1
- package/dist/esm/math/EllipseLike.d.ts +3 -0
- package/dist/esm/math/Flags.d.ts +31 -0
- package/dist/esm/math/Flags.js +31 -0
- package/dist/esm/math/Flags.js.map +1 -1
- package/dist/esm/math/Interval.d.ts +15 -0
- package/dist/esm/math/Interval.js +15 -0
- package/dist/esm/math/Interval.js.map +1 -1
- package/dist/esm/math/Line.d.ts +17 -1
- package/dist/esm/math/Line.js +17 -1
- package/dist/esm/math/Line.js.map +1 -1
- package/dist/esm/math/LineLike.d.ts +1 -0
- package/dist/esm/math/Matrix.d.ts +44 -3
- package/dist/esm/math/Matrix.js +44 -3
- package/dist/esm/math/Matrix.js.map +1 -1
- package/dist/esm/math/ObservableSize.d.ts +7 -0
- package/dist/esm/math/ObservableSize.js +7 -0
- package/dist/esm/math/ObservableSize.js.map +1 -1
- package/dist/esm/math/ObservableVector.d.ts +9 -0
- package/dist/esm/math/ObservableVector.js +9 -0
- package/dist/esm/math/ObservableVector.js.map +1 -1
- package/dist/esm/math/PointLike.d.ts +1 -0
- package/dist/esm/math/PolarVector.d.ts +15 -0
- package/dist/esm/math/PolarVector.js +16 -1
- package/dist/esm/math/PolarVector.js.map +1 -1
- package/dist/esm/math/Polygon.d.ts +20 -0
- package/dist/esm/math/Polygon.js +20 -0
- package/dist/esm/math/Polygon.js.map +1 -1
- package/dist/esm/math/PolygonLike.d.ts +4 -0
- package/dist/esm/math/Quadtree.d.ts +40 -3
- package/dist/esm/math/Quadtree.js +39 -3
- package/dist/esm/math/Quadtree.js.map +1 -1
- package/dist/esm/math/Random.d.ts +25 -0
- package/dist/esm/math/Random.js +25 -0
- package/dist/esm/math/Random.js.map +1 -1
- package/dist/esm/math/Rectangle.d.ts +15 -0
- package/dist/esm/math/Rectangle.js +17 -2
- package/dist/esm/math/Rectangle.js.map +1 -1
- package/dist/esm/math/RectangleLike.d.ts +1 -0
- package/dist/esm/math/Segment.d.ts +7 -0
- package/dist/esm/math/Segment.js +7 -0
- package/dist/esm/math/Segment.js.map +1 -1
- package/dist/esm/math/ShapeLike.d.ts +6 -0
- package/dist/esm/math/Size.d.ts +9 -0
- package/dist/esm/math/Size.js +9 -0
- package/dist/esm/math/Size.js.map +1 -1
- package/dist/esm/math/Vector.d.ts +16 -0
- package/dist/esm/math/Vector.js +16 -0
- package/dist/esm/math/Vector.js.map +1 -1
- package/dist/esm/math/collision-detection.d.ts +47 -1
- package/dist/esm/math/collision-detection.js +228 -17
- package/dist/esm/math/collision-detection.js.map +1 -1
- package/dist/esm/math/collision-primitives.d.ts +23 -0
- package/dist/esm/math/collision-primitives.js +23 -0
- package/dist/esm/math/collision-primitives.js.map +1 -1
- package/dist/esm/math/geometry.d.ts +42 -0
- package/dist/esm/math/geometry.js +37 -0
- package/dist/esm/math/geometry.js.map +1 -1
- package/dist/esm/math/utils.d.ts +41 -0
- package/dist/esm/math/utils.js +41 -0
- package/dist/esm/math/utils.js.map +1 -1
- package/dist/esm/particles/Particle.d.ts +37 -0
- package/dist/esm/particles/Particle.js +37 -0
- package/dist/esm/particles/Particle.js.map +1 -1
- package/dist/esm/particles/ParticleProperties.d.ts +15 -0
- package/dist/esm/particles/ParticleSystem.d.ts +69 -0
- package/dist/esm/particles/ParticleSystem.js +69 -0
- package/dist/esm/particles/ParticleSystem.js.map +1 -1
- package/dist/esm/particles/affectors/ColorAffector.d.ts +13 -0
- package/dist/esm/particles/affectors/ColorAffector.js +13 -0
- package/dist/esm/particles/affectors/ColorAffector.js.map +1 -1
- package/dist/esm/particles/affectors/ForceAffector.d.ts +11 -0
- package/dist/esm/particles/affectors/ForceAffector.js +11 -0
- package/dist/esm/particles/affectors/ForceAffector.js.map +1 -1
- package/dist/esm/particles/affectors/ParticleAffector.d.ts +13 -0
- package/dist/esm/particles/affectors/ScaleAffector.d.ts +10 -0
- package/dist/esm/particles/affectors/ScaleAffector.js +10 -0
- package/dist/esm/particles/affectors/ScaleAffector.js.map +1 -1
- package/dist/esm/particles/affectors/TorqueAffector.d.ts +11 -0
- package/dist/esm/particles/affectors/TorqueAffector.js +11 -0
- package/dist/esm/particles/affectors/TorqueAffector.js.map +1 -1
- package/dist/esm/particles/emitters/ParticleEmitter.d.ts +13 -0
- package/dist/esm/particles/emitters/ParticleOptions.d.ts +16 -0
- package/dist/esm/particles/emitters/ParticleOptions.js +16 -0
- package/dist/esm/particles/emitters/ParticleOptions.js.map +1 -1
- package/dist/esm/particles/emitters/UniversalEmitter.d.ts +23 -0
- package/dist/esm/particles/emitters/UniversalEmitter.js +23 -0
- package/dist/esm/particles/emitters/UniversalEmitter.js.map +1 -1
- package/dist/esm/rendering/CallbackRenderPass.d.ts +12 -0
- package/dist/esm/rendering/CallbackRenderPass.js +12 -0
- package/dist/esm/rendering/CallbackRenderPass.js.map +1 -1
- package/dist/esm/rendering/Container.d.ts +43 -0
- package/dist/esm/rendering/Container.js +43 -0
- package/dist/esm/rendering/Container.js.map +1 -1
- package/dist/esm/rendering/Drawable.d.ts +22 -0
- package/dist/esm/rendering/Drawable.js +22 -0
- package/dist/esm/rendering/Drawable.js.map +1 -1
- package/dist/esm/rendering/RenderBackend.d.ts +13 -0
- package/dist/esm/rendering/RenderBackendType.d.ts +4 -0
- package/dist/esm/rendering/RenderBackendType.js +4 -0
- package/dist/esm/rendering/RenderBackendType.js.map +1 -1
- package/dist/esm/rendering/RenderNode.d.ts +18 -0
- package/dist/esm/rendering/RenderNode.js +18 -0
- package/dist/esm/rendering/RenderNode.js.map +1 -1
- package/dist/esm/rendering/RenderPass.d.ts +8 -0
- package/dist/esm/rendering/RenderStats.d.ts +19 -0
- package/dist/esm/rendering/RenderStats.js +7 -0
- package/dist/esm/rendering/RenderStats.js.map +1 -1
- package/dist/esm/rendering/RenderTarget.d.ts +17 -0
- package/dist/esm/rendering/RenderTarget.js +17 -0
- package/dist/esm/rendering/RenderTarget.js.map +1 -1
- package/dist/esm/rendering/RenderTargetPass.d.ts +11 -0
- package/dist/esm/rendering/RenderTargetPass.js +7 -0
- package/dist/esm/rendering/RenderTargetPass.js.map +1 -1
- package/dist/esm/rendering/Renderer.d.ts +15 -0
- package/dist/esm/rendering/RendererRegistry.d.ts +7 -0
- package/dist/esm/rendering/RendererRegistry.js +7 -0
- package/dist/esm/rendering/RendererRegistry.js.map +1 -1
- package/dist/esm/rendering/View.d.ts +67 -2
- package/dist/esm/rendering/View.js +57 -0
- package/dist/esm/rendering/View.js.map +1 -1
- package/dist/esm/rendering/filters/BlurFilter.d.ts +9 -0
- package/dist/esm/rendering/filters/BlurFilter.js +8 -0
- package/dist/esm/rendering/filters/BlurFilter.js.map +1 -1
- package/dist/esm/rendering/filters/ColorFilter.d.ts +7 -0
- package/dist/esm/rendering/filters/ColorFilter.js +7 -0
- package/dist/esm/rendering/filters/ColorFilter.js.map +1 -1
- package/dist/esm/rendering/filters/Filter.d.ts +23 -0
- package/dist/esm/rendering/filters/Filter.js +20 -0
- package/dist/esm/rendering/filters/Filter.js.map +1 -1
- package/dist/esm/rendering/filters/WebGl2ShaderFilter.d.ts +5 -0
- package/dist/esm/rendering/filters/WebGl2ShaderFilter.js +5 -0
- package/dist/esm/rendering/filters/WebGl2ShaderFilter.js.map +1 -1
- package/dist/esm/rendering/filters/WebGpuShaderFilter.d.ts +5 -0
- package/dist/esm/rendering/filters/WebGpuShaderFilter.js +5 -0
- package/dist/esm/rendering/filters/WebGpuShaderFilter.js.map +1 -1
- package/dist/esm/rendering/mesh/Mesh.d.ts +2 -0
- package/dist/esm/rendering/mesh/Mesh.js +2 -0
- package/dist/esm/rendering/mesh/Mesh.js.map +1 -1
- package/dist/esm/rendering/primitives/Graphics.d.ts +34 -0
- package/dist/esm/rendering/primitives/Graphics.js +34 -0
- package/dist/esm/rendering/primitives/Graphics.js.map +1 -1
- package/dist/esm/rendering/shader/Shader.d.ts +36 -0
- package/dist/esm/rendering/shader/Shader.js +26 -0
- package/dist/esm/rendering/shader/Shader.js.map +1 -1
- package/dist/esm/rendering/shader/ShaderAttribute.d.ts +13 -0
- package/dist/esm/rendering/shader/ShaderAttribute.js +13 -0
- package/dist/esm/rendering/shader/ShaderAttribute.js.map +1 -1
- package/dist/esm/rendering/shader/ShaderUniform.d.ts +27 -0
- package/dist/esm/rendering/shader/ShaderUniform.js +28 -1
- package/dist/esm/rendering/shader/ShaderUniform.js.map +1 -1
- package/dist/esm/rendering/sprite/AnimatedSprite.d.ts +38 -0
- package/dist/esm/rendering/sprite/AnimatedSprite.js +36 -0
- package/dist/esm/rendering/sprite/AnimatedSprite.js.map +1 -1
- package/dist/esm/rendering/sprite/Sprite.d.ts +56 -0
- package/dist/esm/rendering/sprite/Sprite.js +56 -0
- package/dist/esm/rendering/sprite/Sprite.js.map +1 -1
- package/dist/esm/rendering/sprite/Spritesheet.d.ts +25 -0
- package/dist/esm/rendering/sprite/Spritesheet.js +20 -0
- package/dist/esm/rendering/sprite/Spritesheet.js.map +1 -1
- package/dist/esm/rendering/text/Text.d.ts +2 -0
- package/dist/esm/rendering/text/Text.js +2 -0
- package/dist/esm/rendering/text/Text.js.map +1 -1
- package/dist/esm/rendering/text/TextStyle.d.ts +29 -0
- package/dist/esm/rendering/text/TextStyle.js +24 -0
- package/dist/esm/rendering/text/TextStyle.js.map +1 -1
- package/dist/esm/rendering/text/types.d.ts +1 -0
- package/dist/esm/rendering/texture/RenderTexture.d.ts +16 -0
- package/dist/esm/rendering/texture/RenderTexture.js +16 -0
- package/dist/esm/rendering/texture/RenderTexture.js.map +1 -1
- package/dist/esm/rendering/texture/Sampler.d.ts +23 -0
- package/dist/esm/rendering/texture/Sampler.js +13 -0
- package/dist/esm/rendering/texture/Sampler.js.map +1 -1
- package/dist/esm/rendering/texture/Texture.d.ts +30 -0
- package/dist/esm/rendering/texture/Texture.js +30 -0
- package/dist/esm/rendering/texture/Texture.js.map +1 -1
- package/dist/esm/rendering/types.d.ts +29 -0
- package/dist/esm/rendering/types.js +29 -0
- package/dist/esm/rendering/types.js.map +1 -1
- package/dist/esm/rendering/utils.d.ts +20 -0
- package/dist/esm/rendering/utils.js +10 -0
- package/dist/esm/rendering/utils.js.map +1 -1
- package/dist/esm/rendering/video/Video.d.ts +35 -1
- package/dist/esm/rendering/video/Video.js +36 -2
- package/dist/esm/rendering/video/Video.js.map +1 -1
- package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.d.ts +7 -0
- package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.js +7 -0
- package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2Backend.d.ts +13 -0
- package/dist/esm/rendering/webgl2/WebGl2Backend.js +13 -0
- package/dist/esm/rendering/webgl2/WebGl2Backend.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.d.ts +8 -0
- package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.js +8 -0
- package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuBackend.d.ts +35 -0
- package/dist/esm/rendering/webgpu/WebGpuBackend.js +135 -5
- package/dist/esm/rendering/webgpu/WebGpuBackend.js.map +1 -1
- package/dist/esm/resources/AbstractAssetFactory.d.ts +20 -0
- package/dist/esm/resources/AbstractAssetFactory.js +20 -0
- package/dist/esm/resources/AbstractAssetFactory.js.map +1 -1
- package/dist/esm/resources/AssetFactory.d.ts +26 -0
- package/dist/esm/resources/AssetManifest.d.ts +45 -0
- package/dist/esm/resources/AssetManifest.js +25 -0
- package/dist/esm/resources/AssetManifest.js.map +1 -1
- package/dist/esm/resources/CacheFirstStrategy.d.ts +15 -0
- package/dist/esm/resources/CacheFirstStrategy.js +19 -4
- package/dist/esm/resources/CacheFirstStrategy.js.map +1 -1
- package/dist/esm/resources/CacheStore.d.ts +23 -0
- package/dist/esm/resources/CacheStrategy.d.ts +28 -0
- package/dist/esm/resources/Database.d.ts +45 -0
- package/dist/esm/resources/FactoryRegistry.d.ts +28 -0
- package/dist/esm/resources/FactoryRegistry.js +24 -0
- package/dist/esm/resources/FactoryRegistry.js.map +1 -1
- package/dist/esm/resources/IndexedDbDatabase.d.ts +22 -1
- package/dist/esm/resources/IndexedDbDatabase.js +21 -0
- package/dist/esm/resources/IndexedDbDatabase.js.map +1 -1
- package/dist/esm/resources/IndexedDbStore.d.ts +20 -0
- package/dist/esm/resources/IndexedDbStore.js +12 -0
- package/dist/esm/resources/IndexedDbStore.js.map +1 -1
- package/dist/esm/resources/Loader.d.ts +172 -0
- package/dist/esm/resources/Loader.js +129 -37
- package/dist/esm/resources/Loader.js.map +1 -1
- package/dist/esm/resources/NetworkOnlyStrategy.d.ts +11 -0
- package/dist/esm/resources/NetworkOnlyStrategy.js +16 -3
- package/dist/esm/resources/NetworkOnlyStrategy.js.map +1 -1
- package/dist/esm/resources/factories/BinaryFactory.d.ts +13 -0
- package/dist/esm/resources/factories/BinaryFactory.js +13 -0
- package/dist/esm/resources/factories/BinaryFactory.js.map +1 -1
- package/dist/esm/resources/factories/FontFactory.d.ts +37 -0
- package/dist/esm/resources/factories/FontFactory.js +26 -0
- package/dist/esm/resources/factories/FontFactory.js.map +1 -1
- package/dist/esm/resources/factories/ImageFactory.d.ts +26 -2
- package/dist/esm/resources/factories/ImageFactory.js +19 -0
- package/dist/esm/resources/factories/ImageFactory.js.map +1 -1
- package/dist/esm/resources/factories/JsonFactory.d.ts +13 -0
- package/dist/esm/resources/factories/JsonFactory.js +13 -0
- package/dist/esm/resources/factories/JsonFactory.js.map +1 -1
- package/dist/esm/resources/factories/MusicFactory.d.ts +36 -0
- package/dist/esm/resources/factories/MusicFactory.js +44 -4
- package/dist/esm/resources/factories/MusicFactory.js.map +1 -1
- package/dist/esm/resources/factories/SoundFactory.d.ts +29 -0
- package/dist/esm/resources/factories/SoundFactory.js +18 -0
- package/dist/esm/resources/factories/SoundFactory.js.map +1 -1
- package/dist/esm/resources/factories/SvgFactory.d.ts +19 -0
- package/dist/esm/resources/factories/SvgFactory.js +19 -0
- package/dist/esm/resources/factories/SvgFactory.js.map +1 -1
- package/dist/esm/resources/factories/TextFactory.d.ts +11 -0
- package/dist/esm/resources/factories/TextFactory.js +11 -0
- package/dist/esm/resources/factories/TextFactory.js.map +1 -1
- package/dist/esm/resources/factories/TextureFactory.d.ts +27 -2
- package/dist/esm/resources/factories/TextureFactory.js +20 -0
- package/dist/esm/resources/factories/TextureFactory.js.map +1 -1
- package/dist/esm/resources/factories/VideoFactory.d.ts +37 -0
- package/dist/esm/resources/factories/VideoFactory.js +48 -5
- package/dist/esm/resources/factories/VideoFactory.js.map +1 -1
- package/dist/esm/resources/factories/VttFactory.d.ts +18 -0
- package/dist/esm/resources/factories/VttFactory.js +104 -3
- package/dist/esm/resources/factories/VttFactory.js.map +1 -1
- package/dist/esm/resources/factories/WasmFactory.d.ts +16 -0
- package/dist/esm/resources/factories/WasmFactory.js +16 -0
- package/dist/esm/resources/factories/WasmFactory.js.map +1 -1
- package/dist/esm/resources/utils.d.ts +10 -0
- package/dist/esm/resources/utils.js +10 -0
- package/dist/esm/resources/utils.js.map +1 -1
- package/dist/exo.esm.js +4673 -745
- package/dist/exo.esm.js.map +1 -1
- package/package.json +8 -8
- package/dist/esm/input/GamepadChannels.d.ts +0 -39
- package/dist/esm/input/GamepadChannels.js +0 -45
- package/dist/esm/input/GamepadChannels.js.map +0 -1
- package/dist/esm/input/GamepadControl.d.ts +0 -15
- package/dist/esm/input/GamepadControl.js +0 -29
- package/dist/esm/input/GamepadControl.js.map +0 -1
- package/dist/esm/input/Input.d.ts +0 -28
- package/dist/esm/input/Input.js +0 -68
- package/dist/esm/input/Input.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HighpassFilter.js","sources":["../../../../../src/audio/filters/HighpassFilter.ts"],"sourcesContent":[null],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"HighpassFilter.js","sources":["../../../../../src/audio/filters/HighpassFilter.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AASA;;;;;;AAMG;AACG,MAAO,cAAe,SAAQ,WAAW,CAAA;IACnC,KAAK,GAA4B,IAAI;AACrC,IAAA,UAAU;AACV,IAAA,UAAU;AAElB,IAAA,WAAA,CAAmB,UAAiC,EAAE,EAAA;AAClD,QAAA,KAAK,EAAE;QACP,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI;QAC3C,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC;QACxC,IAAI,mBAAmB,EAAE,EAAE;AACvB,YAAA,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;QAClC;aAAO;YACH,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;QAC/C;IACJ;AAEA,IAAA,IAAW,SAAS,GAAA;QAChB,IAAI,CAAC,IAAI,CAAC,KAAK;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC;QACvE,OAAO,IAAI,CAAC,KAAK;IACrB;AAEA,IAAA,IAAW,UAAU,GAAA;QACjB,IAAI,CAAC,IAAI,CAAC,KAAK;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC;QACvE,OAAO,IAAI,CAAC,KAAK;IACrB;;AAGA,IAAA,IAAW,SAAS,GAAA;QAChB,OAAO,IAAI,CAAC,UAAU;IAC1B;IAEA,IAAW,SAAS,CAAC,KAAa,EAAA;AAC9B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACtD,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACZ,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC;QAC/F;IACJ;;AAGA,IAAA,IAAW,SAAS,GAAA;QAChB,OAAO,IAAI,CAAC,UAAU;IAC1B;IAEA,IAAW,SAAS,CAAC,KAAa,EAAA;QAC9B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC;AACzC,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACZ,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC;QACvF;IACJ;IAEgB,OAAO,GAAA;AACnB,QAAA,mBAAmB,CAAC,cAAc,CAAC,IAAI,CAAC;AACxC,QAAA,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE;AACxB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;IACrB;AAEQ,IAAA,MAAM,CAAC,GAAiB,EAAA;AAC5B,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,kBAAkB,EAAE;AACrC,QAAA,IAAI,CAAC,IAAI,GAAG,UAAU;AACtB,QAAA,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,WAAW,CAAC;AAC/D,QAAA,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,WAAW,CAAC;AACvD,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;IACrB;AACH;;;;"}
|
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
import { AudioFilter } from '../AudioFilter';
|
|
2
|
+
/** Construction options for {@link LowpassFilter}. */
|
|
2
3
|
export interface LowpassFilterOptions {
|
|
3
4
|
frequency?: number;
|
|
4
5
|
resonance?: number;
|
|
5
6
|
}
|
|
7
|
+
/**
|
|
8
|
+
* Low-pass filter backed by a `BiquadFilterNode` in `lowpass` mode.
|
|
9
|
+
* Attenuates frequencies above the cutoff and passes everything below it.
|
|
10
|
+
* Useful for muffling audio (e.g., sound heard through a wall), taming
|
|
11
|
+
* harsh high-frequency content, or creating underwater/telephone effects.
|
|
12
|
+
* The `resonance` (Q) parameter controls the sharpness of the roll-off peak.
|
|
13
|
+
*/
|
|
6
14
|
export declare class LowpassFilter extends AudioFilter {
|
|
7
15
|
private _node;
|
|
8
16
|
private _frequency;
|
|
@@ -10,8 +18,10 @@ export declare class LowpassFilter extends AudioFilter {
|
|
|
10
18
|
constructor(options?: LowpassFilterOptions);
|
|
11
19
|
get inputNode(): AudioNode;
|
|
12
20
|
get outputNode(): AudioNode;
|
|
21
|
+
/** Cutoff frequency in Hz. Signals above this frequency are attenuated. Range 20..20000, default 1000. */
|
|
13
22
|
get frequency(): number;
|
|
14
23
|
set frequency(value: number);
|
|
24
|
+
/** Q (resonance) at the cutoff. Higher values create a sharper, resonant peak. Minimum 0.0001, default 1. */
|
|
15
25
|
get resonance(): number;
|
|
16
26
|
set resonance(value: number);
|
|
17
27
|
destroy(): void;
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import { isAudioContextReady, getAudioContext, onAudioContextReady } from '../audio-context.js';
|
|
2
2
|
import { AudioFilter } from '../AudioFilter.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Low-pass filter backed by a `BiquadFilterNode` in `lowpass` mode.
|
|
6
|
+
* Attenuates frequencies above the cutoff and passes everything below it.
|
|
7
|
+
* Useful for muffling audio (e.g., sound heard through a wall), taming
|
|
8
|
+
* harsh high-frequency content, or creating underwater/telephone effects.
|
|
9
|
+
* The `resonance` (Q) parameter controls the sharpness of the roll-off peak.
|
|
10
|
+
*/
|
|
4
11
|
class LowpassFilter extends AudioFilter {
|
|
5
12
|
_node = null;
|
|
6
13
|
_frequency;
|
|
@@ -26,6 +33,7 @@ class LowpassFilter extends AudioFilter {
|
|
|
26
33
|
throw new Error('LowpassFilter not yet initialized.');
|
|
27
34
|
return this._node;
|
|
28
35
|
}
|
|
36
|
+
/** Cutoff frequency in Hz. Signals above this frequency are attenuated. Range 20..20000, default 1000. */
|
|
29
37
|
get frequency() {
|
|
30
38
|
return this._frequency;
|
|
31
39
|
}
|
|
@@ -35,6 +43,7 @@ class LowpassFilter extends AudioFilter {
|
|
|
35
43
|
this._node.frequency.setTargetAtTime(this._frequency, this._node.context.currentTime, 0.01);
|
|
36
44
|
}
|
|
37
45
|
}
|
|
46
|
+
/** Q (resonance) at the cutoff. Higher values create a sharper, resonant peak. Minimum 0.0001, default 1. */
|
|
38
47
|
get resonance() {
|
|
39
48
|
return this._resonance;
|
|
40
49
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LowpassFilter.js","sources":["../../../../../src/audio/filters/LowpassFilter.ts"],"sourcesContent":[null],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"LowpassFilter.js","sources":["../../../../../src/audio/filters/LowpassFilter.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AASA;;;;;;AAMG;AACG,MAAO,aAAc,SAAQ,WAAW,CAAA;IAClC,KAAK,GAA4B,IAAI;AACrC,IAAA,UAAU;AACV,IAAA,UAAU;AAElB,IAAA,WAAA,CAAmB,UAAgC,EAAE,EAAA;AACjD,QAAA,KAAK,EAAE;QACP,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI;QAC3C,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC;QACxC,IAAI,mBAAmB,EAAE,EAAE;AACvB,YAAA,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;QAClC;aAAO;YACH,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;QAC/C;IACJ;AAEA,IAAA,IAAW,SAAS,GAAA;QAChB,IAAI,CAAC,IAAI,CAAC,KAAK;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC;QACtE,OAAO,IAAI,CAAC,KAAK;IACrB;AAEA,IAAA,IAAW,UAAU,GAAA;QACjB,IAAI,CAAC,IAAI,CAAC,KAAK;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC;QACtE,OAAO,IAAI,CAAC,KAAK;IACrB;;AAGA,IAAA,IAAW,SAAS,GAAA;QAChB,OAAO,IAAI,CAAC,UAAU;IAC1B;IAEA,IAAW,SAAS,CAAC,KAAa,EAAA;AAC9B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACtD,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACZ,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC;QAC/F;IACJ;;AAGA,IAAA,IAAW,SAAS,GAAA;QAChB,OAAO,IAAI,CAAC,UAAU;IAC1B;IAEA,IAAW,SAAS,CAAC,KAAa,EAAA;QAC9B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC;AACzC,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACZ,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC;QACvF;IACJ;IAEgB,OAAO,GAAA;AACnB,QAAA,mBAAmB,CAAC,cAAc,CAAC,IAAI,CAAC;AACxC,QAAA,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE;AACxB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;IACrB;AAEQ,IAAA,MAAM,CAAC,GAAiB,EAAA;AAC5B,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,kBAAkB,EAAE;AACrC,QAAA,IAAI,CAAC,IAAI,GAAG,SAAS;AACrB,QAAA,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,WAAW,CAAC;AAC/D,QAAA,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,WAAW,CAAC;AACvD,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;IACrB;AACH;;;;"}
|
|
@@ -35,8 +35,10 @@ export declare class PitchShiftFilter extends WorkletFilter {
|
|
|
35
35
|
protected get _workletSource(): string;
|
|
36
36
|
protected get _workletOptions(): AudioWorkletNodeOptions;
|
|
37
37
|
protected _onWorkletReady(): void;
|
|
38
|
+
/** Pitch ratio relative to the original. 1.0 = no change, 0.5 = one octave down, 2.0 = one octave up. Range 0.25..4.0, default 1.0. */
|
|
38
39
|
get pitch(): number;
|
|
39
40
|
set pitch(value: number);
|
|
41
|
+
/** Wet (pitch-shifted) mix level, 0..1. Default 1.0 (full wet). */
|
|
40
42
|
get wet(): number;
|
|
41
43
|
set wet(value: number);
|
|
42
44
|
}
|
|
@@ -114,11 +114,13 @@ class PitchShiftFilter extends WorkletFilter {
|
|
|
114
114
|
this._setAudioParam('pitch', this._pitch);
|
|
115
115
|
this._setAudioParam('wet', this._wet);
|
|
116
116
|
}
|
|
117
|
+
/** Pitch ratio relative to the original. 1.0 = no change, 0.5 = one octave down, 2.0 = one octave up. Range 0.25..4.0, default 1.0. */
|
|
117
118
|
get pitch() { return this._pitch; }
|
|
118
119
|
set pitch(value) {
|
|
119
120
|
this._pitch = Math.max(0.25, Math.min(4.0, value));
|
|
120
121
|
this._setAudioParam('pitch', this._pitch);
|
|
121
122
|
}
|
|
123
|
+
/** Wet (pitch-shifted) mix level, 0..1. Default 1.0 (full wet). */
|
|
122
124
|
get wet() { return this._wet; }
|
|
123
125
|
set wet(value) {
|
|
124
126
|
this._wet = Math.max(0, Math.min(1.0, value));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PitchShiftFilter.js","sources":["../../../../../src/audio/filters/PitchShiftFilter.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAEA,MAAM,uBAAuB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsE/B;AAcD;;;;;;;;;;;;;;;AAeG;AACG,MAAO,gBAAiB,SAAQ,aAAa,CAAA;AACvC,IAAA,MAAM;AACN,IAAA,IAAI;AACK,IAAA,UAAU;AAE3B,IAAA,WAAA,CAAmB,UAAmC,EAAE,EAAA;AACpD,QAAA,KAAK,EAAE;QACP,IAAI,CAAC,MAAM,GAAO,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC;QACrE,IAAI,CAAC,IAAI,GAAS,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;QAChE,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI;IAC/C;AAEA,IAAA,IAAc,YAAY,GAAA;AACtB,QAAA,OAAO,mBAAmB;IAC9B;AAEA,IAAA,IAAc,cAAc,GAAA;AACxB,QAAA,OAAO,uBAAuB;IAClC;AAEA,IAAA,IAAuB,eAAe,GAAA;QAClC,OAAO;AACH,YAAA,cAAc,EAAE,CAAC;AACjB,YAAA,eAAe,EAAE,CAAC;AAClB,YAAA,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE;SACnD;IACL;IAEmB,eAAe,GAAA;QAC9B,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC;QACzC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC;IACzC
|
|
1
|
+
{"version":3,"file":"PitchShiftFilter.js","sources":["../../../../../src/audio/filters/PitchShiftFilter.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAEA,MAAM,uBAAuB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsE/B;AAcD;;;;;;;;;;;;;;;AAeG;AACG,MAAO,gBAAiB,SAAQ,aAAa,CAAA;AACvC,IAAA,MAAM;AACN,IAAA,IAAI;AACK,IAAA,UAAU;AAE3B,IAAA,WAAA,CAAmB,UAAmC,EAAE,EAAA;AACpD,QAAA,KAAK,EAAE;QACP,IAAI,CAAC,MAAM,GAAO,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC;QACrE,IAAI,CAAC,IAAI,GAAS,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;QAChE,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI;IAC/C;AAEA,IAAA,IAAc,YAAY,GAAA;AACtB,QAAA,OAAO,mBAAmB;IAC9B;AAEA,IAAA,IAAc,cAAc,GAAA;AACxB,QAAA,OAAO,uBAAuB;IAClC;AAEA,IAAA,IAAuB,eAAe,GAAA;QAClC,OAAO;AACH,YAAA,cAAc,EAAE,CAAC;AACjB,YAAA,eAAe,EAAE,CAAC;AAClB,YAAA,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE;SACnD;IACL;IAEmB,eAAe,GAAA;QAC9B,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC;QACzC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC;IACzC;;IAGA,IAAW,KAAK,KAAa,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;IACjD,IAAW,KAAK,CAAC,KAAa,EAAA;AAC1B,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAClD,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC;IAC7C;;IAGA,IAAW,GAAG,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAW,GAAG,CAAC,KAAa,EAAA;AACxB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC;IACzC;AACH;;;;"}
|
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
import { AudioFilter } from '../AudioFilter';
|
|
2
|
+
/** Construction options for {@link ReverbFilter}. */
|
|
2
3
|
export interface ReverbFilterOptions {
|
|
3
4
|
durationSeconds?: number;
|
|
4
5
|
decay?: number;
|
|
5
6
|
wet?: number;
|
|
6
7
|
}
|
|
8
|
+
/**
|
|
9
|
+
* Convolution reverb using a procedurally-generated impulse response loaded
|
|
10
|
+
* into a `ConvolverNode`. The impulse response is a stereo noise burst whose
|
|
11
|
+
* amplitude decays exponentially, simulating room reflections. Adjusting
|
|
12
|
+
* `durationSeconds` or `decay` rebuilds the impulse response immediately, so
|
|
13
|
+
* avoid animating these properties at audio rate — use `wet` for real-time
|
|
14
|
+
* mix control instead.
|
|
15
|
+
*/
|
|
7
16
|
export declare class ReverbFilter extends AudioFilter {
|
|
8
17
|
private _setup;
|
|
9
18
|
private _duration;
|
|
@@ -12,10 +21,13 @@ export declare class ReverbFilter extends AudioFilter {
|
|
|
12
21
|
constructor(options?: ReverbFilterOptions);
|
|
13
22
|
get inputNode(): AudioNode;
|
|
14
23
|
get outputNode(): AudioNode;
|
|
24
|
+
/** Length of the generated impulse response in seconds. Range 0.1..5, default 2. Changing this rebuilds the IR buffer. */
|
|
15
25
|
get durationSeconds(): number;
|
|
16
26
|
set durationSeconds(value: number);
|
|
27
|
+
/** Exponential decay rate of the impulse response. Higher values produce a tighter, drier reverb tail. Range 0.5..10, default 2. Changing this rebuilds the IR buffer. */
|
|
17
28
|
get decay(): number;
|
|
18
29
|
set decay(value: number);
|
|
30
|
+
/** Wet (reverberated) mix level, 0..1. The dry level is automatically `1 - wet`. Default 0.4. */
|
|
19
31
|
get wet(): number;
|
|
20
32
|
set wet(value: number);
|
|
21
33
|
destroy(): void;
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import { isAudioContextReady, getAudioContext, onAudioContextReady } from '../audio-context.js';
|
|
2
2
|
import { AudioFilter } from '../AudioFilter.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Convolution reverb using a procedurally-generated impulse response loaded
|
|
6
|
+
* into a `ConvolverNode`. The impulse response is a stereo noise burst whose
|
|
7
|
+
* amplitude decays exponentially, simulating room reflections. Adjusting
|
|
8
|
+
* `durationSeconds` or `decay` rebuilds the impulse response immediately, so
|
|
9
|
+
* avoid animating these properties at audio rate — use `wet` for real-time
|
|
10
|
+
* mix control instead.
|
|
11
|
+
*/
|
|
4
12
|
class ReverbFilter extends AudioFilter {
|
|
5
13
|
_setup = null;
|
|
6
14
|
_duration;
|
|
@@ -28,6 +36,7 @@ class ReverbFilter extends AudioFilter {
|
|
|
28
36
|
throw new Error('ReverbFilter not yet initialized.');
|
|
29
37
|
return this._setup.outputGain;
|
|
30
38
|
}
|
|
39
|
+
/** Length of the generated impulse response in seconds. Range 0.1..5, default 2. Changing this rebuilds the IR buffer. */
|
|
31
40
|
get durationSeconds() {
|
|
32
41
|
return this._duration;
|
|
33
42
|
}
|
|
@@ -37,6 +46,7 @@ class ReverbFilter extends AudioFilter {
|
|
|
37
46
|
this._setup.convolver.buffer = this._generateImpulseResponse(this._setup.convolver.context);
|
|
38
47
|
}
|
|
39
48
|
}
|
|
49
|
+
/** Exponential decay rate of the impulse response. Higher values produce a tighter, drier reverb tail. Range 0.5..10, default 2. Changing this rebuilds the IR buffer. */
|
|
40
50
|
get decay() {
|
|
41
51
|
return this._decay;
|
|
42
52
|
}
|
|
@@ -46,6 +56,7 @@ class ReverbFilter extends AudioFilter {
|
|
|
46
56
|
this._setup.convolver.buffer = this._generateImpulseResponse(this._setup.convolver.context);
|
|
47
57
|
}
|
|
48
58
|
}
|
|
59
|
+
/** Wet (reverberated) mix level, 0..1. The dry level is automatically `1 - wet`. Default 0.4. */
|
|
49
60
|
get wet() {
|
|
50
61
|
return this._wet;
|
|
51
62
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReverbFilter.js","sources":["../../../../../src/audio/filters/ReverbFilter.ts"],"sourcesContent":[null],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"ReverbFilter.js","sources":["../../../../../src/audio/filters/ReverbFilter.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,15 @@ export interface VocoderFilterOptions {
|
|
|
18
18
|
* Smaller = smoother / slower. Default 0.005. */
|
|
19
19
|
envelopeSmoothing?: number;
|
|
20
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* Phase-vocoder-style effect implemented as a {@link WorkletFilter}. Analyzes
|
|
23
|
+
* the spectral envelope of a `modulator` {@link AudioBus} across a bank of
|
|
24
|
+
* log-spaced bandpass filters and applies that envelope to the carrier signal
|
|
25
|
+
* (the main input). The result is the classic "robot voice" or talking-synth
|
|
26
|
+
* effect. Band count, frequency range, and Q are compile-time parameters set
|
|
27
|
+
* at construction; only `wet` and `envelopeSmoothing` are adjustable at
|
|
28
|
+
* runtime.
|
|
29
|
+
*/
|
|
21
30
|
export declare class VocoderFilter extends WorkletFilter {
|
|
22
31
|
private readonly _modulator;
|
|
23
32
|
private readonly _numBands;
|
|
@@ -31,8 +40,10 @@ export declare class VocoderFilter extends WorkletFilter {
|
|
|
31
40
|
protected get _workletSource(): string;
|
|
32
41
|
protected get _workletOptions(): AudioWorkletNodeOptions;
|
|
33
42
|
protected _onWorkletReady(audioContext: AudioContext): void;
|
|
43
|
+
/** Wet (vocoded) mix level, 0..1. Default 1.0. */
|
|
34
44
|
get wet(): number;
|
|
35
45
|
set wet(value: number);
|
|
46
|
+
/** One-pole envelope follower coefficient. Smaller values produce slower, smoother envelope tracking. Range 0.0001..0.1, default 0.005. */
|
|
36
47
|
get envelopeSmoothing(): number;
|
|
37
48
|
set envelopeSmoothing(value: number);
|
|
38
49
|
}
|
|
@@ -89,6 +89,15 @@ class VocoderProcessor extends AudioWorkletProcessor {
|
|
|
89
89
|
}
|
|
90
90
|
registerProcessor('exojs-vocoder', VocoderProcessor);
|
|
91
91
|
`;
|
|
92
|
+
/**
|
|
93
|
+
* Phase-vocoder-style effect implemented as a {@link WorkletFilter}. Analyzes
|
|
94
|
+
* the spectral envelope of a `modulator` {@link AudioBus} across a bank of
|
|
95
|
+
* log-spaced bandpass filters and applies that envelope to the carrier signal
|
|
96
|
+
* (the main input). The result is the classic "robot voice" or talking-synth
|
|
97
|
+
* effect. Band count, frequency range, and Q are compile-time parameters set
|
|
98
|
+
* at construction; only `wet` and `envelopeSmoothing` are adjustable at
|
|
99
|
+
* runtime.
|
|
100
|
+
*/
|
|
92
101
|
class VocoderFilter extends WorkletFilter {
|
|
93
102
|
// Declared nullable because super() may trigger _onWorkletReady before the
|
|
94
103
|
// subclass constructor body runs (if construction is aborted by a throw).
|
|
@@ -147,11 +156,13 @@ class VocoderFilter extends WorkletFilter {
|
|
|
147
156
|
});
|
|
148
157
|
}
|
|
149
158
|
}
|
|
159
|
+
/** Wet (vocoded) mix level, 0..1. Default 1.0. */
|
|
150
160
|
get wet() { return this._wet; }
|
|
151
161
|
set wet(value) {
|
|
152
162
|
this._wet = Math.max(0, Math.min(1, value));
|
|
153
163
|
this._setAudioParam('wet', this._wet);
|
|
154
164
|
}
|
|
165
|
+
/** One-pole envelope follower coefficient. Smaller values produce slower, smoother envelope tracking. Range 0.0001..0.1, default 0.005. */
|
|
155
166
|
get envelopeSmoothing() { return this._envelopeSmoothing; }
|
|
156
167
|
set envelopeSmoothing(value) {
|
|
157
168
|
this._envelopeSmoothing = Math.max(0.0001, Math.min(0.1, value));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VocoderFilter.js","sources":["../../../../../src/audio/filters/VocoderFilter.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAGA,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwF5B;
|
|
1
|
+
{"version":3,"file":"VocoderFilter.js","sources":["../../../../../src/audio/filters/VocoderFilter.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -33,6 +33,7 @@ export declare abstract class WorkletFilter extends AudioFilter {
|
|
|
33
33
|
* that depend on the worklet node.
|
|
34
34
|
*/
|
|
35
35
|
get ready(): Promise<void>;
|
|
36
|
+
/** Disconnects all nodes, cancels any pending worklet load, and releases resources. */
|
|
36
37
|
destroy(): void;
|
|
37
38
|
/**
|
|
38
39
|
* Subclass hook — called once when the worklet has loaded and the
|
|
@@ -40,7 +41,11 @@ export declare abstract class WorkletFilter extends AudioFilter {
|
|
|
40
41
|
* wiring (e.g., connecting a sidechain input).
|
|
41
42
|
*/
|
|
42
43
|
protected _onWorkletReady?(audioContext: AudioContext): void;
|
|
43
|
-
/**
|
|
44
|
+
/**
|
|
45
|
+
* Ramps an `AudioParam` on the underlying `AudioWorkletNode` to `value`
|
|
46
|
+
* using a short exponential ramp. No-ops if the worklet is not yet loaded.
|
|
47
|
+
* @internal
|
|
48
|
+
*/
|
|
44
49
|
protected _setAudioParam(name: string, value: number): void;
|
|
45
50
|
private _setup;
|
|
46
51
|
}
|
|
@@ -54,6 +54,7 @@ class WorkletFilter extends AudioFilter {
|
|
|
54
54
|
get ready() {
|
|
55
55
|
return this._ready ?? Promise.resolve();
|
|
56
56
|
}
|
|
57
|
+
/** Disconnects all nodes, cancels any pending worklet load, and releases resources. */
|
|
57
58
|
destroy() {
|
|
58
59
|
onAudioContextReady.clearByContext(this);
|
|
59
60
|
this._workletNode?.disconnect();
|
|
@@ -64,7 +65,11 @@ class WorkletFilter extends AudioFilter {
|
|
|
64
65
|
this._outputGain = null;
|
|
65
66
|
this._ready = null;
|
|
66
67
|
}
|
|
67
|
-
/**
|
|
68
|
+
/**
|
|
69
|
+
* Ramps an `AudioParam` on the underlying `AudioWorkletNode` to `value`
|
|
70
|
+
* using a short exponential ramp. No-ops if the worklet is not yet loaded.
|
|
71
|
+
* @internal
|
|
72
|
+
*/
|
|
68
73
|
_setAudioParam(name, value) {
|
|
69
74
|
if (!this._workletNode)
|
|
70
75
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkletFilter.js","sources":["../../../../../src/audio/filters/WorkletFilter.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAIA;;;;;;;;;;;;;AAaG;AACG,MAAgB,aAAc,SAAQ,WAAW,CAAA;IACzC,UAAU,GAAoB,IAAI;IAClC,WAAW,GAAoB,IAAI;IACnC,YAAY,GAA4B,IAAI;IAC5C,MAAM,GAAyB,IAAI;;AAO7C,IAAA,IAAc,eAAe,GAAA;QACzB,OAAO,EAAE,cAAc,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE;IACpD;AAEA,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;QACP,IAAI,mBAAmB,EAAE,EAAE;AACvB,YAAA,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;QAClC;aAAO;YACH,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;QAC/C;IACJ;AAEA,IAAA,IAAW,SAAS,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClB,MAAM,IAAI,KAAK,CAAC,CAAA,EAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAA,oDAAA,CAAsD,CAAC;QACnG;QACA,OAAO,IAAI,CAAC,UAAU;IAC1B;AAEA,IAAA,IAAW,UAAU,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,CAAA,EAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAA,qDAAA,CAAuD,CAAC;QACpG;QACA,OAAO,IAAI,CAAC,WAAW;IAC3B;AAEA;;;;AAIG;AACH,IAAA,IAAoB,KAAK,GAAA;QACrB,OAAO,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE;IAC3C
|
|
1
|
+
{"version":3,"file":"WorkletFilter.js","sources":["../../../../../src/audio/filters/WorkletFilter.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,7 @@ import type { Scene } from './Scene';
|
|
|
12
12
|
import type { CacheStore } from '@/resources/CacheStore';
|
|
13
13
|
import type { RenderBackend } from '@/rendering/RenderBackend';
|
|
14
14
|
import type { GamepadDefinition } from '@/input/GamepadDefinitions';
|
|
15
|
+
import type { GamepadSlotStrategy } from '@/input/InputManager';
|
|
15
16
|
import { type AudioManager } from '@/audio/AudioManager';
|
|
16
17
|
export declare enum ApplicationStatus {
|
|
17
18
|
Loading = 1,
|
|
@@ -28,6 +29,7 @@ export interface ApplicationOptions {
|
|
|
28
29
|
spriteRendererBatchSize: number;
|
|
29
30
|
particleRendererBatchSize: number;
|
|
30
31
|
gamepadDefinitions: Array<GamepadDefinition>;
|
|
32
|
+
gamepadSlotStrategy: GamepadSlotStrategy;
|
|
31
33
|
pointerDistanceThreshold: number;
|
|
32
34
|
webglAttributes: WebGLContextAttributes;
|
|
33
35
|
resourcePath: string;
|
|
@@ -44,12 +46,40 @@ export interface WebGpuBackendConfig {
|
|
|
44
46
|
export interface AutoBackendConfig {
|
|
45
47
|
type: 'auto';
|
|
46
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Discriminated union of backend selection options. `'auto'` picks WebGPU
|
|
51
|
+
* when available, falling back to WebGL2 if adapter acquisition fails;
|
|
52
|
+
* the explicit values pin the choice and skip the fallback path.
|
|
53
|
+
*/
|
|
47
54
|
export type BackendConfig = AutoBackendConfig | WebGl2BackendConfig | WebGpuBackendConfig;
|
|
55
|
+
/**
|
|
56
|
+
* Top-level engine instance. Owns the canvas, render backend, scene-stack
|
|
57
|
+
* controller, input + interaction managers, asset loader, tween manager,
|
|
58
|
+
* shared audio singleton, and the per-frame loop.
|
|
59
|
+
*
|
|
60
|
+
* Lifecycle: construct with options → `await app.start(scene)` → engine
|
|
61
|
+
* runs the request-animation-frame loop until `app.stop()` or
|
|
62
|
+
* `app.destroy()`. The render backend is chosen and initialized during
|
|
63
|
+
* `start()`; query {@link Application.backend} or
|
|
64
|
+
* {@link Application.capabilities} after start has resolved.
|
|
65
|
+
*
|
|
66
|
+
* The class exposes Signals for the major state-change points
|
|
67
|
+
* ({@link Application.onResize}, {@link Application.onFrame},
|
|
68
|
+
* {@link Application.onCanvasFocusChange},
|
|
69
|
+
* {@link Application.onVisibilityChange},
|
|
70
|
+
* {@link Application.onBackendLost}, {@link Application.onBackendRestored})
|
|
71
|
+
* so subscribers can react without subclassing.
|
|
72
|
+
*
|
|
73
|
+
* `pauseOnHidden = true` short-circuits the per-frame work while
|
|
74
|
+
* `document.hidden` is true (still consumes RAF callbacks but skips
|
|
75
|
+
* scene update + render). Useful for games; leave off for tools and
|
|
76
|
+
* background-active simulations.
|
|
77
|
+
*/
|
|
48
78
|
export declare class Application {
|
|
49
79
|
readonly options: ApplicationOptions;
|
|
50
80
|
readonly canvas: HTMLCanvasElement;
|
|
51
81
|
readonly loader: Loader;
|
|
52
|
-
readonly
|
|
82
|
+
readonly input: InputManager;
|
|
53
83
|
readonly interaction: InteractionManager;
|
|
54
84
|
readonly sceneManager: SceneManager;
|
|
55
85
|
readonly tweens: TweenManager;
|
|
@@ -58,6 +88,7 @@ export declare class Application {
|
|
|
58
88
|
readonly onCanvasFocusChange: Signal<[focused: boolean]>;
|
|
59
89
|
readonly onVisibilityChange: Signal<[visible: boolean]>;
|
|
60
90
|
readonly onBackendLost: Signal<[]>;
|
|
91
|
+
readonly onBackendRestored: Signal<[]>;
|
|
61
92
|
pauseOnHidden: boolean;
|
|
62
93
|
private readonly _updateHandler;
|
|
63
94
|
private readonly _startupClock;
|
|
@@ -90,11 +121,45 @@ export declare class Application {
|
|
|
90
121
|
get cursor(): string;
|
|
91
122
|
set cursor(cursor: string);
|
|
92
123
|
get audio(): AudioManager;
|
|
124
|
+
/**
|
|
125
|
+
* Initialize the render backend, await capability detection, set the
|
|
126
|
+
* initial scene, and start the per-frame loop. Idempotent — if the
|
|
127
|
+
* application is already running the call is a no-op. On error the
|
|
128
|
+
* status returns to `Stopped` and the error propagates.
|
|
129
|
+
*/
|
|
93
130
|
start(scene: Scene): Promise<this>;
|
|
131
|
+
/**
|
|
132
|
+
* One iteration of the per-frame loop. Invoked by `requestAnimationFrame`.
|
|
133
|
+
* Skips the body when the document is hidden and `pauseOnHidden` is
|
|
134
|
+
* `true`. Order: reset render stats → input + interaction update →
|
|
135
|
+
* audio update → tween update → optional view runtime update →
|
|
136
|
+
* scene-graph update → onFrame dispatch → backend flush → reschedule.
|
|
137
|
+
*/
|
|
94
138
|
update(): this;
|
|
139
|
+
/**
|
|
140
|
+
* Halt the per-frame loop, unload the active scene, and stop the active
|
|
141
|
+
* + frame clocks. Leaves backend, input, audio, etc. intact — call
|
|
142
|
+
* {@link Application.destroy} to release everything.
|
|
143
|
+
*/
|
|
95
144
|
stop(): this;
|
|
145
|
+
/**
|
|
146
|
+
* Resize the canvas and the active backend's root render target.
|
|
147
|
+
* Dispatches {@link Application.onResize} after the backend has been
|
|
148
|
+
* notified.
|
|
149
|
+
*/
|
|
96
150
|
resize(width: number, height: number): this;
|
|
151
|
+
/**
|
|
152
|
+
* Set the canvas cursor. Strings are passed through to `canvas.style.cursor`
|
|
153
|
+
* verbatim (CSS values like `'pointer'`, `'crosshair'`, or `url(...)`).
|
|
154
|
+
* Image-based sources are rasterized to a `data:` URL via the shared
|
|
155
|
+
* scratch canvas and used as the cursor image.
|
|
156
|
+
*/
|
|
97
157
|
setCursor(cursor: string | Texture | HTMLImageElement | HTMLCanvasElement): this;
|
|
158
|
+
/**
|
|
159
|
+
* Tear down every owned subsystem (loader, interaction, input, tweens,
|
|
160
|
+
* backend, scene manager, all clocks, all signals) and release event
|
|
161
|
+
* listeners. The application instance is unusable after this call.
|
|
162
|
+
*/
|
|
98
163
|
destroy(): void;
|
|
99
164
|
private _onDocumentVisibilityChange;
|
|
100
165
|
private resolveInitialBackendType;
|
|
@@ -30,6 +30,7 @@ const defaultAppSettings = {
|
|
|
30
30
|
spriteRendererBatchSize: 4096, // ~ 262kb
|
|
31
31
|
particleRendererBatchSize: 8192, // ~ 1.18mb
|
|
32
32
|
gamepadDefinitions: [],
|
|
33
|
+
gamepadSlotStrategy: 'sticky',
|
|
33
34
|
pointerDistanceThreshold: 10,
|
|
34
35
|
webglAttributes: {
|
|
35
36
|
alpha: false,
|
|
@@ -48,11 +49,34 @@ const defaultAppSettings = {
|
|
|
48
49
|
cache: undefined,
|
|
49
50
|
backend: defaultBackendConfig,
|
|
50
51
|
};
|
|
52
|
+
/**
|
|
53
|
+
* Top-level engine instance. Owns the canvas, render backend, scene-stack
|
|
54
|
+
* controller, input + interaction managers, asset loader, tween manager,
|
|
55
|
+
* shared audio singleton, and the per-frame loop.
|
|
56
|
+
*
|
|
57
|
+
* Lifecycle: construct with options → `await app.start(scene)` → engine
|
|
58
|
+
* runs the request-animation-frame loop until `app.stop()` or
|
|
59
|
+
* `app.destroy()`. The render backend is chosen and initialized during
|
|
60
|
+
* `start()`; query {@link Application.backend} or
|
|
61
|
+
* {@link Application.capabilities} after start has resolved.
|
|
62
|
+
*
|
|
63
|
+
* The class exposes Signals for the major state-change points
|
|
64
|
+
* ({@link Application.onResize}, {@link Application.onFrame},
|
|
65
|
+
* {@link Application.onCanvasFocusChange},
|
|
66
|
+
* {@link Application.onVisibilityChange},
|
|
67
|
+
* {@link Application.onBackendLost}, {@link Application.onBackendRestored})
|
|
68
|
+
* so subscribers can react without subclassing.
|
|
69
|
+
*
|
|
70
|
+
* `pauseOnHidden = true` short-circuits the per-frame work while
|
|
71
|
+
* `document.hidden` is true (still consumes RAF callbacks but skips
|
|
72
|
+
* scene update + render). Useful for games; leave off for tools and
|
|
73
|
+
* background-active simulations.
|
|
74
|
+
*/
|
|
51
75
|
class Application {
|
|
52
76
|
options;
|
|
53
77
|
canvas;
|
|
54
78
|
loader;
|
|
55
|
-
|
|
79
|
+
input;
|
|
56
80
|
interaction;
|
|
57
81
|
sceneManager;
|
|
58
82
|
tweens = new TweenManager();
|
|
@@ -61,6 +85,7 @@ class Application {
|
|
|
61
85
|
onCanvasFocusChange = new Signal();
|
|
62
86
|
onVisibilityChange = new Signal();
|
|
63
87
|
onBackendLost = new Signal();
|
|
88
|
+
onBackendRestored = new Signal();
|
|
64
89
|
pauseOnHidden = false;
|
|
65
90
|
_updateHandler;
|
|
66
91
|
_startupClock = new Clock();
|
|
@@ -93,7 +118,7 @@ class Application {
|
|
|
93
118
|
});
|
|
94
119
|
this._backendType = this.resolveInitialBackendType();
|
|
95
120
|
this._backend = this.createBackend(this._backendType);
|
|
96
|
-
this.
|
|
121
|
+
this.input = new InputManager(this);
|
|
97
122
|
this.interaction = new InteractionManager(this);
|
|
98
123
|
this.sceneManager = new SceneManager(this);
|
|
99
124
|
this._updateHandler = this.update.bind(this);
|
|
@@ -102,7 +127,7 @@ class Application {
|
|
|
102
127
|
this._documentVisible = document.visibilityState === 'visible';
|
|
103
128
|
document.addEventListener('visibilitychange', this._visibilityChangeHandler);
|
|
104
129
|
}
|
|
105
|
-
this.
|
|
130
|
+
this.input.onCanvasFocusChange.add((focused) => {
|
|
106
131
|
this.onCanvasFocusChange.dispatch(focused);
|
|
107
132
|
});
|
|
108
133
|
this.onVisibilityChange.add((visible) => {
|
|
@@ -139,7 +164,7 @@ class Application {
|
|
|
139
164
|
return this._capabilities;
|
|
140
165
|
}
|
|
141
166
|
get canvasFocused() {
|
|
142
|
-
return this.
|
|
167
|
+
return this.input.canvasFocused;
|
|
143
168
|
}
|
|
144
169
|
get documentVisible() {
|
|
145
170
|
return this._documentVisible;
|
|
@@ -153,6 +178,12 @@ class Application {
|
|
|
153
178
|
get audio() {
|
|
154
179
|
return getAudioManager();
|
|
155
180
|
}
|
|
181
|
+
/**
|
|
182
|
+
* Initialize the render backend, await capability detection, set the
|
|
183
|
+
* initial scene, and start the per-frame loop. Idempotent — if the
|
|
184
|
+
* application is already running the call is a no-op. On error the
|
|
185
|
+
* status returns to `Stopped` and the error propagates.
|
|
186
|
+
*/
|
|
156
187
|
async start(scene) {
|
|
157
188
|
if (this._status === ApplicationStatus.Stopped) {
|
|
158
189
|
this._status = ApplicationStatus.Loading;
|
|
@@ -175,6 +206,13 @@ class Application {
|
|
|
175
206
|
}
|
|
176
207
|
return this;
|
|
177
208
|
}
|
|
209
|
+
/**
|
|
210
|
+
* One iteration of the per-frame loop. Invoked by `requestAnimationFrame`.
|
|
211
|
+
* Skips the body when the document is hidden and `pauseOnHidden` is
|
|
212
|
+
* `true`. Order: reset render stats → input + interaction update →
|
|
213
|
+
* audio update → tween update → optional view runtime update →
|
|
214
|
+
* scene-graph update → onFrame dispatch → backend flush → reschedule.
|
|
215
|
+
*/
|
|
178
216
|
update() {
|
|
179
217
|
if (this._status === ApplicationStatus.Running) {
|
|
180
218
|
if (this.pauseOnHidden && !this._documentVisible) {
|
|
@@ -184,7 +222,7 @@ class Application {
|
|
|
184
222
|
const frameDelta = this._frameClock.elapsedTime;
|
|
185
223
|
const frameStart = performance.now();
|
|
186
224
|
this.backend.resetStats();
|
|
187
|
-
this.
|
|
225
|
+
this.input.update();
|
|
188
226
|
this.interaction.update();
|
|
189
227
|
getAudioManager().update();
|
|
190
228
|
this.tweens.update(frameDelta.seconds);
|
|
@@ -202,6 +240,11 @@ class Application {
|
|
|
202
240
|
}
|
|
203
241
|
return this;
|
|
204
242
|
}
|
|
243
|
+
/**
|
|
244
|
+
* Halt the per-frame loop, unload the active scene, and stop the active
|
|
245
|
+
* + frame clocks. Leaves backend, input, audio, etc. intact — call
|
|
246
|
+
* {@link Application.destroy} to release everything.
|
|
247
|
+
*/
|
|
205
248
|
stop() {
|
|
206
249
|
if (this._status === ApplicationStatus.Running) {
|
|
207
250
|
this._status = ApplicationStatus.Halting;
|
|
@@ -215,11 +258,22 @@ class Application {
|
|
|
215
258
|
}
|
|
216
259
|
return this;
|
|
217
260
|
}
|
|
261
|
+
/**
|
|
262
|
+
* Resize the canvas and the active backend's root render target.
|
|
263
|
+
* Dispatches {@link Application.onResize} after the backend has been
|
|
264
|
+
* notified.
|
|
265
|
+
*/
|
|
218
266
|
resize(width, height) {
|
|
219
267
|
this.backend.resize(width, height);
|
|
220
268
|
this.onResize.dispatch(width, height, this);
|
|
221
269
|
return this;
|
|
222
270
|
}
|
|
271
|
+
/**
|
|
272
|
+
* Set the canvas cursor. Strings are passed through to `canvas.style.cursor`
|
|
273
|
+
* verbatim (CSS values like `'pointer'`, `'crosshair'`, or `url(...)`).
|
|
274
|
+
* Image-based sources are rasterized to a `data:` URL via the shared
|
|
275
|
+
* scratch canvas and used as the cursor image.
|
|
276
|
+
*/
|
|
223
277
|
setCursor(cursor) {
|
|
224
278
|
const source = (cursor instanceof Texture) ? cursor.source : cursor;
|
|
225
279
|
if (source === null) {
|
|
@@ -229,6 +283,11 @@ class Application {
|
|
|
229
283
|
this.canvas.style.cursor = this._cursor;
|
|
230
284
|
return this;
|
|
231
285
|
}
|
|
286
|
+
/**
|
|
287
|
+
* Tear down every owned subsystem (loader, interaction, input, tweens,
|
|
288
|
+
* backend, scene manager, all clocks, all signals) and release event
|
|
289
|
+
* listeners. The application instance is unusable after this call.
|
|
290
|
+
*/
|
|
232
291
|
destroy() {
|
|
233
292
|
if (typeof document !== 'undefined') {
|
|
234
293
|
document.removeEventListener('visibilitychange', this._visibilityChangeHandler);
|
|
@@ -236,7 +295,7 @@ class Application {
|
|
|
236
295
|
this.stop();
|
|
237
296
|
this.loader.destroy();
|
|
238
297
|
this.interaction.destroy();
|
|
239
|
-
this.
|
|
298
|
+
this.input.destroy();
|
|
240
299
|
this.tweens.destroy();
|
|
241
300
|
this._backend.destroy();
|
|
242
301
|
this.sceneManager.destroy();
|
|
@@ -248,6 +307,7 @@ class Application {
|
|
|
248
307
|
this.onCanvasFocusChange.destroy();
|
|
249
308
|
this.onVisibilityChange.destroy();
|
|
250
309
|
this.onBackendLost.destroy();
|
|
310
|
+
this.onBackendRestored.destroy();
|
|
251
311
|
}
|
|
252
312
|
_onDocumentVisibilityChange() {
|
|
253
313
|
const visible = document.visibilityState === 'visible';
|
|
@@ -270,10 +330,12 @@ class Application {
|
|
|
270
330
|
if (backendType === 'webgpu') {
|
|
271
331
|
const backend = new WebGpuBackend(this);
|
|
272
332
|
backend.onDeviceLost.add(() => { this.onBackendLost.dispatch(); });
|
|
333
|
+
backend.onDeviceRestored.add(() => { this.onBackendRestored.dispatch(); });
|
|
273
334
|
return backend;
|
|
274
335
|
}
|
|
275
336
|
const backend = new WebGl2Backend(this);
|
|
276
337
|
backend.onContextLost.add(() => { this.onBackendLost.dispatch(); });
|
|
338
|
+
backend.onContextRestored.add(() => { this.onBackendRestored.dispatch(); });
|
|
277
339
|
return backend;
|
|
278
340
|
}
|
|
279
341
|
async initializeRenderManager() {
|