@codexo/exojs 0.6.12 → 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 +1424 -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 +29 -0
- package/dist/esm/audio/AbstractMedia.js +76 -0
- package/dist/esm/audio/AbstractMedia.js.map +1 -1
- package/dist/esm/audio/AudioAnalyser.d.ts +83 -23
- package/dist/esm/audio/AudioAnalyser.js +277 -57
- package/dist/esm/audio/AudioAnalyser.js.map +1 -1
- package/dist/esm/audio/AudioBus.d.ts +82 -0
- package/dist/esm/audio/AudioBus.js +255 -0
- package/dist/esm/audio/AudioBus.js.map +1 -0
- package/dist/esm/audio/AudioFilter.d.ts +16 -0
- package/dist/esm/audio/AudioFilter.js +13 -0
- package/dist/esm/audio/AudioFilter.js.map +1 -0
- package/dist/esm/audio/AudioListener.d.ts +39 -0
- package/dist/esm/audio/AudioListener.js +97 -0
- package/dist/esm/audio/AudioListener.js.map +1 -0
- package/dist/esm/audio/AudioManager.d.ts +68 -0
- package/dist/esm/audio/AudioManager.js +139 -0
- package/dist/esm/audio/AudioManager.js.map +1 -0
- package/dist/esm/audio/BeatDetector.d.ts +142 -0
- package/dist/esm/audio/BeatDetector.js +957 -0
- package/dist/esm/audio/BeatDetector.js.map +1 -0
- package/dist/esm/audio/Envelope.d.ts +44 -0
- package/dist/esm/audio/Envelope.js +60 -0
- package/dist/esm/audio/Envelope.js.map +1 -0
- package/dist/esm/audio/Media.d.ts +11 -0
- package/dist/esm/audio/Music.d.ts +20 -0
- package/dist/esm/audio/Music.js +45 -4
- package/dist/esm/audio/Music.js.map +1 -1
- package/dist/esm/audio/OscillatorSound.d.ts +98 -0
- package/dist/esm/audio/OscillatorSound.js +342 -0
- package/dist/esm/audio/OscillatorSound.js.map +1 -0
- package/dist/esm/audio/Sound.d.ts +119 -9
- package/dist/esm/audio/Sound.js +301 -117
- 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/crossFade.d.ts +19 -0
- package/dist/esm/audio/crossFade.js +26 -0
- package/dist/esm/audio/crossFade.js.map +1 -0
- package/dist/esm/audio/dsp/fft.d.ts +22 -0
- package/dist/esm/audio/dsp/mel.d.ts +43 -0
- package/dist/esm/audio/dsp/tempogram.d.ts +51 -0
- package/dist/esm/audio/filters/ChorusFilter.d.ts +52 -0
- package/dist/esm/audio/filters/ChorusFilter.js +143 -0
- package/dist/esm/audio/filters/ChorusFilter.js.map +1 -0
- package/dist/esm/audio/filters/CompressorFilter.d.ts +43 -0
- package/dist/esm/audio/filters/CompressorFilter.js +108 -0
- package/dist/esm/audio/filters/CompressorFilter.js.map +1 -0
- package/dist/esm/audio/filters/DelayFilter.d.ts +34 -0
- package/dist/esm/audio/filters/DelayFilter.js +110 -0
- package/dist/esm/audio/filters/DelayFilter.js.map +1 -0
- package/dist/esm/audio/filters/DuckingFilter.d.ts +44 -0
- package/dist/esm/audio/filters/DuckingFilter.js +164 -0
- package/dist/esm/audio/filters/DuckingFilter.js.map +1 -0
- package/dist/esm/audio/filters/EqualizerFilter.d.ts +49 -0
- package/dist/esm/audio/filters/EqualizerFilter.js +134 -0
- package/dist/esm/audio/filters/EqualizerFilter.js.map +1 -0
- package/dist/esm/audio/filters/GranularFilter.d.ts +62 -0
- package/dist/esm/audio/filters/GranularFilter.js +176 -0
- package/dist/esm/audio/filters/GranularFilter.js.map +1 -0
- package/dist/esm/audio/filters/HighpassFilter.d.ts +29 -0
- package/dist/esm/audio/filters/HighpassFilter.js +71 -0
- package/dist/esm/audio/filters/HighpassFilter.js.map +1 -0
- package/dist/esm/audio/filters/LowpassFilter.d.ts +29 -0
- package/dist/esm/audio/filters/LowpassFilter.js +71 -0
- package/dist/esm/audio/filters/LowpassFilter.js.map +1 -0
- package/dist/esm/audio/filters/PitchShiftFilter.d.ts +44 -0
- package/dist/esm/audio/filters/PitchShiftFilter.js +132 -0
- package/dist/esm/audio/filters/PitchShiftFilter.js.map +1 -0
- package/dist/esm/audio/filters/ReverbFilter.d.ts +36 -0
- package/dist/esm/audio/filters/ReverbFilter.js +118 -0
- package/dist/esm/audio/filters/ReverbFilter.js.map +1 -0
- package/dist/esm/audio/filters/VocoderFilter.d.ts +49 -0
- package/dist/esm/audio/filters/VocoderFilter.js +174 -0
- package/dist/esm/audio/filters/VocoderFilter.js.map +1 -0
- package/dist/esm/audio/filters/WorkletFilter.d.ts +51 -0
- package/dist/esm/audio/filters/WorkletFilter.js +106 -0
- package/dist/esm/audio/filters/WorkletFilter.js.map +1 -0
- package/dist/esm/audio/filters/index.d.ts +12 -0
- package/dist/esm/audio/index.d.ts +15 -1
- package/dist/esm/audio/worklet/registerWorklet.d.ts +10 -0
- package/dist/esm/audio/worklet/registerWorklet.js +44 -0
- package/dist/esm/audio/worklet/registerWorklet.js.map +1 -0
- package/dist/esm/core/Application.d.ts +82 -0
- package/dist/esm/core/Application.js +137 -2
- 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 +40 -1
- package/dist/esm/core/SceneNode.js +75 -6
- 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 +22 -1
- 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/index.d.ts +0 -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 +26 -0
- package/dist/esm/debug/BoundingBoxesLayer.js +136 -0
- package/dist/esm/debug/BoundingBoxesLayer.js.map +1 -0
- package/dist/esm/debug/DebugLayer.d.ts +42 -0
- package/dist/esm/debug/DebugLayer.js +34 -0
- package/dist/esm/debug/DebugLayer.js.map +1 -0
- package/dist/esm/debug/DebugOverlay.d.ts +59 -0
- package/dist/esm/debug/DebugOverlay.js +123 -0
- package/dist/esm/debug/DebugOverlay.js.map +1 -0
- package/dist/esm/debug/HitTestLayer.d.ts +32 -0
- package/dist/esm/debug/HitTestLayer.js +118 -0
- package/dist/esm/debug/HitTestLayer.js.map +1 -0
- package/dist/esm/debug/PerformanceLayer.d.ts +37 -0
- package/dist/esm/debug/PerformanceLayer.js +193 -0
- package/dist/esm/debug/PerformanceLayer.js.map +1 -0
- package/dist/esm/debug/PointerStackLayer.d.ts +31 -0
- package/dist/esm/debug/PointerStackLayer.js +160 -0
- package/dist/esm/debug/PointerStackLayer.js.map +1 -0
- package/dist/esm/debug/index.d.ts +6 -0
- package/dist/esm/debug/index.js +7 -0
- package/dist/esm/debug/index.js.map +1 -0
- package/dist/esm/index.js +30 -4
- package/dist/esm/index.js.map +1 -1
- 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 +43 -0
- package/dist/esm/input/InputManager.js +68 -5
- package/dist/esm/input/InputManager.js.map +1 -1
- package/dist/esm/input/InteractionEvent.d.ts +31 -0
- package/dist/esm/input/InteractionEvent.js +37 -0
- package/dist/esm/input/InteractionEvent.js.map +1 -0
- package/dist/esm/input/InteractionManager.d.ts +163 -0
- package/dist/esm/input/InteractionManager.js +575 -0
- package/dist/esm/input/InteractionManager.js.map +1 -0
- 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/index.d.ts +2 -0
- package/dist/esm/input/interaction-hooks.d.ts +34 -0
- package/dist/esm/input/interaction-hooks.js +35 -0
- package/dist/esm/input/interaction-hooks.js.map +1 -0
- 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 +44 -2
- package/dist/esm/math/Circle.js +116 -16
- 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 +16 -1
- 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 +11 -2
- package/dist/esm/math/ObservableVector.js +13 -2
- 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 +35 -1
- package/dist/esm/math/Polygon.js +78 -6
- 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 +84 -0
- package/dist/esm/math/Quadtree.js +204 -0
- package/dist/esm/math/Quadtree.js.map +1 -0
- package/dist/esm/math/Random.d.ts +25 -0
- package/dist/esm/math/Random.js +26 -1
- 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 +10 -1
- package/dist/esm/math/Size.js.map +1 -1
- package/dist/esm/math/Vector.d.ts +16 -0
- package/dist/esm/math/Vector.js +17 -1
- 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 +231 -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/index.d.ts +1 -0
- 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 +70 -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 +12 -1
- 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 +44 -0
- package/dist/esm/rendering/Container.js +62 -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 +45 -0
- package/dist/esm/rendering/RenderNode.js +62 -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 +73 -6
- package/dist/esm/rendering/View.js +69 -2
- 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 +114 -0
- package/dist/esm/rendering/filters/WebGl2ShaderFilter.js +273 -0
- package/dist/esm/rendering/filters/WebGl2ShaderFilter.js.map +1 -0
- package/dist/esm/rendering/filters/WebGpuShaderFilter.d.ts +116 -0
- package/dist/esm/rendering/filters/WebGpuShaderFilter.js +402 -0
- package/dist/esm/rendering/filters/WebGpuShaderFilter.js.map +1 -0
- package/dist/esm/rendering/index.d.ts +3 -0
- package/dist/esm/rendering/mesh/Mesh.d.ts +2 -0
- package/dist/esm/rendering/mesh/Mesh.js +3 -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/shader/upgradeFragmentShaderToGl300.d.ts +34 -0
- package/dist/esm/rendering/shader/upgradeFragmentShaderToGl300.js +60 -0
- package/dist/esm/rendering/shader/upgradeFragmentShaderToGl300.js.map +1 -0
- 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 +62 -1
- package/dist/esm/rendering/sprite/Sprite.js +97 -19
- 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 +39 -1
- package/dist/esm/rendering/video/Video.js +68 -6
- 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 +17 -4
- package/dist/esm/rendering/webgl2/WebGl2Backend.js +20 -16
- 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 +45 -8
- package/dist/esm/rendering/webgpu/WebGpuBackend.js +160 -40
- 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 +11182 -2538
- package/dist/exo.esm.js.map +1 -1
- package/package.json +20 -9
- package/dist/esm/core/Quadtree.d.ts +0 -20
- package/dist/esm/core/Quadtree.js +0 -86
- package/dist/esm/core/Quadtree.js.map +0 -1
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
import { Capabilities } from './capabilities';
|
|
2
2
|
import { SceneManager } from './SceneManager';
|
|
3
3
|
import { InputManager } from '@/input/InputManager';
|
|
4
|
+
import { InteractionManager } from '@/input/InteractionManager';
|
|
4
5
|
import { Loader } from '@/resources/Loader';
|
|
5
6
|
import { TweenManager } from '@/animation/TweenManager';
|
|
6
7
|
import { Signal } from './Signal';
|
|
7
8
|
import { Color } from './Color';
|
|
9
|
+
import { Texture } from '@/rendering/texture/Texture';
|
|
8
10
|
import type { Time } from './Time';
|
|
9
11
|
import type { Scene } from './Scene';
|
|
10
12
|
import type { CacheStore } from '@/resources/CacheStore';
|
|
11
13
|
import type { RenderBackend } from '@/rendering/RenderBackend';
|
|
12
14
|
import type { GamepadDefinition } from '@/input/GamepadDefinitions';
|
|
15
|
+
import { type AudioManager } from '@/audio/AudioManager';
|
|
13
16
|
export declare enum ApplicationStatus {
|
|
14
17
|
Loading = 1,
|
|
15
18
|
Running = 2,
|
|
@@ -41,15 +44,50 @@ export interface WebGpuBackendConfig {
|
|
|
41
44
|
export interface AutoBackendConfig {
|
|
42
45
|
type: 'auto';
|
|
43
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
|
+
*/
|
|
44
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
|
+
*/
|
|
45
76
|
export declare class Application {
|
|
46
77
|
readonly options: ApplicationOptions;
|
|
47
78
|
readonly canvas: HTMLCanvasElement;
|
|
48
79
|
readonly loader: Loader;
|
|
49
80
|
readonly inputManager: InputManager;
|
|
81
|
+
readonly interaction: InteractionManager;
|
|
50
82
|
readonly sceneManager: SceneManager;
|
|
51
83
|
readonly tweens: TweenManager;
|
|
52
84
|
readonly onResize: Signal<[number, number, Application]>;
|
|
85
|
+
readonly onFrame: Signal<[Time]>;
|
|
86
|
+
readonly onCanvasFocusChange: Signal<[focused: boolean]>;
|
|
87
|
+
readonly onVisibilityChange: Signal<[visible: boolean]>;
|
|
88
|
+
readonly onBackendLost: Signal<[]>;
|
|
89
|
+
readonly onBackendRestored: Signal<[]>;
|
|
90
|
+
pauseOnHidden: boolean;
|
|
53
91
|
private readonly _updateHandler;
|
|
54
92
|
private readonly _startupClock;
|
|
55
93
|
private readonly _activeClock;
|
|
@@ -60,6 +98,9 @@ export declare class Application {
|
|
|
60
98
|
private _backendType;
|
|
61
99
|
private _backend;
|
|
62
100
|
private _capabilities;
|
|
101
|
+
private _documentVisible;
|
|
102
|
+
private _cursor;
|
|
103
|
+
private readonly _visibilityChangeHandler;
|
|
63
104
|
constructor(appSettings?: Partial<ApplicationOptions>);
|
|
64
105
|
get status(): ApplicationStatus;
|
|
65
106
|
get startupTime(): Time;
|
|
@@ -73,11 +114,52 @@ export declare class Application {
|
|
|
73
114
|
* For pre-start access use {@link Capabilities.ready} directly.
|
|
74
115
|
*/
|
|
75
116
|
get capabilities(): Capabilities;
|
|
117
|
+
get canvasFocused(): boolean;
|
|
118
|
+
get documentVisible(): boolean;
|
|
119
|
+
get cursor(): string;
|
|
120
|
+
set cursor(cursor: string);
|
|
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
|
+
*/
|
|
76
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
|
+
*/
|
|
77
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
|
+
*/
|
|
78
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
|
+
*/
|
|
79
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
|
+
*/
|
|
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
|
+
*/
|
|
80
161
|
destroy(): void;
|
|
162
|
+
private _onDocumentVisibilityChange;
|
|
81
163
|
private resolveInitialBackendType;
|
|
82
164
|
private createBackend;
|
|
83
165
|
private initializeRenderManager;
|
|
@@ -4,10 +4,14 @@ import { SceneManager } from './SceneManager.js';
|
|
|
4
4
|
import { WebGl2Backend } from '../rendering/webgl2/WebGl2Backend.js';
|
|
5
5
|
import { WebGpuBackend } from '../rendering/webgpu/WebGpuBackend.js';
|
|
6
6
|
import { InputManager } from '../input/InputManager.js';
|
|
7
|
+
import { InteractionManager } from '../input/InteractionManager.js';
|
|
7
8
|
import { Loader } from '../resources/Loader.js';
|
|
8
9
|
import { TweenManager } from '../animation/TweenManager.js';
|
|
9
10
|
import { Signal } from './Signal.js';
|
|
10
11
|
import { Color } from './Color.js';
|
|
12
|
+
import { Texture } from '../rendering/texture/Texture.js';
|
|
13
|
+
import { canvasSourceToDataUrl } from './utils.js';
|
|
14
|
+
import { getAudioManager } from '../audio/AudioManager.js';
|
|
11
15
|
|
|
12
16
|
var ApplicationStatus;
|
|
13
17
|
(function (ApplicationStatus) {
|
|
@@ -44,14 +48,44 @@ const defaultAppSettings = {
|
|
|
44
48
|
cache: undefined,
|
|
45
49
|
backend: defaultBackendConfig,
|
|
46
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
|
+
*/
|
|
47
74
|
class Application {
|
|
48
75
|
options;
|
|
49
76
|
canvas;
|
|
50
77
|
loader;
|
|
51
78
|
inputManager;
|
|
79
|
+
interaction;
|
|
52
80
|
sceneManager;
|
|
53
81
|
tweens = new TweenManager();
|
|
54
82
|
onResize = new Signal();
|
|
83
|
+
onFrame = new Signal();
|
|
84
|
+
onCanvasFocusChange = new Signal();
|
|
85
|
+
onVisibilityChange = new Signal();
|
|
86
|
+
onBackendLost = new Signal();
|
|
87
|
+
onBackendRestored = new Signal();
|
|
88
|
+
pauseOnHidden = false;
|
|
55
89
|
_updateHandler;
|
|
56
90
|
_startupClock = new Clock();
|
|
57
91
|
_activeClock = new Clock();
|
|
@@ -62,6 +96,9 @@ class Application {
|
|
|
62
96
|
_backendType;
|
|
63
97
|
_backend;
|
|
64
98
|
_capabilities = null;
|
|
99
|
+
_documentVisible = true;
|
|
100
|
+
_cursor = 'default';
|
|
101
|
+
_visibilityChangeHandler = this._onDocumentVisibilityChange.bind(this);
|
|
65
102
|
constructor(appSettings) {
|
|
66
103
|
this.options = {
|
|
67
104
|
canvas: appSettings?.canvas ?? createDefaultCanvas(),
|
|
@@ -81,9 +118,20 @@ class Application {
|
|
|
81
118
|
this._backendType = this.resolveInitialBackendType();
|
|
82
119
|
this._backend = this.createBackend(this._backendType);
|
|
83
120
|
this.inputManager = new InputManager(this);
|
|
121
|
+
this.interaction = new InteractionManager(this);
|
|
84
122
|
this.sceneManager = new SceneManager(this);
|
|
85
123
|
this._updateHandler = this.update.bind(this);
|
|
86
124
|
this._startupClock.start();
|
|
125
|
+
if (typeof document !== 'undefined') {
|
|
126
|
+
this._documentVisible = document.visibilityState === 'visible';
|
|
127
|
+
document.addEventListener('visibilitychange', this._visibilityChangeHandler);
|
|
128
|
+
}
|
|
129
|
+
this.inputManager.onCanvasFocusChange.add((focused) => {
|
|
130
|
+
this.onCanvasFocusChange.dispatch(focused);
|
|
131
|
+
});
|
|
132
|
+
this.onVisibilityChange.add((visible) => {
|
|
133
|
+
getAudioManager()._applyVisibility(visible);
|
|
134
|
+
});
|
|
87
135
|
}
|
|
88
136
|
get status() {
|
|
89
137
|
return this._status;
|
|
@@ -114,6 +162,27 @@ class Application {
|
|
|
114
162
|
}
|
|
115
163
|
return this._capabilities;
|
|
116
164
|
}
|
|
165
|
+
get canvasFocused() {
|
|
166
|
+
return this.inputManager.canvasFocused;
|
|
167
|
+
}
|
|
168
|
+
get documentVisible() {
|
|
169
|
+
return this._documentVisible;
|
|
170
|
+
}
|
|
171
|
+
get cursor() {
|
|
172
|
+
return this._cursor;
|
|
173
|
+
}
|
|
174
|
+
set cursor(cursor) {
|
|
175
|
+
this.setCursor(cursor);
|
|
176
|
+
}
|
|
177
|
+
get audio() {
|
|
178
|
+
return getAudioManager();
|
|
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
|
+
*/
|
|
117
186
|
async start(scene) {
|
|
118
187
|
if (this._status === ApplicationStatus.Stopped) {
|
|
119
188
|
this._status = ApplicationStatus.Loading;
|
|
@@ -136,18 +205,32 @@ class Application {
|
|
|
136
205
|
}
|
|
137
206
|
return this;
|
|
138
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
|
+
*/
|
|
139
215
|
update() {
|
|
140
216
|
if (this._status === ApplicationStatus.Running) {
|
|
217
|
+
if (this.pauseOnHidden && !this._documentVisible) {
|
|
218
|
+
this._frameRequest = requestAnimationFrame(this._updateHandler);
|
|
219
|
+
return this;
|
|
220
|
+
}
|
|
141
221
|
const frameDelta = this._frameClock.elapsedTime;
|
|
142
222
|
const frameStart = performance.now();
|
|
143
223
|
this.backend.resetStats();
|
|
144
224
|
this.inputManager.update();
|
|
225
|
+
this.interaction.update();
|
|
226
|
+
getAudioManager().update();
|
|
145
227
|
this.tweens.update(frameDelta.seconds);
|
|
146
228
|
const runtimeView = this.backend.view;
|
|
147
229
|
if (runtimeView && typeof runtimeView.update === 'function') {
|
|
148
230
|
runtimeView.update(frameDelta.milliseconds);
|
|
149
231
|
}
|
|
150
232
|
this.sceneManager.update(frameDelta);
|
|
233
|
+
this.onFrame.dispatch(frameDelta);
|
|
151
234
|
this.backend.flush();
|
|
152
235
|
this.backend.stats.frameTimeMs = performance.now() - frameStart;
|
|
153
236
|
this._frameRequest = requestAnimationFrame(this._updateHandler);
|
|
@@ -156,6 +239,11 @@ class Application {
|
|
|
156
239
|
}
|
|
157
240
|
return this;
|
|
158
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
|
+
*/
|
|
159
247
|
stop() {
|
|
160
248
|
if (this._status === ApplicationStatus.Running) {
|
|
161
249
|
this._status = ApplicationStatus.Halting;
|
|
@@ -169,14 +257,43 @@ class Application {
|
|
|
169
257
|
}
|
|
170
258
|
return this;
|
|
171
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
|
+
*/
|
|
172
265
|
resize(width, height) {
|
|
173
266
|
this.backend.resize(width, height);
|
|
174
267
|
this.onResize.dispatch(width, height, this);
|
|
175
268
|
return this;
|
|
176
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
|
+
*/
|
|
276
|
+
setCursor(cursor) {
|
|
277
|
+
const source = (cursor instanceof Texture) ? cursor.source : cursor;
|
|
278
|
+
if (source === null) {
|
|
279
|
+
throw new Error('Provided Texture has no source.');
|
|
280
|
+
}
|
|
281
|
+
this._cursor = typeof source === 'string' ? source : `url(${canvasSourceToDataUrl(source)})`;
|
|
282
|
+
this.canvas.style.cursor = this._cursor;
|
|
283
|
+
return this;
|
|
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
|
+
*/
|
|
177
290
|
destroy() {
|
|
291
|
+
if (typeof document !== 'undefined') {
|
|
292
|
+
document.removeEventListener('visibilitychange', this._visibilityChangeHandler);
|
|
293
|
+
}
|
|
178
294
|
this.stop();
|
|
179
295
|
this.loader.destroy();
|
|
296
|
+
this.interaction.destroy();
|
|
180
297
|
this.inputManager.destroy();
|
|
181
298
|
this.tweens.destroy();
|
|
182
299
|
this._backend.destroy();
|
|
@@ -185,6 +302,18 @@ class Application {
|
|
|
185
302
|
this._activeClock.destroy();
|
|
186
303
|
this._frameClock.destroy();
|
|
187
304
|
this.onResize.destroy();
|
|
305
|
+
this.onFrame.destroy();
|
|
306
|
+
this.onCanvasFocusChange.destroy();
|
|
307
|
+
this.onVisibilityChange.destroy();
|
|
308
|
+
this.onBackendLost.destroy();
|
|
309
|
+
this.onBackendRestored.destroy();
|
|
310
|
+
}
|
|
311
|
+
_onDocumentVisibilityChange() {
|
|
312
|
+
const visible = document.visibilityState === 'visible';
|
|
313
|
+
if (visible !== this._documentVisible) {
|
|
314
|
+
this._documentVisible = visible;
|
|
315
|
+
this.onVisibilityChange.dispatch(visible);
|
|
316
|
+
}
|
|
188
317
|
}
|
|
189
318
|
resolveInitialBackendType() {
|
|
190
319
|
const backendType = this.options.backend?.type;
|
|
@@ -198,9 +327,15 @@ class Application {
|
|
|
198
327
|
}
|
|
199
328
|
createBackend(backendType) {
|
|
200
329
|
if (backendType === 'webgpu') {
|
|
201
|
-
|
|
330
|
+
const backend = new WebGpuBackend(this);
|
|
331
|
+
backend.onDeviceLost.add(() => { this.onBackendLost.dispatch(); });
|
|
332
|
+
backend.onDeviceRestored.add(() => { this.onBackendRestored.dispatch(); });
|
|
333
|
+
return backend;
|
|
202
334
|
}
|
|
203
|
-
|
|
335
|
+
const backend = new WebGl2Backend(this);
|
|
336
|
+
backend.onContextLost.add(() => { this.onBackendLost.dispatch(); });
|
|
337
|
+
backend.onContextRestored.add(() => { this.onBackendRestored.dispatch(); });
|
|
338
|
+
return backend;
|
|
204
339
|
}
|
|
205
340
|
async initializeRenderManager() {
|
|
206
341
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Application.js","sources":["../../../../src/core/Application.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
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;AA6C7B,MAAM,mBAAmB,GAAG,MAAyB,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAsB;AAC1G,MAAM,oBAAoB,GAAsB,EAAE,IAAI,EAAE,MAAM,EAAE;AAEhE,MAAM,kBAAkB,GAA8B;AAClD,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,MAAM,EAAE,GAAG;IACX,UAAU,EAAE,KAAK,CAAC,cAAc;AAChC,IAAA,KAAK,EAAE,KAAK;IACZ,uBAAuB,EAAE,IAAI;IAC7B,yBAAyB,EAAE,IAAI;AAC/B,IAAA,kBAAkB,EAAE,EAAE;AACtB,IAAA,wBAAwB,EAAE,EAAE;AAC5B,IAAA,eAAe,EAAE;AACb,QAAA,KAAK,EAAE,KAAK;AACZ,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,kBAAkB,EAAE,KAAK;AACzB,QAAA,qBAAqB,EAAE,KAAK;AAC5B,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,KAAK,EAAE,KAAK;AACf,KAAA;AACD,IAAA,YAAY,EAAE,EAAE;AAChB,IAAA,cAAc,EAAE;AACZ,QAAA,MAAM,EAAE,KAAK;AACb,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,KAAK,EAAE,SAAS;AACnB,KAAA;AACD,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,OAAO,EAAE,oBAAoB;CAChC;AAED;;;;;;;;;;;;;;;;;;;;;;AAsBG;MACU,WAAW,CAAA;AACJ,IAAA,OAAO;AACP,IAAA,MAAM;AACN,IAAA,MAAM;AACN,IAAA,YAAY;AACZ,IAAA,WAAW;AACX,IAAA,YAAY;AACZ,IAAA,MAAM,GAAiB,IAAI,YAAY,EAAE;AACzC,IAAA,QAAQ,GAAG,IAAI,MAAM,EAAiC;AACtD,IAAA,OAAO,GAAG,IAAI,MAAM,EAAU;AAC9B,IAAA,mBAAmB,GAAG,IAAI,MAAM,EAAsB;AACtD,IAAA,kBAAkB,GAAG,IAAI,MAAM,EAAsB;AACrD,IAAA,aAAa,GAAG,IAAI,MAAM,EAAM;AAChC,IAAA,iBAAiB,GAAG,IAAI,MAAM,EAAM;IAC7C,aAAa,GAAY,KAAK;AAEpB,IAAA,cAAc;AACd,IAAA,aAAa,GAAU,IAAI,KAAK,EAAE;AAClC,IAAA,YAAY,GAAU,IAAI,KAAK,EAAE;AACjC,IAAA,WAAW,GAAU,IAAI,KAAK,EAAE;AAEzC,IAAA,OAAO,GAAsB,iBAAiB,CAAC,OAAO;IACtD,WAAW,GAAG,CAAC;IACf,aAAa,GAAG,CAAC;AACjB,IAAA,YAAY;AACZ,IAAA,QAAQ;IACR,aAAa,GAAwB,IAAI;IACzC,gBAAgB,GAAY,IAAI;IAChC,OAAO,GAAW,SAAS;IAClB,wBAAwB,GAAG,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC;AAEvF,IAAA,WAAA,CAAmB,WAAyC,EAAA;QACxD,IAAI,CAAC,OAAO,GAAG;AACX,YAAA,MAAM,EAAE,WAAW,EAAE,MAAM,IAAI,mBAAmB,EAAE;AACpD,YAAA,GAAG,kBAAkB;AACrB,YAAA,GAAG,WAAW;AACd,YAAA,OAAO,EAAE,WAAW,EAAE,OAAO,IAAI,oBAAoB;SACxD;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM;QAEjC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;YACvC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC;QAC9C;AAEA,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC;AACrB,YAAA,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY;AACvC,YAAA,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc;AAC3C,YAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;AAC5B,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,yBAAyB,EAAE;QACpD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC;QACrD,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC;QAC1C,IAAI,CAAC,WAAW,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC;QAC/C,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC;QAC1C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AAE5C,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAE1B,QAAA,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;YACjC,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,eAAe,KAAK,SAAS;YAC9D,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,IAAI,CAAC,wBAAwB,CAAC;QAChF;QAEA,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,OAAO,KAAI;AAClD,YAAA,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC9C,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,OAAO,KAAI;AACpC,YAAA,eAAe,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC;AAC/C,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,IAAW,MAAM,GAAA;QACb,OAAO,IAAI,CAAC,OAAO;IACvB;AAEA,IAAA,IAAW,WAAW,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW;IACzC;AAEA,IAAA,IAAW,UAAU,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW;IACxC;AAEA,IAAA,IAAW,SAAS,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW;IACvC;AAEA,IAAA,IAAW,UAAU,GAAA;QACjB,OAAO,IAAI,CAAC,WAAW;IAC3B;AAEA,IAAA,IAAW,OAAO,GAAA;QACd,OAAO,IAAI,CAAC,QAAQ;IACxB;AAEA;;;;AAIG;AACH,IAAA,IAAW,YAAY,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,EAAE;AAC7B,YAAA,MAAM,IAAI,KAAK,CAAC,uHAAuH,CAAC;QAC5I;QAEA,OAAO,IAAI,CAAC,aAAa;IAC7B;AAEA,IAAA,IAAW,aAAa,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa;IAC1C;AAEA,IAAA,IAAW,eAAe,GAAA;QACtB,OAAO,IAAI,CAAC,gBAAgB;IAChC;AAEA,IAAA,IAAW,MAAM,GAAA;QACb,OAAO,IAAI,CAAC,OAAO;IACvB;IAEA,IAAW,MAAM,CAAC,MAAc,EAAA;AAC5B,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;IAC1B;AAEA,IAAA,IAAW,KAAK,GAAA;QACZ,OAAO,eAAe,EAAE;IAC5B;AAEA;;;;;AAKG;IACI,MAAM,KAAK,CAAC,KAAY,EAAA;QAC3B,IAAI,IAAI,CAAC,OAAO,KAAK,iBAAiB,CAAC,OAAO,EAAE;AAC5C,YAAA,IAAI,CAAC,OAAO,GAAG,iBAAiB,CAAC,OAAO;;;AAIxC,YAAA,MAAM,mBAAmB,GAAG,YAAY,CAAC,KAAK;AAE9C,YAAA,IAAI;AACA,gBAAA,MAAM,IAAI,CAAC,uBAAuB,EAAE;AACpC,gBAAA,IAAI,CAAC,aAAa,GAAG,MAAM,mBAAmB;gBAC9C,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC;gBACvC,IAAI,CAAC,aAAa,GAAG,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC;AAC/D,gBAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;AAC1B,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AACzB,gBAAA,IAAI,CAAC,OAAO,GAAG,iBAAiB,CAAC,OAAO;YAC5C;YAAE,OAAO,KAAK,EAAE;AACZ,gBAAA,IAAI,CAAC,OAAO,GAAG,iBAAiB,CAAC,OAAO;AACxC,gBAAA,MAAM,KAAK;YACf;QACJ;AAEA,QAAA,OAAO,IAAI;IACf;AAEA;;;;;;AAMG;IACI,MAAM,GAAA;QACT,IAAI,IAAI,CAAC,OAAO,KAAK,iBAAiB,CAAC,OAAO,EAAE;YAC5C,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBAC9C,IAAI,CAAC,aAAa,GAAG,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC;AAE/D,gBAAA,OAAO,IAAI;YACf;AAEA,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW;AAC/C,YAAA,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;AAEpC,YAAA,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;AAEzB,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;AAC1B,YAAA,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;AACzB,YAAA,eAAe,EAAE,CAAC,MAAM,EAAE;YAC1B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC;AACtC,YAAA,MAAM,WAAW,GAAI,IAAI,CAAC,OAEvB,CAAC,IAAI;YAER,IAAI,WAAW,IAAI,OAAO,WAAW,CAAC,MAAM,KAAK,UAAU,EAAE;AACzD,gBAAA,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC;YAC/C;AAEA,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC;AACpC,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;AACjC,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACpB,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,UAAU;YAC/D,IAAI,CAAC,aAAa,GAAG,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC;AAC/D,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;YAC1B,IAAI,CAAC,WAAW,EAAE;QACtB;AAEA,QAAA,OAAO,IAAI;IACf;AAEA;;;;AAIG;IACI,IAAI,GAAA;QACP,IAAI,IAAI,CAAC,OAAO,KAAK,iBAAiB,CAAC,OAAO,EAAE;AAC5C,YAAA,IAAI,CAAC,OAAO,GAAG,iBAAiB,CAAC,OAAO;AACxC,YAAA,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC;AACxC,YAAA,KAAK,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,KAAI;AAC3D,gBAAA,OAAO,CAAC,KAAK,CAAC,uDAAuD,EAAE,KAAK,CAAC;AACjF,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AACxB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;AACvB,YAAA,IAAI,CAAC,OAAO,GAAG,iBAAiB,CAAC,OAAO;QAC5C;AAEA,QAAA,OAAO,IAAI;IACf;AAEA;;;;AAIG;IACI,MAAM,CAAC,KAAa,EAAE,MAAc,EAAA;QACvC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC;QAClC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC;AAE3C,QAAA,OAAO,IAAI;IACf;AAEA;;;;;AAKG;AACI,IAAA,SAAS,CAAC,MAA+D,EAAA;AAC5E,QAAA,MAAM,MAAM,GAAG,CAAC,MAAM,YAAY,OAAO,IAAI,MAAM,CAAC,MAAM,GAAG,MAAM;AAEnE,QAAA,IAAI,MAAM,KAAK,IAAI,EAAE;AACjB,YAAA,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC;QACtD;QAEA,IAAI,CAAC,OAAO,GAAG,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,GAAG,CAAA,IAAA,EAAO,qBAAqB,CAAC,MAAM,CAAC,GAAG;QAC5F,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO;AAEvC,QAAA,OAAO,IAAI;IACf;AAEA;;;;AAIG;IACI,OAAO,GAAA;AACV,QAAA,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;YACjC,QAAQ,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,IAAI,CAAC,wBAAwB,CAAC;QACnF;QAEA,IAAI,CAAC,IAAI,EAAE;AACX,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;AACrB,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;AAC1B,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;AAC3B,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;AACvB,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;AAC3B,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;AAC5B,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;AAC3B,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;AAC1B,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;AACtB,QAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE;AAClC,QAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE;AACjC,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;AAC5B,QAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE;IACpC;IAEQ,2BAA2B,GAAA;AAC/B,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,eAAe,KAAK,SAAS;AAEtD,QAAA,IAAI,OAAO,KAAK,IAAI,CAAC,gBAAgB,EAAE;AACnC,YAAA,IAAI,CAAC,gBAAgB,GAAG,OAAO;AAC/B,YAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC7C;IACJ;IAEQ,yBAAyB,GAAA;QAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI;AAE9C,QAAA,IAAI,WAAW,KAAK,QAAQ,EAAE;AAC1B,YAAA,OAAO,QAAQ;QACnB;AAEA,QAAA,IAAI,WAAW,KAAK,QAAQ,EAAE;AAC1B,YAAA,OAAO,QAAQ;QACnB;AAEA,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE,GAAG,QAAQ,GAAG,QAAQ;IACpD;AAEQ,IAAA,aAAa,CAAC,WAAgC,EAAA;AAClD,QAAA,IAAI,WAAW,KAAK,QAAQ,EAAE;AAC1B,YAAA,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC;AAEvC,YAAA,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,MAAK,EAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;AAClE,YAAA,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAK,EAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;AAE1E,YAAA,OAAO,OAAO;QAClB;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC;AAEvC,QAAA,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,MAAK,EAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;AACnE,QAAA,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAK,EAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;AAE3E,QAAA,OAAO,OAAO;IAClB;AAEQ,IAAA,MAAM,uBAAuB,GAAA;AACjC,QAAA,IAAI;AACA,YAAA,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;QACpC;QAAE,OAAO,KAAK,EAAE;AACZ,YAAA,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,YAAY,KAAK,QAAQ,EAAE;AACzE,gBAAA,MAAM,KAAK;YACf;AAEA,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;AACvB,YAAA,IAAI,CAAC,YAAY,GAAG,QAAQ;YAC5B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC;AACrD,YAAA,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;QACpC;IACJ;IAEQ,YAAY,GAAA;QAChB,MAAM,YAAY,GAAG,SAA+C;AAEpE,QAAA,OAAO,CAAC,CAAC,YAAY,CAAC,GAAG;IAC7B;AACH;;;;"}
|
|
@@ -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;;;;"}
|