@codexo/exojs 0.7.11 → 0.7.12
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 +108 -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 +63 -0
- package/dist/esm/core/Application.js +61 -0
- 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 +46 -0
- package/dist/esm/core/Scene.js +27 -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 +49 -0
- 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 +6 -0
- 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 +10 -2
- package/dist/esm/debug/PointerStackLayer.js.map +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/esm/input/ArcadeStickGamepadMapping.d.ts +7 -0
- package/dist/esm/input/ArcadeStickGamepadMapping.js +7 -0
- 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 +48 -0
- package/dist/esm/input/Gamepad.js +43 -0
- package/dist/esm/input/Gamepad.js.map +1 -1
- package/dist/esm/input/GamepadChannels.d.ts +8 -0
- package/dist/esm/input/GamepadChannels.js +8 -0
- package/dist/esm/input/GamepadChannels.js.map +1 -1
- package/dist/esm/input/GamepadControl.d.ts +18 -0
- package/dist/esm/input/GamepadControl.js +13 -0
- package/dist/esm/input/GamepadControl.js.map +1 -1
- package/dist/esm/input/GamepadDefinitions.d.ts +64 -1
- package/dist/esm/input/GamepadDefinitions.js +40 -1
- package/dist/esm/input/GamepadDefinitions.js.map +1 -1
- package/dist/esm/input/GamepadMapping.d.ts +32 -2
- package/dist/esm/input/GamepadMapping.js +24 -0
- package/dist/esm/input/GamepadMapping.js.map +1 -1
- package/dist/esm/input/GamepadPromptLayouts.d.ts +32 -1
- package/dist/esm/input/GamepadPromptLayouts.js +25 -1
- package/dist/esm/input/GamepadPromptLayouts.js.map +1 -1
- package/dist/esm/input/GenericDualAnalogGamepadMapping.d.ts +10 -0
- package/dist/esm/input/GenericDualAnalogGamepadMapping.js +10 -0
- 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/Input.d.ts +24 -0
- package/dist/esm/input/Input.js +22 -0
- package/dist/esm/input/Input.js.map +1 -1
- package/dist/esm/input/InputManager.d.ts +33 -0
- package/dist/esm/input/InputManager.js +33 -0
- 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 +33 -4
- package/dist/esm/input/InteractionManager.js +33 -4
- package/dist/esm/input/InteractionManager.js.map +1 -1
- package/dist/esm/input/JoyConLeftGamepadMapping.d.ts +9 -0
- package/dist/esm/input/JoyConLeftGamepadMapping.js +9 -0
- package/dist/esm/input/JoyConLeftGamepadMapping.js.map +1 -1
- package/dist/esm/input/JoyConRightGamepadMapping.d.ts +9 -0
- package/dist/esm/input/JoyConRightGamepadMapping.js +9 -0
- 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 +22 -0
- package/dist/esm/input/Pointer.js +22 -0
- 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/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/types.d.ts +20 -0
- package/dist/esm/input/types.js +20 -0
- 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 +12 -0
- package/dist/esm/resources/CacheFirstStrategy.js +12 -0
- 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 +20 -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 +167 -0
- package/dist/esm/resources/Loader.js +110 -0
- package/dist/esm/resources/Loader.js.map +1 -1
- package/dist/esm/resources/NetworkOnlyStrategy.d.ts +8 -0
- package/dist/esm/resources/NetworkOnlyStrategy.js +8 -0
- 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 +24 -0
- 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 +25 -0
- 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 +24 -0
- 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 +3392 -59
- package/dist/exo.esm.js.map +1 -1
- package/package.json +7 -8
|
@@ -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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"}
|
|
@@ -44,7 +44,35 @@ export interface WebGpuBackendConfig {
|
|
|
44
44
|
export interface AutoBackendConfig {
|
|
45
45
|
type: 'auto';
|
|
46
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Discriminated union of backend selection options. `'auto'` picks WebGPU
|
|
49
|
+
* when available, falling back to WebGL2 if adapter acquisition fails;
|
|
50
|
+
* the explicit values pin the choice and skip the fallback path.
|
|
51
|
+
*/
|
|
47
52
|
export type BackendConfig = AutoBackendConfig | WebGl2BackendConfig | WebGpuBackendConfig;
|
|
53
|
+
/**
|
|
54
|
+
* Top-level engine instance. Owns the canvas, render backend, scene-stack
|
|
55
|
+
* controller, input + interaction managers, asset loader, tween manager,
|
|
56
|
+
* shared audio singleton, and the per-frame loop.
|
|
57
|
+
*
|
|
58
|
+
* Lifecycle: construct with options → `await app.start(scene)` → engine
|
|
59
|
+
* runs the request-animation-frame loop until `app.stop()` or
|
|
60
|
+
* `app.destroy()`. The render backend is chosen and initialized during
|
|
61
|
+
* `start()`; query {@link Application.backend} or
|
|
62
|
+
* {@link Application.capabilities} after start has resolved.
|
|
63
|
+
*
|
|
64
|
+
* The class exposes Signals for the major state-change points
|
|
65
|
+
* ({@link Application.onResize}, {@link Application.onFrame},
|
|
66
|
+
* {@link Application.onCanvasFocusChange},
|
|
67
|
+
* {@link Application.onVisibilityChange},
|
|
68
|
+
* {@link Application.onBackendLost}, {@link Application.onBackendRestored})
|
|
69
|
+
* so subscribers can react without subclassing.
|
|
70
|
+
*
|
|
71
|
+
* `pauseOnHidden = true` short-circuits the per-frame work while
|
|
72
|
+
* `document.hidden` is true (still consumes RAF callbacks but skips
|
|
73
|
+
* scene update + render). Useful for games; leave off for tools and
|
|
74
|
+
* background-active simulations.
|
|
75
|
+
*/
|
|
48
76
|
export declare class Application {
|
|
49
77
|
readonly options: ApplicationOptions;
|
|
50
78
|
readonly canvas: HTMLCanvasElement;
|
|
@@ -58,6 +86,7 @@ export declare class Application {
|
|
|
58
86
|
readonly onCanvasFocusChange: Signal<[focused: boolean]>;
|
|
59
87
|
readonly onVisibilityChange: Signal<[visible: boolean]>;
|
|
60
88
|
readonly onBackendLost: Signal<[]>;
|
|
89
|
+
readonly onBackendRestored: Signal<[]>;
|
|
61
90
|
pauseOnHidden: boolean;
|
|
62
91
|
private readonly _updateHandler;
|
|
63
92
|
private readonly _startupClock;
|
|
@@ -90,11 +119,45 @@ export declare class Application {
|
|
|
90
119
|
get cursor(): string;
|
|
91
120
|
set cursor(cursor: string);
|
|
92
121
|
get audio(): AudioManager;
|
|
122
|
+
/**
|
|
123
|
+
* Initialize the render backend, await capability detection, set the
|
|
124
|
+
* initial scene, and start the per-frame loop. Idempotent — if the
|
|
125
|
+
* application is already running the call is a no-op. On error the
|
|
126
|
+
* status returns to `Stopped` and the error propagates.
|
|
127
|
+
*/
|
|
93
128
|
start(scene: Scene): Promise<this>;
|
|
129
|
+
/**
|
|
130
|
+
* One iteration of the per-frame loop. Invoked by `requestAnimationFrame`.
|
|
131
|
+
* Skips the body when the document is hidden and `pauseOnHidden` is
|
|
132
|
+
* `true`. Order: reset render stats → input + interaction update →
|
|
133
|
+
* audio update → tween update → optional view runtime update →
|
|
134
|
+
* scene-graph update → onFrame dispatch → backend flush → reschedule.
|
|
135
|
+
*/
|
|
94
136
|
update(): this;
|
|
137
|
+
/**
|
|
138
|
+
* Halt the per-frame loop, unload the active scene, and stop the active
|
|
139
|
+
* + frame clocks. Leaves backend, input, audio, etc. intact — call
|
|
140
|
+
* {@link Application.destroy} to release everything.
|
|
141
|
+
*/
|
|
95
142
|
stop(): this;
|
|
143
|
+
/**
|
|
144
|
+
* Resize the canvas and the active backend's root render target.
|
|
145
|
+
* Dispatches {@link Application.onResize} after the backend has been
|
|
146
|
+
* notified.
|
|
147
|
+
*/
|
|
96
148
|
resize(width: number, height: number): this;
|
|
149
|
+
/**
|
|
150
|
+
* Set the canvas cursor. Strings are passed through to `canvas.style.cursor`
|
|
151
|
+
* verbatim (CSS values like `'pointer'`, `'crosshair'`, or `url(...)`).
|
|
152
|
+
* Image-based sources are rasterized to a `data:` URL via the shared
|
|
153
|
+
* scratch canvas and used as the cursor image.
|
|
154
|
+
*/
|
|
97
155
|
setCursor(cursor: string | Texture | HTMLImageElement | HTMLCanvasElement): this;
|
|
156
|
+
/**
|
|
157
|
+
* Tear down every owned subsystem (loader, interaction, input, tweens,
|
|
158
|
+
* backend, scene manager, all clocks, all signals) and release event
|
|
159
|
+
* listeners. The application instance is unusable after this call.
|
|
160
|
+
*/
|
|
98
161
|
destroy(): void;
|
|
99
162
|
private _onDocumentVisibilityChange;
|
|
100
163
|
private resolveInitialBackendType;
|
|
@@ -48,6 +48,29 @@ const defaultAppSettings = {
|
|
|
48
48
|
cache: undefined,
|
|
49
49
|
backend: defaultBackendConfig,
|
|
50
50
|
};
|
|
51
|
+
/**
|
|
52
|
+
* Top-level engine instance. Owns the canvas, render backend, scene-stack
|
|
53
|
+
* controller, input + interaction managers, asset loader, tween manager,
|
|
54
|
+
* shared audio singleton, and the per-frame loop.
|
|
55
|
+
*
|
|
56
|
+
* Lifecycle: construct with options → `await app.start(scene)` → engine
|
|
57
|
+
* runs the request-animation-frame loop until `app.stop()` or
|
|
58
|
+
* `app.destroy()`. The render backend is chosen and initialized during
|
|
59
|
+
* `start()`; query {@link Application.backend} or
|
|
60
|
+
* {@link Application.capabilities} after start has resolved.
|
|
61
|
+
*
|
|
62
|
+
* The class exposes Signals for the major state-change points
|
|
63
|
+
* ({@link Application.onResize}, {@link Application.onFrame},
|
|
64
|
+
* {@link Application.onCanvasFocusChange},
|
|
65
|
+
* {@link Application.onVisibilityChange},
|
|
66
|
+
* {@link Application.onBackendLost}, {@link Application.onBackendRestored})
|
|
67
|
+
* so subscribers can react without subclassing.
|
|
68
|
+
*
|
|
69
|
+
* `pauseOnHidden = true` short-circuits the per-frame work while
|
|
70
|
+
* `document.hidden` is true (still consumes RAF callbacks but skips
|
|
71
|
+
* scene update + render). Useful for games; leave off for tools and
|
|
72
|
+
* background-active simulations.
|
|
73
|
+
*/
|
|
51
74
|
class Application {
|
|
52
75
|
options;
|
|
53
76
|
canvas;
|
|
@@ -61,6 +84,7 @@ class Application {
|
|
|
61
84
|
onCanvasFocusChange = new Signal();
|
|
62
85
|
onVisibilityChange = new Signal();
|
|
63
86
|
onBackendLost = new Signal();
|
|
87
|
+
onBackendRestored = new Signal();
|
|
64
88
|
pauseOnHidden = false;
|
|
65
89
|
_updateHandler;
|
|
66
90
|
_startupClock = new Clock();
|
|
@@ -153,6 +177,12 @@ class Application {
|
|
|
153
177
|
get audio() {
|
|
154
178
|
return getAudioManager();
|
|
155
179
|
}
|
|
180
|
+
/**
|
|
181
|
+
* Initialize the render backend, await capability detection, set the
|
|
182
|
+
* initial scene, and start the per-frame loop. Idempotent — if the
|
|
183
|
+
* application is already running the call is a no-op. On error the
|
|
184
|
+
* status returns to `Stopped` and the error propagates.
|
|
185
|
+
*/
|
|
156
186
|
async start(scene) {
|
|
157
187
|
if (this._status === ApplicationStatus.Stopped) {
|
|
158
188
|
this._status = ApplicationStatus.Loading;
|
|
@@ -175,6 +205,13 @@ class Application {
|
|
|
175
205
|
}
|
|
176
206
|
return this;
|
|
177
207
|
}
|
|
208
|
+
/**
|
|
209
|
+
* One iteration of the per-frame loop. Invoked by `requestAnimationFrame`.
|
|
210
|
+
* Skips the body when the document is hidden and `pauseOnHidden` is
|
|
211
|
+
* `true`. Order: reset render stats → input + interaction update →
|
|
212
|
+
* audio update → tween update → optional view runtime update →
|
|
213
|
+
* scene-graph update → onFrame dispatch → backend flush → reschedule.
|
|
214
|
+
*/
|
|
178
215
|
update() {
|
|
179
216
|
if (this._status === ApplicationStatus.Running) {
|
|
180
217
|
if (this.pauseOnHidden && !this._documentVisible) {
|
|
@@ -202,6 +239,11 @@ class Application {
|
|
|
202
239
|
}
|
|
203
240
|
return this;
|
|
204
241
|
}
|
|
242
|
+
/**
|
|
243
|
+
* Halt the per-frame loop, unload the active scene, and stop the active
|
|
244
|
+
* + frame clocks. Leaves backend, input, audio, etc. intact — call
|
|
245
|
+
* {@link Application.destroy} to release everything.
|
|
246
|
+
*/
|
|
205
247
|
stop() {
|
|
206
248
|
if (this._status === ApplicationStatus.Running) {
|
|
207
249
|
this._status = ApplicationStatus.Halting;
|
|
@@ -215,11 +257,22 @@ class Application {
|
|
|
215
257
|
}
|
|
216
258
|
return this;
|
|
217
259
|
}
|
|
260
|
+
/**
|
|
261
|
+
* Resize the canvas and the active backend's root render target.
|
|
262
|
+
* Dispatches {@link Application.onResize} after the backend has been
|
|
263
|
+
* notified.
|
|
264
|
+
*/
|
|
218
265
|
resize(width, height) {
|
|
219
266
|
this.backend.resize(width, height);
|
|
220
267
|
this.onResize.dispatch(width, height, this);
|
|
221
268
|
return this;
|
|
222
269
|
}
|
|
270
|
+
/**
|
|
271
|
+
* Set the canvas cursor. Strings are passed through to `canvas.style.cursor`
|
|
272
|
+
* verbatim (CSS values like `'pointer'`, `'crosshair'`, or `url(...)`).
|
|
273
|
+
* Image-based sources are rasterized to a `data:` URL via the shared
|
|
274
|
+
* scratch canvas and used as the cursor image.
|
|
275
|
+
*/
|
|
223
276
|
setCursor(cursor) {
|
|
224
277
|
const source = (cursor instanceof Texture) ? cursor.source : cursor;
|
|
225
278
|
if (source === null) {
|
|
@@ -229,6 +282,11 @@ class Application {
|
|
|
229
282
|
this.canvas.style.cursor = this._cursor;
|
|
230
283
|
return this;
|
|
231
284
|
}
|
|
285
|
+
/**
|
|
286
|
+
* Tear down every owned subsystem (loader, interaction, input, tweens,
|
|
287
|
+
* backend, scene manager, all clocks, all signals) and release event
|
|
288
|
+
* listeners. The application instance is unusable after this call.
|
|
289
|
+
*/
|
|
232
290
|
destroy() {
|
|
233
291
|
if (typeof document !== 'undefined') {
|
|
234
292
|
document.removeEventListener('visibilitychange', this._visibilityChangeHandler);
|
|
@@ -248,6 +306,7 @@ class Application {
|
|
|
248
306
|
this.onCanvasFocusChange.destroy();
|
|
249
307
|
this.onVisibilityChange.destroy();
|
|
250
308
|
this.onBackendLost.destroy();
|
|
309
|
+
this.onBackendRestored.destroy();
|
|
251
310
|
}
|
|
252
311
|
_onDocumentVisibilityChange() {
|
|
253
312
|
const visible = document.visibilityState === 'visible';
|
|
@@ -270,10 +329,12 @@ class Application {
|
|
|
270
329
|
if (backendType === 'webgpu') {
|
|
271
330
|
const backend = new WebGpuBackend(this);
|
|
272
331
|
backend.onDeviceLost.add(() => { this.onBackendLost.dispatch(); });
|
|
332
|
+
backend.onDeviceRestored.add(() => { this.onBackendRestored.dispatch(); });
|
|
273
333
|
return backend;
|
|
274
334
|
}
|
|
275
335
|
const backend = new WebGl2Backend(this);
|
|
276
336
|
backend.onContextLost.add(() => { this.onBackendLost.dispatch(); });
|
|
337
|
+
backend.onContextRestored.add(() => { this.onBackendRestored.dispatch(); });
|
|
277
338
|
return backend;
|
|
278
339
|
}
|
|
279
340
|
async initializeRenderManager() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Application.js","sources":["../../../../src/core/Application.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;;;;;;IAoBY;AAAZ,CAAA,UAAY,iBAAiB,EAAA;AACzB,IAAA,iBAAA,CAAA,iBAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW;AACX,IAAA,iBAAA,CAAA,iBAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW;AACX,IAAA,iBAAA,CAAA,iBAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW;AACX,IAAA,iBAAA,CAAA,iBAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW;AACf,CAAC,EALW,iBAAiB,KAAjB,iBAAiB,GAAA,EAAA,CAAA,CAAA;
|
|
1
|
+
{"version":3,"file":"Application.js","sources":["../../../../src/core/Application.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
import { Rectangle } from '@/math/Rectangle';
|
|
2
2
|
import type { Matrix } from '@/math/Matrix';
|
|
3
|
+
/**
|
|
4
|
+
* Mutable axis-aligned bounding box accumulator. Starts as the empty bounds
|
|
5
|
+
* (`-Infinity..Infinity` reversed) and grows monotonically as points or
|
|
6
|
+
* rectangles are merged in via {@link Bounds.addCoords} and
|
|
7
|
+
* {@link Bounds.addRect}. Used during scene-graph traversal to accumulate a
|
|
8
|
+
* subtree's combined extent for culling and hit-testing.
|
|
9
|
+
*
|
|
10
|
+
* The {@link Bounds.getRect} accessor lazily folds the current min/max into
|
|
11
|
+
* a shared {@link Rectangle} — copy the result if you need to retain it
|
|
12
|
+
* across further accumulation.
|
|
13
|
+
*/
|
|
3
14
|
export declare class Bounds {
|
|
4
15
|
private _minX;
|
|
5
16
|
private _minY;
|
|
@@ -11,9 +22,21 @@ export declare class Bounds {
|
|
|
11
22
|
get minY(): number;
|
|
12
23
|
get maxX(): number;
|
|
13
24
|
get maxY(): number;
|
|
25
|
+
/** Expand the bounds to include `(x, y)`. */
|
|
14
26
|
addCoords(x: number, y: number): this;
|
|
27
|
+
/**
|
|
28
|
+
* Expand the bounds to include `rectangle`. When `transform` is provided
|
|
29
|
+
* the rectangle's corners are transformed into the bounds' coordinate
|
|
30
|
+
* space first (via `Rectangle.temp` — does not mutate `rectangle`).
|
|
31
|
+
*/
|
|
15
32
|
addRect(rectangle: Rectangle, transform?: Matrix): this;
|
|
33
|
+
/**
|
|
34
|
+
* Materialize the accumulated min/max as a {@link Rectangle}. Returns
|
|
35
|
+
* the same instance across calls — copy if you need to retain it past
|
|
36
|
+
* the next mutation.
|
|
37
|
+
*/
|
|
16
38
|
getRect(): Rectangle;
|
|
39
|
+
/** Restore the empty-bounds state for reuse across frames. */
|
|
17
40
|
reset(): this;
|
|
18
41
|
destroy(): void;
|
|
19
42
|
}
|
package/dist/esm/core/Bounds.js
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
import { Rectangle } from '../math/Rectangle.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Mutable axis-aligned bounding box accumulator. Starts as the empty bounds
|
|
5
|
+
* (`-Infinity..Infinity` reversed) and grows monotonically as points or
|
|
6
|
+
* rectangles are merged in via {@link Bounds.addCoords} and
|
|
7
|
+
* {@link Bounds.addRect}. Used during scene-graph traversal to accumulate a
|
|
8
|
+
* subtree's combined extent for culling and hit-testing.
|
|
9
|
+
*
|
|
10
|
+
* The {@link Bounds.getRect} accessor lazily folds the current min/max into
|
|
11
|
+
* a shared {@link Rectangle} — copy the result if you need to retain it
|
|
12
|
+
* across further accumulation.
|
|
13
|
+
*/
|
|
3
14
|
class Bounds {
|
|
4
15
|
_minX = Infinity;
|
|
5
16
|
_minY = Infinity;
|
|
@@ -19,6 +30,7 @@ class Bounds {
|
|
|
19
30
|
get maxY() {
|
|
20
31
|
return this._maxY;
|
|
21
32
|
}
|
|
33
|
+
/** Expand the bounds to include `(x, y)`. */
|
|
22
34
|
addCoords(x, y) {
|
|
23
35
|
this._minX = Math.min(this._minX, x);
|
|
24
36
|
this._minY = Math.min(this._minY, y);
|
|
@@ -27,6 +39,11 @@ class Bounds {
|
|
|
27
39
|
this._dirty = true;
|
|
28
40
|
return this;
|
|
29
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Expand the bounds to include `rectangle`. When `transform` is provided
|
|
44
|
+
* the rectangle's corners are transformed into the bounds' coordinate
|
|
45
|
+
* space first (via `Rectangle.temp` — does not mutate `rectangle`).
|
|
46
|
+
*/
|
|
30
47
|
addRect(rectangle, transform) {
|
|
31
48
|
if (transform) {
|
|
32
49
|
rectangle = rectangle.transform(transform, Rectangle.temp);
|
|
@@ -35,6 +52,11 @@ class Bounds {
|
|
|
35
52
|
.addCoords(rectangle.left, rectangle.top)
|
|
36
53
|
.addCoords(rectangle.right, rectangle.bottom);
|
|
37
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* Materialize the accumulated min/max as a {@link Rectangle}. Returns
|
|
57
|
+
* the same instance across calls — copy if you need to retain it past
|
|
58
|
+
* the next mutation.
|
|
59
|
+
*/
|
|
38
60
|
getRect() {
|
|
39
61
|
if (this._dirty) {
|
|
40
62
|
this._rect.set(this._minX, this._minY, this._maxX - this._minX, this._maxY - this._minY);
|
|
@@ -42,6 +64,7 @@ class Bounds {
|
|
|
42
64
|
}
|
|
43
65
|
return this._rect;
|
|
44
66
|
}
|
|
67
|
+
/** Restore the empty-bounds state for reuse across frames. */
|
|
45
68
|
reset() {
|
|
46
69
|
this._minX = Infinity;
|
|
47
70
|
this._minY = Infinity;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Bounds.js","sources":["../../../../src/core/Bounds.ts"],"sourcesContent":[null],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"Bounds.js","sources":["../../../../src/core/Bounds.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAGA;;;;;;;;;;AAUG;MACU,MAAM,CAAA;IAEP,KAAK,GAAG,QAAQ;IAChB,KAAK,GAAG,QAAQ;IAChB,KAAK,GAAG,CAAC,QAAQ;IACjB,KAAK,GAAG,CAAC,QAAQ;IACjB,MAAM,GAAG,IAAI;AACb,IAAA,KAAK,GAAc,IAAI,SAAS,EAAE;AAE1C,IAAA,IAAW,IAAI,GAAA;QACX,OAAO,IAAI,CAAC,KAAK;IACrB;AAEA,IAAA,IAAW,IAAI,GAAA;QACX,OAAO,IAAI,CAAC,KAAK;IACrB;AAEA,IAAA,IAAW,IAAI,GAAA;QACX,OAAO,IAAI,CAAC,KAAK;IACrB;AAEA,IAAA,IAAW,IAAI,GAAA;QACX,OAAO,IAAI,CAAC,KAAK;IACrB;;IAGO,SAAS,CAAC,CAAS,EAAE,CAAS,EAAA;AACjC,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AAEpC,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAElB,QAAA,OAAO,IAAI;IACf;AAEA;;;;AAIG;IACI,OAAO,CAAC,SAAoB,EAAE,SAAkB,EAAA;QACnD,IAAI,SAAS,EAAE;YACX,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC;QAC9D;AAEA,QAAA,OAAO;aACF,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG;aACvC,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC;IACrD;AAEA;;;;AAIG;IACI,OAAO,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACb,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CACV,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,EACvB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAC1B;AAED,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QACvB;QAEA,OAAO,IAAI,CAAC,KAAK;IACrB;;IAGO,KAAK,GAAA;AACR,QAAA,IAAI,CAAC,KAAK,GAAG,QAAQ;AACrB,QAAA,IAAI,CAAC,KAAK,GAAG,QAAQ;AACrB,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,QAAQ;AACtB,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,QAAQ;AAEtB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAElB,QAAA,OAAO,IAAI;IACf;IAEO,OAAO,GAAA;AACV,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;IACxB;AACH;;;;"}
|
package/dist/esm/core/Clock.d.ts
CHANGED
|
@@ -1,18 +1,39 @@
|
|
|
1
1
|
import { Time } from './Time';
|
|
2
|
+
/**
|
|
3
|
+
* High-precision wall-clock that accumulates elapsed time while running.
|
|
4
|
+
* Reads from {@link performance.now} via `getPreciseTime`. Use
|
|
5
|
+
* {@link Clock.start}, {@link Clock.stop}, {@link Clock.reset}, and
|
|
6
|
+
* {@link Clock.restart} to control the running state; read elapsed time via
|
|
7
|
+
* {@link Clock.elapsedTime} (the {@link Time} instance is shared — copy it
|
|
8
|
+
* if you need to keep a snapshot).
|
|
9
|
+
*
|
|
10
|
+
* Use {@link Timer} for a clock with a fixed limit and `expired` flag.
|
|
11
|
+
*/
|
|
2
12
|
export declare class Clock {
|
|
3
13
|
private _startTime;
|
|
4
14
|
private _elapsedTime;
|
|
5
15
|
private _running;
|
|
6
16
|
constructor(startTime?: Time, autoStart?: boolean);
|
|
7
17
|
get running(): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Total accumulated time since the last {@link Clock.reset}. While the
|
|
20
|
+
* clock is running, the value advances on every read by folding in the
|
|
21
|
+
* delta since the previous read; while stopped, the value is fixed at
|
|
22
|
+
* the stop point. Returns the same {@link Time} instance — read the
|
|
23
|
+
* scalar fields if you need an unchanging snapshot.
|
|
24
|
+
*/
|
|
8
25
|
get elapsedTime(): Time;
|
|
9
26
|
get elapsedMilliseconds(): number;
|
|
10
27
|
get elapsedSeconds(): number;
|
|
11
28
|
get elapsedMinutes(): number;
|
|
12
29
|
get elapsedHours(): number;
|
|
30
|
+
/** Begin accumulating time. No-op when already running. */
|
|
13
31
|
start(): this;
|
|
32
|
+
/** Halt accumulation. Elapsed time stays at the moment of stopping. */
|
|
14
33
|
stop(): this;
|
|
34
|
+
/** Halt and zero the accumulated time. The clock is left stopped. */
|
|
15
35
|
reset(): this;
|
|
36
|
+
/** Reset accumulated time to zero, then immediately start. Common per-frame pattern. */
|
|
16
37
|
restart(): this;
|
|
17
38
|
destroy(): void;
|
|
18
39
|
}
|
package/dist/esm/core/Clock.js
CHANGED
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
import { Time } from './Time.js';
|
|
2
2
|
import { getPreciseTime } from './utils.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* High-precision wall-clock that accumulates elapsed time while running.
|
|
6
|
+
* Reads from {@link performance.now} via `getPreciseTime`. Use
|
|
7
|
+
* {@link Clock.start}, {@link Clock.stop}, {@link Clock.reset}, and
|
|
8
|
+
* {@link Clock.restart} to control the running state; read elapsed time via
|
|
9
|
+
* {@link Clock.elapsedTime} (the {@link Time} instance is shared — copy it
|
|
10
|
+
* if you need to keep a snapshot).
|
|
11
|
+
*
|
|
12
|
+
* Use {@link Timer} for a clock with a fixed limit and `expired` flag.
|
|
13
|
+
*/
|
|
4
14
|
class Clock {
|
|
5
15
|
_startTime;
|
|
6
16
|
_elapsedTime = new Time(0);
|
|
@@ -14,6 +24,13 @@ class Clock {
|
|
|
14
24
|
get running() {
|
|
15
25
|
return this._running;
|
|
16
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* Total accumulated time since the last {@link Clock.reset}. While the
|
|
29
|
+
* clock is running, the value advances on every read by folding in the
|
|
30
|
+
* delta since the previous read; while stopped, the value is fixed at
|
|
31
|
+
* the stop point. Returns the same {@link Time} instance — read the
|
|
32
|
+
* scalar fields if you need an unchanging snapshot.
|
|
33
|
+
*/
|
|
17
34
|
get elapsedTime() {
|
|
18
35
|
if (this._running) {
|
|
19
36
|
const now = getPreciseTime();
|
|
@@ -34,6 +51,7 @@ class Clock {
|
|
|
34
51
|
get elapsedHours() {
|
|
35
52
|
return this.elapsedTime.hours;
|
|
36
53
|
}
|
|
54
|
+
/** Begin accumulating time. No-op when already running. */
|
|
37
55
|
start() {
|
|
38
56
|
if (!this._running) {
|
|
39
57
|
this._running = true;
|
|
@@ -41,6 +59,7 @@ class Clock {
|
|
|
41
59
|
}
|
|
42
60
|
return this;
|
|
43
61
|
}
|
|
62
|
+
/** Halt accumulation. Elapsed time stays at the moment of stopping. */
|
|
44
63
|
stop() {
|
|
45
64
|
if (this._running) {
|
|
46
65
|
this._running = false;
|
|
@@ -48,11 +67,13 @@ class Clock {
|
|
|
48
67
|
}
|
|
49
68
|
return this;
|
|
50
69
|
}
|
|
70
|
+
/** Halt and zero the accumulated time. The clock is left stopped. */
|
|
51
71
|
reset() {
|
|
52
72
|
this._running = false;
|
|
53
73
|
this._elapsedTime.setMilliseconds(0);
|
|
54
74
|
return this;
|
|
55
75
|
}
|
|
76
|
+
/** Reset accumulated time to zero, then immediately start. Common per-frame pattern. */
|
|
56
77
|
restart() {
|
|
57
78
|
this.reset();
|
|
58
79
|
this.start();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Clock.js","sources":["../../../../src/core/Clock.ts"],"sourcesContent":[null],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"Clock.js","sources":["../../../../src/core/Clock.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAGA;;;;;;;;;AASG;MACU,KAAK,CAAA;AAEN,IAAA,UAAU;AACV,IAAA,YAAY,GAAS,IAAI,IAAI,CAAC,CAAC,CAAC;IAChC,QAAQ,GAAG,KAAK;AAExB,IAAA,WAAA,CAAmB,YAAkB,IAAI,CAAC,IAAI,EAAE,SAAS,GAAG,KAAK,EAAA;AAC7D,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,KAAK,EAAE;QAEnC,IAAI,SAAS,EAAE;YACX,IAAI,CAAC,KAAK,EAAE;QAChB;IACJ;AAEA,IAAA,IAAW,OAAO,GAAA;QACd,OAAO,IAAI,CAAC,QAAQ;IACxB;AAEA;;;;;;AAMG;AACH,IAAA,IAAW,WAAW,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,MAAM,GAAG,GAAG,cAAc,EAAE;AAE5B,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;AACzD,YAAA,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,GAAG;QACtC;QAEA,OAAO,IAAI,CAAC,YAAY;IAC5B;AAEA,IAAA,IAAW,mBAAmB,GAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY;IACxC;AAEA,IAAA,IAAW,cAAc,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO;IACnC;AAEA,IAAA,IAAW,cAAc,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO;IACnC;AAEA,IAAA,IAAW,YAAY,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK;IACjC;;IAGO,KAAK,GAAA;AACR,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAChB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,YAAA,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,cAAc,EAAE;QACnD;AAEA,QAAA,OAAO,IAAI;IACf;;IAGO,IAAI,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QAC1E;AAEA,QAAA,OAAO,IAAI;IACf;;IAGO,KAAK,GAAA;AACR,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC;AAEpC,QAAA,OAAO,IAAI;IACf;;IAGO,OAAO,GAAA;QACV,IAAI,CAAC,KAAK,EAAE;QACZ,IAAI,CAAC,KAAK,EAAE;AAEZ,QAAA,OAAO,IAAI;IACf;IAEO,OAAO,GAAA;AACV,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;AACzB,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;IAC/B;AACH;;;;"}
|
package/dist/esm/core/Color.d.ts
CHANGED
|
@@ -1,4 +1,18 @@
|
|
|
1
1
|
import type { Cloneable } from '@/core/types';
|
|
2
|
+
/**
|
|
3
|
+
* 32-bit RGBA color value with channel-wise accessors. Red, green, and blue
|
|
4
|
+
* are integers in 0..255; alpha is a float in 0..1. Out-of-range values are
|
|
5
|
+
* clipped on assignment (RGB via bitwise mask, alpha via `clamp`).
|
|
6
|
+
*
|
|
7
|
+
* The class predefines every CSS named color as a static readonly instance
|
|
8
|
+
* (`Color.aliceBlue`, `Color.cornflowerBlue`, …). These shared instances are
|
|
9
|
+
* intentionally shared — do not mutate them; clone first if you need to
|
|
10
|
+
* customize a starting color.
|
|
11
|
+
*
|
|
12
|
+
* Internally caches the packed RGBA32 representation and a normalized
|
|
13
|
+
* `Float32Array` for upload to GPU buffers; both are invalidated on
|
|
14
|
+
* channel writes and rebuilt lazily.
|
|
15
|
+
*/
|
|
2
16
|
export declare class Color implements Cloneable {
|
|
3
17
|
private _r;
|
|
4
18
|
private _g;
|
|
@@ -23,12 +37,33 @@ export declare class Color implements Cloneable {
|
|
|
23
37
|
set blue(blue: number);
|
|
24
38
|
get alpha(): number;
|
|
25
39
|
set alpha(alpha: number);
|
|
40
|
+
/**
|
|
41
|
+
* Set any subset of channels. Omitted parameters default to the current
|
|
42
|
+
* channel value (use this for "set red, leave the rest"). RGB are masked
|
|
43
|
+
* to 0..255; alpha is clamped to 0..1.
|
|
44
|
+
*/
|
|
26
45
|
set(r?: number, g?: number, b?: number, a?: number): this;
|
|
27
46
|
copy(color: Color): this;
|
|
28
47
|
clone(): this;
|
|
29
48
|
equals({ r, g, b, a }?: Partial<Color>): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Return an RGBA `Float32Array` view backed by an internal cache. Pass
|
|
51
|
+
* `normalized = true` to map RGB into 0..1 (typical for shader uploads);
|
|
52
|
+
* default returns 0..255 RGB and 0..1 alpha. The returned array is the
|
|
53
|
+
* same instance across calls — copy it if you need a stable snapshot.
|
|
54
|
+
*/
|
|
30
55
|
toArray(normalized?: boolean): Float32Array;
|
|
56
|
+
/**
|
|
57
|
+
* Return the RGB channels as a 6-digit hex string. Pass `prefixed = false`
|
|
58
|
+
* to omit the leading `#`. Alpha is not included — use {@link Color.toRgba}
|
|
59
|
+
* for the full RGBA32 packed form.
|
|
60
|
+
*/
|
|
31
61
|
toString(prefixed?: boolean): string;
|
|
62
|
+
/**
|
|
63
|
+
* Return the color packed into a single 32-bit RGBA value (R in low byte,
|
|
64
|
+
* A in high byte). Cached after first call until any channel is written.
|
|
65
|
+
* Returns `0` when alpha is zero.
|
|
66
|
+
*/
|
|
32
67
|
toRgba(): number;
|
|
33
68
|
destroy(): void;
|
|
34
69
|
static readonly aliceBlue: Color;
|
package/dist/esm/core/Color.js
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
import { clamp } from '../math/utils.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* 32-bit RGBA color value with channel-wise accessors. Red, green, and blue
|
|
5
|
+
* are integers in 0..255; alpha is a float in 0..1. Out-of-range values are
|
|
6
|
+
* clipped on assignment (RGB via bitwise mask, alpha via `clamp`).
|
|
7
|
+
*
|
|
8
|
+
* The class predefines every CSS named color as a static readonly instance
|
|
9
|
+
* (`Color.aliceBlue`, `Color.cornflowerBlue`, …). These shared instances are
|
|
10
|
+
* intentionally shared — do not mutate them; clone first if you need to
|
|
11
|
+
* customize a starting color.
|
|
12
|
+
*
|
|
13
|
+
* Internally caches the packed RGBA32 representation and a normalized
|
|
14
|
+
* `Float32Array` for upload to GPU buffers; both are invalidated on
|
|
15
|
+
* channel writes and rebuilt lazily.
|
|
16
|
+
*/
|
|
3
17
|
class Color {
|
|
4
18
|
_r;
|
|
5
19
|
_g;
|
|
@@ -65,6 +79,11 @@ class Color {
|
|
|
65
79
|
set alpha(alpha) {
|
|
66
80
|
this.a = alpha;
|
|
67
81
|
}
|
|
82
|
+
/**
|
|
83
|
+
* Set any subset of channels. Omitted parameters default to the current
|
|
84
|
+
* channel value (use this for "set red, leave the rest"). RGB are masked
|
|
85
|
+
* to 0..255; alpha is clamped to 0..1.
|
|
86
|
+
*/
|
|
68
87
|
set(r = this._r, g = this._g, b = this._b, a = this._a) {
|
|
69
88
|
this._r = r & 255;
|
|
70
89
|
this._g = g & 255;
|
|
@@ -85,6 +104,12 @@ class Color {
|
|
|
85
104
|
&& (b === undefined || this.b === b)
|
|
86
105
|
&& (a === undefined || this.a === a);
|
|
87
106
|
}
|
|
107
|
+
/**
|
|
108
|
+
* Return an RGBA `Float32Array` view backed by an internal cache. Pass
|
|
109
|
+
* `normalized = true` to map RGB into 0..1 (typical for shader uploads);
|
|
110
|
+
* default returns 0..255 RGB and 0..1 alpha. The returned array is the
|
|
111
|
+
* same instance across calls — copy it if you need a stable snapshot.
|
|
112
|
+
*/
|
|
88
113
|
toArray(normalized = false) {
|
|
89
114
|
if (!this._array) {
|
|
90
115
|
this._array = new Float32Array(4);
|
|
@@ -103,9 +128,19 @@ class Color {
|
|
|
103
128
|
}
|
|
104
129
|
return this._array;
|
|
105
130
|
}
|
|
131
|
+
/**
|
|
132
|
+
* Return the RGB channels as a 6-digit hex string. Pass `prefixed = false`
|
|
133
|
+
* to omit the leading `#`. Alpha is not included — use {@link Color.toRgba}
|
|
134
|
+
* for the full RGBA32 packed form.
|
|
135
|
+
*/
|
|
106
136
|
toString(prefixed = true) {
|
|
107
137
|
return `${prefixed ? '#' : ''}${((1 << 24) + (this._r << 16) + (this._g << 8) + this._b).toString(16).substr(1)}`;
|
|
108
138
|
}
|
|
139
|
+
/**
|
|
140
|
+
* Return the color packed into a single 32-bit RGBA value (R in low byte,
|
|
141
|
+
* A in high byte). Cached after first call until any channel is written.
|
|
142
|
+
* Returns `0` when alpha is zero.
|
|
143
|
+
*/
|
|
109
144
|
toRgba() {
|
|
110
145
|
if (this._rgba === null) {
|
|
111
146
|
this._rgba = this._a && (((this._a * 255 | 0) << 24) + (this._b << 16) + (this._g << 8) + this._r) >>> 0;
|