@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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObservableVector.js","sources":["../../../../src/math/ObservableVector.ts"],"sourcesContent":[null],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"ObservableVector.js","sources":["../../../../src/math/ObservableVector.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAEA;;;;;;;;AAQG;AACG,MAAO,gBAAiB,SAAQ,cAAc,CAAA;AAExC,IAAA,EAAE;AACF,IAAA,EAAE;AACF,IAAA,SAAS;IAEjB,WAAA,CAAmB,QAA6B,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAA;AAC1D,QAAA,KAAK,EAAE;AAEP,QAAA,IAAI,CAAC,EAAE,GAAG,CAAC;AACX,QAAA,IAAI,CAAC,EAAE,GAAG,CAAC;AACX,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ;IAC7B;AAEA,IAAA,IAAW,CAAC,GAAA;QACR,OAAO,IAAI,CAAC,EAAE;IAClB;IAEA,IAAW,CAAC,CAAC,CAAS,EAAA;AAClB,QAAA,IAAI,IAAI,CAAC,EAAE,KAAK,CAAC,EAAE;AACf,YAAA,IAAI,CAAC,EAAE,GAAG,CAAC;AACX,YAAA,IAAI,CAAC,SAAS,IAAI;QACtB;IACJ;AAEA,IAAA,IAAW,CAAC,GAAA;QACR,OAAO,IAAI,CAAC,EAAE;IAClB;IAEA,IAAW,CAAC,CAAC,CAAS,EAAA;AAClB,QAAA,IAAI,IAAI,CAAC,EAAE,KAAK,CAAC,EAAE;AACf,YAAA,IAAI,CAAC,EAAE,GAAG,CAAC;AACX,YAAA,IAAI,CAAC,SAAS,IAAI;QACtB;IACJ;IAEA,IAAoB,SAAS,CAAC,KAAa,EAAA;AACvC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;QAE1B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;IAChE;IAEA,IAAoB,MAAM,CAAC,SAAiB,EAAA;AACxC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS;QAEhC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;IAC9E;IAEgB,GAAG,CAAC,IAAY,IAAI,CAAC,EAAE,EAAE,CAAA,GAAY,IAAI,CAAC,EAAE,EAAA;AACxD,QAAA,IAAI,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,EAAE,KAAK,CAAC,EAAE;AAChC,YAAA,IAAI,CAAC,EAAE,GAAG,CAAC;AACX,YAAA,IAAI,CAAC,EAAE,GAAG,CAAC;AACX,YAAA,IAAI,CAAC,SAAS,IAAI;QACtB;AAEA,QAAA,OAAO,IAAI;IACf;AAEgB,IAAA,GAAG,CAAC,CAAS,EAAE,CAAA,GAAY,CAAC,EAAA;AACxC,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IAC7C;AAEgB,IAAA,QAAQ,CAAC,CAAS,EAAE,CAAA,GAAY,CAAC,EAAA;AAC7C,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IAC7C;AAEO,IAAA,KAAK,CAAC,CAAS,EAAE,CAAA,GAAY,CAAC,EAAA;AACjC,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IAC7C;AAEgB,IAAA,MAAM,CAAC,CAAS,EAAE,CAAA,GAAY,CAAC,EAAA;QAC3C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACpB,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QAC7C;AAEA,QAAA,OAAO,IAAI;IACf;IAEO,KAAK,GAAA;QACR,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,SAAS,KAAK,MAAW,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAS;IAC7F;AAEO,IAAA,IAAI,CAAC,MAAsB,EAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACvC;IAEO,OAAO,GAAA;;;AAGV,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;IACzB;AACH;;;;"}
|
|
@@ -1,8 +1,23 @@
|
|
|
1
1
|
import { Vector } from '@/math/Vector';
|
|
2
|
+
/**
|
|
3
|
+
* A 2D vector expressed in polar coordinates: `radius` (magnitude) and `phi`
|
|
4
|
+
* (angle in radians, measured from the positive X-axis).
|
|
5
|
+
*/
|
|
2
6
|
export declare class PolarVector {
|
|
3
7
|
radius: number;
|
|
8
|
+
/** Angle in radians, measured from the positive X-axis. */
|
|
4
9
|
phi: number;
|
|
5
10
|
constructor(radius?: number, angle?: number);
|
|
11
|
+
/**
|
|
12
|
+
* Create a `PolarVector` from a Cartesian `vector`, preserving both
|
|
13
|
+
* magnitude and direction. The roundtrip
|
|
14
|
+
* `PolarVector.fromVector(v).toVector()` reproduces `v` (modulo float
|
|
15
|
+
* precision).
|
|
16
|
+
*/
|
|
6
17
|
static fromVector(vector: Vector): PolarVector;
|
|
18
|
+
/**
|
|
19
|
+
* Convert to a Cartesian {@link Vector}. Returns `Vector.temp` — do not
|
|
20
|
+
* store the reference across calls.
|
|
21
|
+
*/
|
|
7
22
|
toVector(): Vector;
|
|
8
23
|
}
|
|
@@ -1,15 +1,30 @@
|
|
|
1
1
|
import { Vector } from './Vector.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* A 2D vector expressed in polar coordinates: `radius` (magnitude) and `phi`
|
|
5
|
+
* (angle in radians, measured from the positive X-axis).
|
|
6
|
+
*/
|
|
3
7
|
class PolarVector {
|
|
4
8
|
radius;
|
|
9
|
+
/** Angle in radians, measured from the positive X-axis. */
|
|
5
10
|
phi;
|
|
6
11
|
constructor(radius = 0, angle = 0) {
|
|
7
12
|
this.radius = radius;
|
|
8
13
|
this.phi = angle;
|
|
9
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* Create a `PolarVector` from a Cartesian `vector`, preserving both
|
|
17
|
+
* magnitude and direction. The roundtrip
|
|
18
|
+
* `PolarVector.fromVector(v).toVector()` reproduces `v` (modulo float
|
|
19
|
+
* precision).
|
|
20
|
+
*/
|
|
10
21
|
static fromVector(vector) {
|
|
11
|
-
return new PolarVector(vector.length,
|
|
22
|
+
return new PolarVector(vector.length, vector.angle);
|
|
12
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* Convert to a Cartesian {@link Vector}. Returns `Vector.temp` — do not
|
|
26
|
+
* store the reference across calls.
|
|
27
|
+
*/
|
|
13
28
|
toVector() {
|
|
14
29
|
return Vector.temp.set(this.radius * Math.cos(this.phi), this.radius * Math.sin(this.phi));
|
|
15
30
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PolarVector.js","sources":["../../../../src/math/PolarVector.ts"],"sourcesContent":[null],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"PolarVector.js","sources":["../../../../src/math/PolarVector.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAEA;;;AAGG;MACU,WAAW,CAAA;AACb,IAAA,MAAM;;AAEN,IAAA,GAAG;AAEV,IAAA,WAAA,CAAmB,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAA;AACpC,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,GAAG,GAAG,KAAK;IACpB;AAEA;;;;;AAKG;IACI,OAAO,UAAU,CAAC,MAAc,EAAA;QACnC,OAAO,IAAI,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC;IACvD;AAEA;;;AAGG;IACI,QAAQ,GAAA;AACX,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAClB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAChC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CACnC;IACL;AACH;;;;"}
|
|
@@ -4,12 +4,24 @@ import { Rectangle } from '@/math/Rectangle';
|
|
|
4
4
|
import type { ShapeLike } from '@/math/ShapeLike';
|
|
5
5
|
import type { Collidable, CollisionResponse } from '@/math/Collision';
|
|
6
6
|
import { CollisionType } from '@/math/Collision';
|
|
7
|
+
/**
|
|
8
|
+
* Mutable convex polygon defined by a world-space offset `(x, y)` and an
|
|
9
|
+
* array of local-space vertex {@link Vector}s. Implements {@link ShapeLike}
|
|
10
|
+
* with full SAT collision response.
|
|
11
|
+
*
|
|
12
|
+
* Edge vectors are recomputed whenever `setPoints` is called; normals are
|
|
13
|
+
* cached lazily and invalidated on any positional or point mutation.
|
|
14
|
+
*
|
|
15
|
+
* `Polygon.temp` is a shared scratch instance.
|
|
16
|
+
*/
|
|
7
17
|
export declare class Polygon implements ShapeLike {
|
|
8
18
|
readonly collisionType: CollisionType;
|
|
9
19
|
private readonly _position;
|
|
10
20
|
private readonly _points;
|
|
11
21
|
private readonly _edges;
|
|
12
|
-
|
|
22
|
+
/** Cached normals — null until first getNormals() call; reused across calls. */
|
|
23
|
+
private _cachedNormals;
|
|
24
|
+
private _normalsDirty;
|
|
13
25
|
constructor(points?: Array<Vector>, x?: number, y?: number);
|
|
14
26
|
get position(): Vector;
|
|
15
27
|
set position(position: Vector);
|
|
@@ -19,15 +31,37 @@ export declare class Polygon implements ShapeLike {
|
|
|
19
31
|
set y(y: number);
|
|
20
32
|
get points(): Array<Vector>;
|
|
21
33
|
set points(points: Array<Vector>);
|
|
34
|
+
/**
|
|
35
|
+
* The precomputed edge vectors (each edge is `points[i+1] - points[i]`).
|
|
36
|
+
* Updated automatically by {@link setPoints}. Read-only — mutating the
|
|
37
|
+
* returned array directly will desync the internal state.
|
|
38
|
+
*/
|
|
22
39
|
get edges(): Array<Vector>;
|
|
40
|
+
/** @deprecated Use {@link getNormals} for a stable cached reference. */
|
|
23
41
|
get normals(): Array<Vector>;
|
|
24
42
|
setPosition(x: number, y: number): this;
|
|
43
|
+
/**
|
|
44
|
+
* Replace this polygon's vertex array with `newPoints`. Reuses existing
|
|
45
|
+
* `Vector` instances where possible to avoid allocation. Recomputes edge
|
|
46
|
+
* vectors and invalidates the normal cache. Returns `this` for chaining.
|
|
47
|
+
*/
|
|
25
48
|
setPoints(newPoints: Array<Vector>): this;
|
|
26
49
|
set(x: number, y: number, points: Array<Vector>): this;
|
|
27
50
|
copy(polygon: Polygon): this;
|
|
28
51
|
clone(): this;
|
|
29
52
|
equals({ x, y, points }?: Partial<Polygon>): boolean;
|
|
30
53
|
getBounds(): Rectangle;
|
|
54
|
+
/**
|
|
55
|
+
* Returns the edge normals for this polygon.
|
|
56
|
+
*
|
|
57
|
+
* The returned array is cached and reused across calls — the same array
|
|
58
|
+
* reference is returned on consecutive calls when the polygon has not
|
|
59
|
+
* changed. The cache is invalidated automatically when `setPoints`,
|
|
60
|
+
* `setPosition`, `set`, or `copy` mutate the polygon.
|
|
61
|
+
*
|
|
62
|
+
* This matches the `Circle.getNormals()` and `Sprite.getNormals()`
|
|
63
|
+
* behaviour introduced in 0.6.19.
|
|
64
|
+
*/
|
|
31
65
|
getNormals(): Array<Vector>;
|
|
32
66
|
project(axis: Vector, result?: Interval): Interval;
|
|
33
67
|
contains(x: number, y: number): boolean;
|
package/dist/esm/math/Polygon.js
CHANGED
|
@@ -5,12 +5,24 @@ import { CollisionType } from './Collision.js';
|
|
|
5
5
|
import { intersectionPointPoly, intersectionLinePoly, intersectionEllipsePoly, intersectionCirclePoly, intersectionPolyPoly, intersectionRectPoly, getCollisionPolygonCircle, getCollisionSat } from './collision-detection.js';
|
|
6
6
|
|
|
7
7
|
let temp = null;
|
|
8
|
+
/**
|
|
9
|
+
* Mutable convex polygon defined by a world-space offset `(x, y)` and an
|
|
10
|
+
* array of local-space vertex {@link Vector}s. Implements {@link ShapeLike}
|
|
11
|
+
* with full SAT collision response.
|
|
12
|
+
*
|
|
13
|
+
* Edge vectors are recomputed whenever `setPoints` is called; normals are
|
|
14
|
+
* cached lazily and invalidated on any positional or point mutation.
|
|
15
|
+
*
|
|
16
|
+
* `Polygon.temp` is a shared scratch instance.
|
|
17
|
+
*/
|
|
8
18
|
class Polygon {
|
|
9
19
|
collisionType = CollisionType.Polygon;
|
|
10
20
|
_position;
|
|
11
21
|
_points = [];
|
|
12
22
|
_edges = [];
|
|
13
|
-
|
|
23
|
+
/** Cached normals — null until first getNormals() call; reused across calls. */
|
|
24
|
+
_cachedNormals = null;
|
|
25
|
+
_normalsDirty = true;
|
|
14
26
|
constructor(points = [], x = 0, y = 0) {
|
|
15
27
|
this._position = new Vector(x, y);
|
|
16
28
|
this.setPoints(points);
|
|
@@ -20,18 +32,21 @@ class Polygon {
|
|
|
20
32
|
}
|
|
21
33
|
set position(position) {
|
|
22
34
|
this._position.copy(position);
|
|
35
|
+
this._normalsDirty = true;
|
|
23
36
|
}
|
|
24
37
|
get x() {
|
|
25
38
|
return this._position.x;
|
|
26
39
|
}
|
|
27
40
|
set x(x) {
|
|
28
41
|
this._position.x = x;
|
|
42
|
+
this._normalsDirty = true;
|
|
29
43
|
}
|
|
30
44
|
get y() {
|
|
31
45
|
return this._position.y;
|
|
32
46
|
}
|
|
33
47
|
set y(y) {
|
|
34
48
|
this._position.y = y;
|
|
49
|
+
this._normalsDirty = true;
|
|
35
50
|
}
|
|
36
51
|
get points() {
|
|
37
52
|
return this._points;
|
|
@@ -39,16 +54,28 @@ class Polygon {
|
|
|
39
54
|
set points(points) {
|
|
40
55
|
this.setPoints(points);
|
|
41
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* The precomputed edge vectors (each edge is `points[i+1] - points[i]`).
|
|
59
|
+
* Updated automatically by {@link setPoints}. Read-only — mutating the
|
|
60
|
+
* returned array directly will desync the internal state.
|
|
61
|
+
*/
|
|
42
62
|
get edges() {
|
|
43
63
|
return this._edges;
|
|
44
64
|
}
|
|
65
|
+
/** @deprecated Use {@link getNormals} for a stable cached reference. */
|
|
45
66
|
get normals() {
|
|
46
|
-
return this.
|
|
67
|
+
return this.getNormals();
|
|
47
68
|
}
|
|
48
69
|
setPosition(x, y) {
|
|
49
70
|
this._position.set(x, y);
|
|
71
|
+
this._normalsDirty = true;
|
|
50
72
|
return this;
|
|
51
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* Replace this polygon's vertex array with `newPoints`. Reuses existing
|
|
76
|
+
* `Vector` instances where possible to avoid allocation. Recomputes edge
|
|
77
|
+
* vectors and invalidates the normal cache. Returns `this` for chaining.
|
|
78
|
+
*/
|
|
52
79
|
setPoints(newPoints) {
|
|
53
80
|
const len = this._points.length;
|
|
54
81
|
const newLen = newPoints.length;
|
|
@@ -60,31 +87,38 @@ class Polygon {
|
|
|
60
87
|
if (diff > 0) {
|
|
61
88
|
this._points.splice(newLen).forEach(point => point.destroy());
|
|
62
89
|
this._edges.splice(newLen).forEach(point => point.destroy());
|
|
63
|
-
|
|
90
|
+
// Trim the cached normals array if it exists and is longer than newLen.
|
|
91
|
+
if (this._cachedNormals !== null && this._cachedNormals.length > newLen) {
|
|
92
|
+
const removed = this._cachedNormals.splice(newLen);
|
|
93
|
+
for (const v of removed) {
|
|
94
|
+
v.destroy();
|
|
95
|
+
}
|
|
96
|
+
}
|
|
64
97
|
}
|
|
65
98
|
else if (diff < 0) {
|
|
66
99
|
for (let i = len; i < newLen; i++) {
|
|
67
100
|
this._points.push(newPoints[i].clone());
|
|
68
101
|
this._edges.push(newPoints[i].clone());
|
|
69
|
-
this._normals.push(newPoints[i].clone());
|
|
70
102
|
}
|
|
71
103
|
}
|
|
72
104
|
for (let i = 0; i < newLen; i++) {
|
|
73
105
|
const curr = this._points[i];
|
|
74
106
|
const next = this._points[(i + 1) % newLen];
|
|
75
107
|
this._edges[i].set(next.x - curr.x, next.y - curr.y);
|
|
76
|
-
this._normals[i].copy(this._edges[i]).rperp().normalize();
|
|
77
108
|
}
|
|
109
|
+
this._normalsDirty = true;
|
|
78
110
|
return this;
|
|
79
111
|
}
|
|
80
112
|
set(x, y, points) {
|
|
81
113
|
this._position.set(x, y);
|
|
82
114
|
this.setPoints(points);
|
|
115
|
+
this._normalsDirty = true;
|
|
83
116
|
return this;
|
|
84
117
|
}
|
|
85
118
|
copy(polygon) {
|
|
86
119
|
this._position.copy(polygon.position);
|
|
87
120
|
this.setPoints(polygon.points);
|
|
121
|
+
this._normalsDirty = true;
|
|
88
122
|
return this;
|
|
89
123
|
}
|
|
90
124
|
clone() {
|
|
@@ -109,8 +143,36 @@ class Polygon {
|
|
|
109
143
|
}
|
|
110
144
|
return new Rectangle(this.x + minX, this.y + minY, maxX - minX, maxY - minY);
|
|
111
145
|
}
|
|
146
|
+
/**
|
|
147
|
+
* Returns the edge normals for this polygon.
|
|
148
|
+
*
|
|
149
|
+
* The returned array is cached and reused across calls — the same array
|
|
150
|
+
* reference is returned on consecutive calls when the polygon has not
|
|
151
|
+
* changed. The cache is invalidated automatically when `setPoints`,
|
|
152
|
+
* `setPosition`, `set`, or `copy` mutate the polygon.
|
|
153
|
+
*
|
|
154
|
+
* This matches the `Circle.getNormals()` and `Sprite.getNormals()`
|
|
155
|
+
* behaviour introduced in 0.6.19.
|
|
156
|
+
*/
|
|
112
157
|
getNormals() {
|
|
113
|
-
|
|
158
|
+
if (this._normalsDirty) {
|
|
159
|
+
const n = this._points.length;
|
|
160
|
+
if (this._cachedNormals === null) {
|
|
161
|
+
this._cachedNormals = [];
|
|
162
|
+
}
|
|
163
|
+
// Grow the cache if needed (shrinking is handled in setPoints).
|
|
164
|
+
while (this._cachedNormals.length < n) {
|
|
165
|
+
this._cachedNormals.push(new Vector());
|
|
166
|
+
}
|
|
167
|
+
for (let i = 0; i < n; i++) {
|
|
168
|
+
this._cachedNormals[i]
|
|
169
|
+
.copy(this._edges[i])
|
|
170
|
+
.rperp()
|
|
171
|
+
.normalize();
|
|
172
|
+
}
|
|
173
|
+
this._normalsDirty = false;
|
|
174
|
+
}
|
|
175
|
+
return this._cachedNormals;
|
|
114
176
|
}
|
|
115
177
|
project(axis, result = new Interval()) {
|
|
116
178
|
const normal = axis.clone().normalize();
|
|
@@ -148,8 +210,18 @@ class Polygon {
|
|
|
148
210
|
for (const point of this._points) {
|
|
149
211
|
point.destroy();
|
|
150
212
|
}
|
|
213
|
+
for (const edge of this._edges) {
|
|
214
|
+
edge.destroy();
|
|
215
|
+
}
|
|
216
|
+
if (this._cachedNormals !== null) {
|
|
217
|
+
for (const v of this._cachedNormals) {
|
|
218
|
+
v.destroy();
|
|
219
|
+
}
|
|
220
|
+
this._cachedNormals = null;
|
|
221
|
+
}
|
|
151
222
|
this._position.destroy();
|
|
152
223
|
this._points.length = 0;
|
|
224
|
+
this._edges.length = 0;
|
|
153
225
|
}
|
|
154
226
|
static get temp() {
|
|
155
227
|
if (temp === null) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Polygon.js","sources":["../../../../src/math/Polygon.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAuBA,IAAI,IAAI,GAAmB,IAAI;
|
|
1
|
+
{"version":3,"file":"Polygon.js","sources":["../../../../src/math/Polygon.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import type { PointLike } from '@/math/PointLike';
|
|
2
|
+
/**
|
|
3
|
+
* Structural type for any object that describes a polygon via a world-space
|
|
4
|
+
* offset `(x, y)` and an array of local-space {@link PointLike} vertices.
|
|
5
|
+
*/
|
|
2
6
|
export interface PolygonLike {
|
|
3
7
|
x: number;
|
|
4
8
|
y: number;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { Rectangle } from './Rectangle';
|
|
2
|
+
/** An item stored in a {@link Quadtree}. Carries an axis-aligned bounding box and an arbitrary `payload`. */
|
|
3
|
+
export interface QuadtreeItem<T> {
|
|
4
|
+
bounds: Rectangle;
|
|
5
|
+
payload: T;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Generic recursive spatial index used by the engine's `InteractionManager`
|
|
9
|
+
* to accelerate per-frame hit-testing of scene nodes.
|
|
10
|
+
*
|
|
11
|
+
* Items are inserted with their axis-aligned bounding box; the tree
|
|
12
|
+
* automatically subdivides into four quadrants (NW/NE/SW/SE) when a node
|
|
13
|
+
* accumulates more than `maxItems` entries and the current depth is below
|
|
14
|
+
* `maxDepth`. Items that span multiple quadrants are kept at the current node
|
|
15
|
+
* rather than duplicated.
|
|
16
|
+
*
|
|
17
|
+
* The tree is persistent: `insert` and `remove` modify the tree in place
|
|
18
|
+
* without full rebuilds. Call `clear()` for bulk reset, or `destroy()` to
|
|
19
|
+
* release all memory including child rectangles.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```ts
|
|
23
|
+
* const qt = new Quadtree<SceneNode>(new Rectangle(0, 0, 1920, 1080));
|
|
24
|
+
* qt.insert({ bounds: node.getBounds(), payload: node });
|
|
25
|
+
* const hits = qt.queryPoint(mouseX, mouseY);
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export declare class Quadtree<T> {
|
|
29
|
+
private readonly _bounds;
|
|
30
|
+
private readonly _maxItems;
|
|
31
|
+
private readonly _maxDepth;
|
|
32
|
+
private readonly _depth;
|
|
33
|
+
private _items;
|
|
34
|
+
private _children;
|
|
35
|
+
constructor(bounds: Rectangle, maxItems?: number, maxDepth?: number, depth?: number);
|
|
36
|
+
/**
|
|
37
|
+
* Insert `item` into the tree. If this node is full and below `maxDepth`,
|
|
38
|
+
* it subdivides first. Items whose bounds span multiple child quadrants are
|
|
39
|
+
* stored at the current node to avoid duplication.
|
|
40
|
+
*/
|
|
41
|
+
insert(item: QuadtreeItem<T>): void;
|
|
42
|
+
/**
|
|
43
|
+
* Returns all items whose bounds contain the point `(x, y)`.
|
|
44
|
+
*
|
|
45
|
+
* The optional `results` parameter allows callers to provide a
|
|
46
|
+
* pre-allocated array that will be reused across calls. The array is
|
|
47
|
+
* **appended to** (not replaced), so callers should reset it (e.g.
|
|
48
|
+
* `buf.length = 0`) before passing it in when a fresh result set is
|
|
49
|
+
* needed. The same array reference is returned.
|
|
50
|
+
*
|
|
51
|
+
* Omitting `results` allocates a new array on every call. For
|
|
52
|
+
* hot paths (e.g. per-frame hit-testing) prefer passing a persistent
|
|
53
|
+
* buffer to avoid allocation pressure.
|
|
54
|
+
*/
|
|
55
|
+
queryPoint(x: number, y: number, results?: Array<QuadtreeItem<T>>): Array<QuadtreeItem<T>>;
|
|
56
|
+
/**
|
|
57
|
+
* Return all items whose bounds overlap the axis-aligned `rect`.
|
|
58
|
+
*
|
|
59
|
+
* Same reuse semantics as {@link queryPoint}: pass a persistent buffer and
|
|
60
|
+
* reset it (`buf.length = 0`) before each call to avoid allocations on hot
|
|
61
|
+
* paths.
|
|
62
|
+
*/
|
|
63
|
+
queryRect(rect: Rectangle, results?: Array<QuadtreeItem<T>>): Array<QuadtreeItem<T>>;
|
|
64
|
+
/**
|
|
65
|
+
* Remove the first occurrence of `item` from this subtree by object
|
|
66
|
+
* identity. Returns `true` if the item was found and removed, `false`
|
|
67
|
+
* otherwise. This is an O(n) walk of every node in the affected
|
|
68
|
+
* subtree; prefer `clear()` for bulk removal.
|
|
69
|
+
*/
|
|
70
|
+
remove(item: QuadtreeItem<T>): boolean;
|
|
71
|
+
/** Remove all items and collapse all child nodes. Child `Quadtree` instances are retained but reset. */
|
|
72
|
+
clear(): void;
|
|
73
|
+
/**
|
|
74
|
+
* Walk every subdivided region's bounding rectangle, calling `callback`
|
|
75
|
+
* once per node in the tree (including the root). Used by
|
|
76
|
+
* {@link HitTestLayer} to visualise quadtree partitioning. Not part of
|
|
77
|
+
* the stable public API — friend-class access only.
|
|
78
|
+
*
|
|
79
|
+
* @internal
|
|
80
|
+
*/
|
|
81
|
+
_walkBounds(callback: (rect: Rectangle) => void): void;
|
|
82
|
+
destroy(): void;
|
|
83
|
+
private _subdivide;
|
|
84
|
+
}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import { Rectangle } from './Rectangle.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Generic recursive spatial index used by the engine's `InteractionManager`
|
|
5
|
+
* to accelerate per-frame hit-testing of scene nodes.
|
|
6
|
+
*
|
|
7
|
+
* Items are inserted with their axis-aligned bounding box; the tree
|
|
8
|
+
* automatically subdivides into four quadrants (NW/NE/SW/SE) when a node
|
|
9
|
+
* accumulates more than `maxItems` entries and the current depth is below
|
|
10
|
+
* `maxDepth`. Items that span multiple quadrants are kept at the current node
|
|
11
|
+
* rather than duplicated.
|
|
12
|
+
*
|
|
13
|
+
* The tree is persistent: `insert` and `remove` modify the tree in place
|
|
14
|
+
* without full rebuilds. Call `clear()` for bulk reset, or `destroy()` to
|
|
15
|
+
* release all memory including child rectangles.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* const qt = new Quadtree<SceneNode>(new Rectangle(0, 0, 1920, 1080));
|
|
20
|
+
* qt.insert({ bounds: node.getBounds(), payload: node });
|
|
21
|
+
* const hits = qt.queryPoint(mouseX, mouseY);
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
class Quadtree {
|
|
25
|
+
_bounds;
|
|
26
|
+
_maxItems;
|
|
27
|
+
_maxDepth;
|
|
28
|
+
_depth;
|
|
29
|
+
_items;
|
|
30
|
+
_children;
|
|
31
|
+
constructor(bounds, maxItems = 8, maxDepth = 5, depth = 0) {
|
|
32
|
+
this._bounds = bounds;
|
|
33
|
+
this._maxItems = maxItems;
|
|
34
|
+
this._maxDepth = maxDepth;
|
|
35
|
+
this._depth = depth;
|
|
36
|
+
this._items = [];
|
|
37
|
+
this._children = null;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Insert `item` into the tree. If this node is full and below `maxDepth`,
|
|
41
|
+
* it subdivides first. Items whose bounds span multiple child quadrants are
|
|
42
|
+
* stored at the current node to avoid duplication.
|
|
43
|
+
*/
|
|
44
|
+
insert(item) {
|
|
45
|
+
// If not subdivided and under capacity, store here.
|
|
46
|
+
if (this._children === null && this._items.length < this._maxItems) {
|
|
47
|
+
this._items.push(item);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
// Subdivide if we haven't yet and depth allows.
|
|
51
|
+
if (this._children === null && this._depth < this._maxDepth) {
|
|
52
|
+
this._subdivide();
|
|
53
|
+
}
|
|
54
|
+
// Try to push into a single child whose bounds fully contain the item.
|
|
55
|
+
if (this._children !== null) {
|
|
56
|
+
for (const child of this._children) {
|
|
57
|
+
if (child._bounds.containsRect(item.bounds)) {
|
|
58
|
+
child.insert(item);
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// No single child fully contains it — keep at this node.
|
|
64
|
+
this._items.push(item);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Returns all items whose bounds contain the point `(x, y)`.
|
|
68
|
+
*
|
|
69
|
+
* The optional `results` parameter allows callers to provide a
|
|
70
|
+
* pre-allocated array that will be reused across calls. The array is
|
|
71
|
+
* **appended to** (not replaced), so callers should reset it (e.g.
|
|
72
|
+
* `buf.length = 0`) before passing it in when a fresh result set is
|
|
73
|
+
* needed. The same array reference is returned.
|
|
74
|
+
*
|
|
75
|
+
* Omitting `results` allocates a new array on every call. For
|
|
76
|
+
* hot paths (e.g. per-frame hit-testing) prefer passing a persistent
|
|
77
|
+
* buffer to avoid allocation pressure.
|
|
78
|
+
*/
|
|
79
|
+
queryPoint(x, y, results = []) {
|
|
80
|
+
if (!this._bounds.contains(x, y)) {
|
|
81
|
+
return results;
|
|
82
|
+
}
|
|
83
|
+
for (const item of this._items) {
|
|
84
|
+
if (item.bounds.contains(x, y)) {
|
|
85
|
+
results.push(item);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (this._children !== null) {
|
|
89
|
+
for (const child of this._children) {
|
|
90
|
+
child.queryPoint(x, y, results);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return results;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Return all items whose bounds overlap the axis-aligned `rect`.
|
|
97
|
+
*
|
|
98
|
+
* Same reuse semantics as {@link queryPoint}: pass a persistent buffer and
|
|
99
|
+
* reset it (`buf.length = 0`) before each call to avoid allocations on hot
|
|
100
|
+
* paths.
|
|
101
|
+
*/
|
|
102
|
+
queryRect(rect, results = []) {
|
|
103
|
+
// Check intersection using left/right/top/bottom comparisons to avoid
|
|
104
|
+
// needing a full Rectangle.intersectsWith() call with collision dispatch.
|
|
105
|
+
if (rect.right < this._bounds.left
|
|
106
|
+
|| rect.left > this._bounds.right
|
|
107
|
+
|| rect.bottom < this._bounds.top
|
|
108
|
+
|| rect.top > this._bounds.bottom) {
|
|
109
|
+
return results;
|
|
110
|
+
}
|
|
111
|
+
for (const item of this._items) {
|
|
112
|
+
if (!(item.bounds.right < rect.left
|
|
113
|
+
|| item.bounds.left > rect.right
|
|
114
|
+
|| item.bounds.bottom < rect.top
|
|
115
|
+
|| item.bounds.top > rect.bottom)) {
|
|
116
|
+
results.push(item);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if (this._children !== null) {
|
|
120
|
+
for (const child of this._children) {
|
|
121
|
+
child.queryRect(rect, results);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return results;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Remove the first occurrence of `item` from this subtree by object
|
|
128
|
+
* identity. Returns `true` if the item was found and removed, `false`
|
|
129
|
+
* otherwise. This is an O(n) walk of every node in the affected
|
|
130
|
+
* subtree; prefer `clear()` for bulk removal.
|
|
131
|
+
*/
|
|
132
|
+
remove(item) {
|
|
133
|
+
const index = this._items.indexOf(item);
|
|
134
|
+
if (index !== -1) {
|
|
135
|
+
this._items.splice(index, 1);
|
|
136
|
+
return true;
|
|
137
|
+
}
|
|
138
|
+
if (this._children !== null) {
|
|
139
|
+
for (const child of this._children) {
|
|
140
|
+
if (child.remove(item)) {
|
|
141
|
+
return true;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
/** Remove all items and collapse all child nodes. Child `Quadtree` instances are retained but reset. */
|
|
148
|
+
clear() {
|
|
149
|
+
this._items.length = 0;
|
|
150
|
+
if (this._children !== null) {
|
|
151
|
+
for (const child of this._children) {
|
|
152
|
+
child.clear();
|
|
153
|
+
}
|
|
154
|
+
this._children = null;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Walk every subdivided region's bounding rectangle, calling `callback`
|
|
159
|
+
* once per node in the tree (including the root). Used by
|
|
160
|
+
* {@link HitTestLayer} to visualise quadtree partitioning. Not part of
|
|
161
|
+
* the stable public API — friend-class access only.
|
|
162
|
+
*
|
|
163
|
+
* @internal
|
|
164
|
+
*/
|
|
165
|
+
_walkBounds(callback) {
|
|
166
|
+
callback(this._bounds);
|
|
167
|
+
if (this._children !== null) {
|
|
168
|
+
for (const child of this._children) {
|
|
169
|
+
child._walkBounds(callback);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
destroy() {
|
|
174
|
+
this._items.length = 0;
|
|
175
|
+
this._bounds.destroy();
|
|
176
|
+
if (this._children !== null) {
|
|
177
|
+
for (const child of this._children) {
|
|
178
|
+
child.destroy();
|
|
179
|
+
}
|
|
180
|
+
this._children = null;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
_subdivide() {
|
|
184
|
+
const { x, y, width, height } = this._bounds;
|
|
185
|
+
const halfW = width / 2;
|
|
186
|
+
const halfH = height / 2;
|
|
187
|
+
const depth = this._depth + 1;
|
|
188
|
+
const maxItems = this._maxItems;
|
|
189
|
+
const maxDepth = this._maxDepth;
|
|
190
|
+
this._children = [
|
|
191
|
+
// NW
|
|
192
|
+
new Quadtree(new Rectangle(x, y, halfW, halfH), maxItems, maxDepth, depth),
|
|
193
|
+
// NE
|
|
194
|
+
new Quadtree(new Rectangle(x + halfW, y, halfW, halfH), maxItems, maxDepth, depth),
|
|
195
|
+
// SW
|
|
196
|
+
new Quadtree(new Rectangle(x, y + halfH, halfW, halfH), maxItems, maxDepth, depth),
|
|
197
|
+
// SE
|
|
198
|
+
new Quadtree(new Rectangle(x + halfW, y + halfH, halfW, halfH), maxItems, maxDepth, depth),
|
|
199
|
+
];
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
export { Quadtree };
|
|
204
|
+
//# sourceMappingURL=Quadtree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Quadtree.js","sources":["../../../../src/math/Quadtree.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|