@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
|
@@ -2,6 +2,20 @@ import { Particle } from './Particle.js';
|
|
|
2
2
|
import { Rectangle } from '../math/Rectangle.js';
|
|
3
3
|
import { Drawable } from '../rendering/Drawable.js';
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* The central coordinator of the particle triad. `ParticleSystem` is a
|
|
7
|
+
* {@link Drawable} that owns a list of {@link ParticleEmitter} spawners, a
|
|
8
|
+
* list of {@link ParticleAffector} mutators, and the live/graveyard particle
|
|
9
|
+
* pools. Each call to {@link ParticleSystem.update} runs all emitters to
|
|
10
|
+
* spawn new particles, advances every live particle's position and lifetime,
|
|
11
|
+
* retires expired ones to the graveyard for pooling, and runs all affectors
|
|
12
|
+
* on the survivors.
|
|
13
|
+
*
|
|
14
|
+
* Rendering reads {@link ParticleSystem.vertices} and
|
|
15
|
+
* {@link ParticleSystem.texCoords} (lazily recomputed on texture-frame
|
|
16
|
+
* changes) plus the live {@link ParticleSystem.particles} array to draw each
|
|
17
|
+
* sprite.
|
|
18
|
+
*/
|
|
5
19
|
class ParticleSystem extends Drawable {
|
|
6
20
|
_emitters = [];
|
|
7
21
|
_affectors = [];
|
|
@@ -30,6 +44,12 @@ class ParticleSystem extends Drawable {
|
|
|
30
44
|
set textureFrame(frame) {
|
|
31
45
|
this.setTextureFrame(frame);
|
|
32
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Quad corner offsets for the current {@link textureFrame}, in local
|
|
49
|
+
* space as `[minX, minY, maxX, maxY]`. Recomputed lazily whenever
|
|
50
|
+
* `textureFrame` changes. Used by the renderer to position each particle
|
|
51
|
+
* sprite relative to its world position.
|
|
52
|
+
*/
|
|
33
53
|
get vertices() {
|
|
34
54
|
if (this._updateVertices) {
|
|
35
55
|
const { x, y, width, height } = this._textureFrame;
|
|
@@ -43,6 +63,12 @@ class ParticleSystem extends Drawable {
|
|
|
43
63
|
}
|
|
44
64
|
return this._vertices;
|
|
45
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Packed UV coordinates for the current {@link textureFrame} as four
|
|
68
|
+
* `Uint32` values, each encoding a `(u, v)` pair in the upper/lower 16
|
|
69
|
+
* bits (normalised to 0–65535). Vertex order respects
|
|
70
|
+
* {@link Texture.flipY}. Recomputed lazily on texture or frame changes.
|
|
71
|
+
*/
|
|
46
72
|
get texCoords() {
|
|
47
73
|
if (this._updateTexCoords) {
|
|
48
74
|
const { width, height } = this._texture;
|
|
@@ -76,9 +102,18 @@ class ParticleSystem extends Drawable {
|
|
|
76
102
|
get particles() {
|
|
77
103
|
return this._particles;
|
|
78
104
|
}
|
|
105
|
+
/**
|
|
106
|
+
* Pool of expired {@link Particle} instances waiting to be recycled.
|
|
107
|
+
* {@link requestParticle} pops from this array before allocating a new
|
|
108
|
+
* instance, keeping GC pressure low during sustained emission.
|
|
109
|
+
*/
|
|
79
110
|
get graveyard() {
|
|
80
111
|
return this._graveyard;
|
|
81
112
|
}
|
|
113
|
+
/**
|
|
114
|
+
* Replaces the particle sprite texture and resets the texture frame to
|
|
115
|
+
* cover the full new texture. No-ops if `texture` is the same instance.
|
|
116
|
+
*/
|
|
82
117
|
setTexture(texture) {
|
|
83
118
|
if (this._texture !== texture) {
|
|
84
119
|
this._texture = texture;
|
|
@@ -86,20 +121,29 @@ class ParticleSystem extends Drawable {
|
|
|
86
121
|
}
|
|
87
122
|
return this;
|
|
88
123
|
}
|
|
124
|
+
/**
|
|
125
|
+
* Sets the sub-rectangle of the texture used as the particle sprite,
|
|
126
|
+
* invalidating cached vertices and UV coordinates and updating the system's
|
|
127
|
+
* local bounds to match the frame dimensions.
|
|
128
|
+
*/
|
|
89
129
|
setTextureFrame(frame) {
|
|
90
130
|
this._textureFrame.copy(frame);
|
|
91
131
|
this._updateTexCoords = true;
|
|
92
132
|
this._updateVertices = true;
|
|
93
133
|
this.localBounds.set(0, 0, frame.width, frame.height);
|
|
134
|
+
this._invalidateBoundsCascade();
|
|
94
135
|
return this;
|
|
95
136
|
}
|
|
137
|
+
/** Resets the texture frame to the full dimensions of the current texture. */
|
|
96
138
|
resetTextureFrame() {
|
|
97
139
|
return this.setTextureFrame(Rectangle.temp.set(0, 0, this._texture.width, this._texture.height));
|
|
98
140
|
}
|
|
141
|
+
/** Registers `emitter` to be called each tick during {@link update}. */
|
|
99
142
|
addEmitter(emitter) {
|
|
100
143
|
this._emitters.push(emitter);
|
|
101
144
|
return this;
|
|
102
145
|
}
|
|
146
|
+
/** Destroys and removes all registered emitters. */
|
|
103
147
|
clearEmitters() {
|
|
104
148
|
for (const emitter of this._emitters) {
|
|
105
149
|
emitter.destroy();
|
|
@@ -107,10 +151,12 @@ class ParticleSystem extends Drawable {
|
|
|
107
151
|
this._emitters.length = 0;
|
|
108
152
|
return this;
|
|
109
153
|
}
|
|
154
|
+
/** Registers `affector` to run on every live particle each tick during {@link update}. */
|
|
110
155
|
addAffector(affector) {
|
|
111
156
|
this._affectors.push(affector);
|
|
112
157
|
return this;
|
|
113
158
|
}
|
|
159
|
+
/** Destroys and removes all registered affectors. */
|
|
114
160
|
clearAffectors() {
|
|
115
161
|
for (const affector of this._affectors) {
|
|
116
162
|
affector.destroy();
|
|
@@ -118,13 +164,26 @@ class ParticleSystem extends Drawable {
|
|
|
118
164
|
this._affectors.length = 0;
|
|
119
165
|
return this;
|
|
120
166
|
}
|
|
167
|
+
/**
|
|
168
|
+
* Returns a recycled particle from the {@link graveyard}, or allocates a
|
|
169
|
+
* new one if the pool is empty. Call {@link Particle.applyOptions}
|
|
170
|
+
* immediately after to reset its state before passing it to
|
|
171
|
+
* {@link emitParticle}.
|
|
172
|
+
*/
|
|
121
173
|
requestParticle() {
|
|
122
174
|
return this._graveyard.pop() || new Particle();
|
|
123
175
|
}
|
|
176
|
+
/** Adds a fully-configured `particle` to the live pool. Typically called by emitters. */
|
|
124
177
|
emitParticle(particle) {
|
|
125
178
|
this._particles.push(particle);
|
|
126
179
|
return this;
|
|
127
180
|
}
|
|
181
|
+
/**
|
|
182
|
+
* Advances a single particle by one `delta` step: increments
|
|
183
|
+
* `elapsedLifetime`, integrates velocity into position, and applies
|
|
184
|
+
* `rotationSpeed` to rotation. Called for every live particle by
|
|
185
|
+
* {@link update} before the affector pass.
|
|
186
|
+
*/
|
|
128
187
|
updateParticle(particle, delta) {
|
|
129
188
|
const seconds = delta.seconds;
|
|
130
189
|
particle.elapsedLifetime.addTime(delta);
|
|
@@ -132,6 +191,10 @@ class ParticleSystem extends Drawable {
|
|
|
132
191
|
particle.rotation += (seconds * particle.rotationSpeed);
|
|
133
192
|
return this;
|
|
134
193
|
}
|
|
194
|
+
/**
|
|
195
|
+
* Destroys and removes all particles from both the live pool and the
|
|
196
|
+
* graveyard. Use when resetting or recycling the entire system.
|
|
197
|
+
*/
|
|
135
198
|
clearParticles() {
|
|
136
199
|
for (const particle of this._particles) {
|
|
137
200
|
particle.destroy();
|
|
@@ -143,6 +206,13 @@ class ParticleSystem extends Drawable {
|
|
|
143
206
|
this._graveyard.length = 0;
|
|
144
207
|
return this;
|
|
145
208
|
}
|
|
209
|
+
/**
|
|
210
|
+
* Advances the full simulation by one `delta` step: runs all emitters,
|
|
211
|
+
* then for each live particle calls {@link updateParticle}, moves expired
|
|
212
|
+
* ones to the {@link graveyard}, and runs all affectors on survivors.
|
|
213
|
+
* The particle array is iterated in reverse to allow in-place splice
|
|
214
|
+
* without re-indexing.
|
|
215
|
+
*/
|
|
146
216
|
update(delta) {
|
|
147
217
|
const emitters = this._emitters;
|
|
148
218
|
const affectors = this._affectors;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParticleSystem.js","sources":["../../../../src/particles/ParticleSystem.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"ParticleSystem.js","sources":["../../../../src/particles/ParticleSystem.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,13 @@ import type { ParticleAffector } from '@/particles/affectors/ParticleAffector';
|
|
|
2
2
|
import type { Color } from '@/core/Color';
|
|
3
3
|
import type { Particle } from '@/particles/Particle';
|
|
4
4
|
import type { Time } from '@/core/Time';
|
|
5
|
+
/**
|
|
6
|
+
* Linearly interpolates a particle's {@link Particle.tint} from `fromColor`
|
|
7
|
+
* to `toColor` over the particle's full lifetime. The blend factor is
|
|
8
|
+
* {@link Particle.elapsedRatio} — 0 at birth, 1 at expiry — so the
|
|
9
|
+
* transition is always proportional to how long the particle has lived
|
|
10
|
+
* regardless of delta size.
|
|
11
|
+
*/
|
|
5
12
|
export declare class ColorAffector implements ParticleAffector {
|
|
6
13
|
private readonly _fromColor;
|
|
7
14
|
private readonly _toColor;
|
|
@@ -12,6 +19,12 @@ export declare class ColorAffector implements ParticleAffector {
|
|
|
12
19
|
set toColor(color: Color);
|
|
13
20
|
setFromColor(color: Color): this;
|
|
14
21
|
setToColor(color: Color): this;
|
|
22
|
+
/**
|
|
23
|
+
* Sets `particle.tint` to the RGBA value interpolated between
|
|
24
|
+
* {@link fromColor} and {@link toColor} at the particle's current
|
|
25
|
+
* {@link Particle.elapsedRatio}. `delta` is unused but required by the
|
|
26
|
+
* {@link ParticleAffector} contract.
|
|
27
|
+
*/
|
|
15
28
|
apply(particle: Particle, delta: Time): this;
|
|
16
29
|
destroy(): void;
|
|
17
30
|
}
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Linearly interpolates a particle's {@link Particle.tint} from `fromColor`
|
|
3
|
+
* to `toColor` over the particle's full lifetime. The blend factor is
|
|
4
|
+
* {@link Particle.elapsedRatio} — 0 at birth, 1 at expiry — so the
|
|
5
|
+
* transition is always proportional to how long the particle has lived
|
|
6
|
+
* regardless of delta size.
|
|
7
|
+
*/
|
|
1
8
|
class ColorAffector {
|
|
2
9
|
_fromColor;
|
|
3
10
|
_toColor;
|
|
@@ -25,6 +32,12 @@ class ColorAffector {
|
|
|
25
32
|
this._toColor.copy(color);
|
|
26
33
|
return this;
|
|
27
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Sets `particle.tint` to the RGBA value interpolated between
|
|
37
|
+
* {@link fromColor} and {@link toColor} at the particle's current
|
|
38
|
+
* {@link Particle.elapsedRatio}. `delta` is unused but required by the
|
|
39
|
+
* {@link ParticleAffector} contract.
|
|
40
|
+
*/
|
|
28
41
|
apply(particle, delta) {
|
|
29
42
|
const ratio = particle.elapsedRatio;
|
|
30
43
|
const { r: r1, g: g1, b: b1, a: a1 } = this._fromColor;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColorAffector.js","sources":["../../../../../src/particles/affectors/ColorAffector.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ColorAffector.js","sources":["../../../../../src/particles/affectors/ColorAffector.ts"],"sourcesContent":[null],"names":[],"mappings":"AAKA;;;;;;AAMG;MACU,aAAa,CAAA;AAEL,IAAA,UAAU;AACV,IAAA,QAAQ;IAEzB,WAAA,CAAmB,SAAgB,EAAE,OAAc,EAAA;AAC/C,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,KAAK,EAAE;AACnC,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,KAAK,EAAE;IACnC;AAEA,IAAA,IAAW,SAAS,GAAA;QAChB,OAAO,IAAI,CAAC,UAAU;IAC1B;IAEA,IAAW,SAAS,CAAC,KAAK,EAAA;AACtB,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;IAC5B;AAEA,IAAA,IAAW,OAAO,GAAA;QACd,OAAO,IAAI,CAAC,QAAQ;IACxB;IAEA,IAAW,OAAO,CAAC,KAAK,EAAA;AACpB,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;IAC1B;AAEO,IAAA,YAAY,CAAC,KAAY,EAAA;AAC5B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;AAE3B,QAAA,OAAO,IAAI;IACf;AAEO,IAAA,UAAU,CAAC,KAAY,EAAA;AAC1B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;AAEzB,QAAA,OAAO,IAAI;IACf;AAEA;;;;;AAKG;IACI,KAAK,CAAC,QAAkB,EAAE,KAAW,EAAA;AACxC,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY;QAClC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,UAAU;QACtD,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ;QAErD,QAAQ,CAAC,IAAI,CAAC,GAAG,CACb,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,KAAK,IAAI,EAAE,EACxB,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,KAAK,IAAI,EAAE,EACxB,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,KAAK,IAAI,EAAE,EACxB,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,KAAK,IAAI,EAAE,CAC3B;AAED,QAAA,OAAO,IAAI;IACf;IAEO,OAAO,GAAA;AACV,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;IAC3B;AACH;;;;"}
|
|
@@ -2,12 +2,23 @@ import type { ParticleAffector } from '@/particles/affectors/ParticleAffector';
|
|
|
2
2
|
import { Vector } from '@/math/Vector';
|
|
3
3
|
import type { Particle } from '@/particles/Particle';
|
|
4
4
|
import type { Time } from '@/core/Time';
|
|
5
|
+
/**
|
|
6
|
+
* Applies a constant 2-D acceleration to every particle's
|
|
7
|
+
* {@link Particle.velocity} each tick, simulating forces such as gravity
|
|
8
|
+
* (`new ForceAffector(0, 980)`) or wind. Velocity is mutated in place;
|
|
9
|
+
* the system then integrates position from velocity in
|
|
10
|
+
* {@link ParticleSystem.updateParticle}.
|
|
11
|
+
*/
|
|
5
12
|
export declare class ForceAffector implements ParticleAffector {
|
|
6
13
|
private readonly _acceleration;
|
|
7
14
|
constructor(accelerationX: number, accelerationY: number);
|
|
8
15
|
get acceleration(): Vector;
|
|
9
16
|
set acceleration(acceleration: Vector);
|
|
10
17
|
setAcceleration(acceleration: Vector): this;
|
|
18
|
+
/**
|
|
19
|
+
* Adds `acceleration * delta.seconds` to `particle.velocity`, implementing
|
|
20
|
+
* Euler integration for the configured force vector.
|
|
21
|
+
*/
|
|
11
22
|
apply(particle: Particle, delta: Time): this;
|
|
12
23
|
destroy(): void;
|
|
13
24
|
}
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import { Vector } from '../../math/Vector.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Applies a constant 2-D acceleration to every particle's
|
|
5
|
+
* {@link Particle.velocity} each tick, simulating forces such as gravity
|
|
6
|
+
* (`new ForceAffector(0, 980)`) or wind. Velocity is mutated in place;
|
|
7
|
+
* the system then integrates position from velocity in
|
|
8
|
+
* {@link ParticleSystem.updateParticle}.
|
|
9
|
+
*/
|
|
3
10
|
class ForceAffector {
|
|
4
11
|
_acceleration;
|
|
5
12
|
constructor(accelerationX, accelerationY) {
|
|
@@ -15,6 +22,10 @@ class ForceAffector {
|
|
|
15
22
|
this._acceleration.copy(acceleration);
|
|
16
23
|
return this;
|
|
17
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* Adds `acceleration * delta.seconds` to `particle.velocity`, implementing
|
|
27
|
+
* Euler integration for the configured force vector.
|
|
28
|
+
*/
|
|
18
29
|
apply(particle, delta) {
|
|
19
30
|
particle.velocity.add(delta.seconds * this._acceleration.x, delta.seconds * this._acceleration.y);
|
|
20
31
|
return this;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ForceAffector.js","sources":["../../../../../src/particles/affectors/ForceAffector.ts"],"sourcesContent":[null],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"ForceAffector.js","sources":["../../../../../src/particles/affectors/ForceAffector.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAKA;;;;;;AAMG;MACU,aAAa,CAAA;AAEL,IAAA,aAAa;IAE9B,WAAA,CAAmB,aAAqB,EAAE,aAAqB,EAAA;QAC3D,IAAI,CAAC,aAAa,GAAG,IAAI,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC;IACjE;AAEA,IAAA,IAAW,YAAY,GAAA;QACnB,OAAO,IAAI,CAAC,aAAa;IAC7B;IAEA,IAAW,YAAY,CAAC,YAAoB,EAAA;AACxC,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC;IACtC;AAEO,IAAA,eAAe,CAAC,YAAoB,EAAA;AACvC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC;AAErC,QAAA,OAAO,IAAI;IACf;AAEA;;;AAGG;IACI,KAAK,CAAC,QAAkB,EAAE,KAAW,EAAA;QACxC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CACjB,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,EACpC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CACvC;AAED,QAAA,OAAO,IAAI;IACf;IAEO,OAAO,GAAA;AACV,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;IAChC;AACH;;;;"}
|
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
import type { Particle } from '@/particles/Particle';
|
|
2
2
|
import type { Time } from '@/core/Time';
|
|
3
|
+
/**
|
|
4
|
+
* Contract for all per-particle mutators that run once per tick. Each
|
|
5
|
+
* affector is registered on a {@link ParticleSystem} and called after
|
|
6
|
+
* position integration for every live particle. Concrete implementations
|
|
7
|
+
* (e.g. {@link ColorAffector}, {@link ForceAffector}, {@link ScaleAffector},
|
|
8
|
+
* {@link TorqueAffector}) mutate one or more {@link ParticleProperties} fields
|
|
9
|
+
* in place.
|
|
10
|
+
*/
|
|
3
11
|
export interface ParticleAffector {
|
|
12
|
+
/**
|
|
13
|
+
* Mutates `particle` properties for the current `delta` timestep.
|
|
14
|
+
* Called by {@link ParticleSystem.update} for every non-expired particle.
|
|
15
|
+
*/
|
|
4
16
|
apply(particle: Particle, delta: Time): this;
|
|
17
|
+
/** Releases any resources owned by this affector. */
|
|
5
18
|
destroy(): void;
|
|
6
19
|
}
|
|
@@ -2,12 +2,22 @@ import type { ParticleAffector } from '@/particles/affectors/ParticleAffector';
|
|
|
2
2
|
import { Vector } from '@/math/Vector';
|
|
3
3
|
import type { Time } from '@/core/Time';
|
|
4
4
|
import type { Particle } from '@/particles/Particle';
|
|
5
|
+
/**
|
|
6
|
+
* Additively grows or shrinks a particle's {@link Particle.scale} each tick
|
|
7
|
+
* by a constant rate vector. A positive factor enlarges the sprite; a
|
|
8
|
+
* negative factor shrinks it. Use `new ScaleAffector(-1, -1)` to make
|
|
9
|
+
* particles fade out in size over one second.
|
|
10
|
+
*/
|
|
5
11
|
export declare class ScaleAffector implements ParticleAffector {
|
|
6
12
|
private readonly _scaleFactor;
|
|
7
13
|
constructor(factorX: number, factorY: number);
|
|
8
14
|
get scaleFactor(): Vector;
|
|
9
15
|
set scaleFactor(scaleFactor: Vector);
|
|
10
16
|
setScaleFactor(scaleFactor: Vector): this;
|
|
17
|
+
/**
|
|
18
|
+
* Adds `scaleFactor * delta.seconds` to `particle.scale` on both axes,
|
|
19
|
+
* implementing linear scale drift for the configured rate.
|
|
20
|
+
*/
|
|
11
21
|
apply(particle: Particle, delta: Time): this;
|
|
12
22
|
destroy(): void;
|
|
13
23
|
}
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import { Vector } from '../../math/Vector.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Additively grows or shrinks a particle's {@link Particle.scale} each tick
|
|
5
|
+
* by a constant rate vector. A positive factor enlarges the sprite; a
|
|
6
|
+
* negative factor shrinks it. Use `new ScaleAffector(-1, -1)` to make
|
|
7
|
+
* particles fade out in size over one second.
|
|
8
|
+
*/
|
|
3
9
|
class ScaleAffector {
|
|
4
10
|
_scaleFactor;
|
|
5
11
|
constructor(factorX, factorY) {
|
|
@@ -15,6 +21,10 @@ class ScaleAffector {
|
|
|
15
21
|
this._scaleFactor.copy(scaleFactor);
|
|
16
22
|
return this;
|
|
17
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* Adds `scaleFactor * delta.seconds` to `particle.scale` on both axes,
|
|
26
|
+
* implementing linear scale drift for the configured rate.
|
|
27
|
+
*/
|
|
18
28
|
apply(particle, delta) {
|
|
19
29
|
particle.scale.add(delta.seconds * this._scaleFactor.x, delta.seconds * this._scaleFactor.y);
|
|
20
30
|
return this;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScaleAffector.js","sources":["../../../../../src/particles/affectors/ScaleAffector.ts"],"sourcesContent":[null],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"ScaleAffector.js","sources":["../../../../../src/particles/affectors/ScaleAffector.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAKA;;;;;AAKG;MACU,aAAa,CAAA;AAEL,IAAA,YAAY;IAE7B,WAAA,CAAmB,OAAe,EAAE,OAAe,EAAA;QAC/C,IAAI,CAAC,YAAY,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC;IACpD;AAEA,IAAA,IAAW,WAAW,GAAA;QAClB,OAAO,IAAI,CAAC,YAAY;IAC5B;IAEA,IAAW,WAAW,CAAC,WAAmB,EAAA;AACtC,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC;IACpC;AAEO,IAAA,cAAc,CAAC,WAAmB,EAAA;AACrC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;AAEnC,QAAA,OAAO,IAAI;IACf;AAEA;;;AAGG;IACI,KAAK,CAAC,QAAkB,EAAE,KAAW,EAAA;QACxC,QAAQ,CAAC,KAAK,CAAC,GAAG,CACd,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,EACnC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CACtC;AAED,QAAA,OAAO,IAAI;IACf;IAEO,OAAO,GAAA;AACV,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;IAC/B;AACH;;;;"}
|
|
@@ -1,12 +1,23 @@
|
|
|
1
1
|
import type { ParticleAffector } from '@/particles/affectors/ParticleAffector';
|
|
2
2
|
import type { Particle } from '@/particles/Particle';
|
|
3
3
|
import type { Time } from '@/core/Time';
|
|
4
|
+
/**
|
|
5
|
+
* Accelerates a particle's angular velocity ({@link Particle.rotationSpeed})
|
|
6
|
+
* by a constant `angularAcceleration` (degrees per second²) each tick.
|
|
7
|
+
* The updated `rotationSpeed` is then integrated into
|
|
8
|
+
* {@link Particle.rotation} by {@link ParticleSystem.updateParticle}.
|
|
9
|
+
* Use a negative value to decelerate spin over time.
|
|
10
|
+
*/
|
|
4
11
|
export declare class TorqueAffector implements ParticleAffector {
|
|
5
12
|
private _angularAcceleration;
|
|
6
13
|
constructor(angularAcceleration: number);
|
|
7
14
|
get angularAcceleration(): number;
|
|
8
15
|
set angularAcceleration(angularAcceleration: number);
|
|
9
16
|
setAngularAcceleration(angularAcceleration: number): this;
|
|
17
|
+
/**
|
|
18
|
+
* Adds `angularAcceleration * delta.seconds` to `particle.rotationSpeed`,
|
|
19
|
+
* increasing or decreasing spin rate for this timestep.
|
|
20
|
+
*/
|
|
10
21
|
apply(particle: Particle, delta: Time): this;
|
|
11
22
|
destroy(): void;
|
|
12
23
|
}
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Accelerates a particle's angular velocity ({@link Particle.rotationSpeed})
|
|
3
|
+
* by a constant `angularAcceleration` (degrees per second²) each tick.
|
|
4
|
+
* The updated `rotationSpeed` is then integrated into
|
|
5
|
+
* {@link Particle.rotation} by {@link ParticleSystem.updateParticle}.
|
|
6
|
+
* Use a negative value to decelerate spin over time.
|
|
7
|
+
*/
|
|
1
8
|
class TorqueAffector {
|
|
2
9
|
_angularAcceleration;
|
|
3
10
|
constructor(angularAcceleration) {
|
|
@@ -13,12 +20,16 @@ class TorqueAffector {
|
|
|
13
20
|
this._angularAcceleration = angularAcceleration;
|
|
14
21
|
return this;
|
|
15
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* Adds `angularAcceleration * delta.seconds` to `particle.rotationSpeed`,
|
|
25
|
+
* increasing or decreasing spin rate for this timestep.
|
|
26
|
+
*/
|
|
16
27
|
apply(particle, delta) {
|
|
17
28
|
particle.rotationSpeed += (delta.seconds * this._angularAcceleration);
|
|
18
29
|
return this;
|
|
19
30
|
}
|
|
20
31
|
destroy() {
|
|
21
|
-
//
|
|
32
|
+
// no-op — pure value class, kept for Destroyable interface conformance
|
|
22
33
|
}
|
|
23
34
|
}
|
|
24
35
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TorqueAffector.js","sources":["../../../../../src/particles/affectors/TorqueAffector.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TorqueAffector.js","sources":["../../../../../src/particles/affectors/TorqueAffector.ts"],"sourcesContent":[null],"names":[],"mappings":"AAIA;;;;;;AAMG;MACU,cAAc,CAAA;AAEf,IAAA,oBAAoB;AAE5B,IAAA,WAAA,CAAmB,mBAA2B,EAAA;AAC1C,QAAA,IAAI,CAAC,oBAAoB,GAAG,mBAAmB;IACnD;AAEA,IAAA,IAAW,mBAAmB,GAAA;QAC1B,OAAO,IAAI,CAAC,oBAAoB;IACpC;IAEA,IAAW,mBAAmB,CAAC,mBAA2B,EAAA;AACtD,QAAA,IAAI,CAAC,sBAAsB,CAAC,mBAAmB,CAAC;IACpD;AAEO,IAAA,sBAAsB,CAAC,mBAA2B,EAAA;AACrD,QAAA,IAAI,CAAC,oBAAoB,GAAG,mBAAmB;AAE/C,QAAA,OAAO,IAAI;IACf;AAEA;;;AAGG;IACI,KAAK,CAAC,QAAkB,EAAE,KAAW,EAAA;AACxC,QAAA,QAAQ,CAAC,aAAa,KAAK,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC;AAErE,QAAA,OAAO,IAAI;IACf;IAEO,OAAO,GAAA;;IAEd;AACH;;;;"}
|
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
import type { Time } from '@/core/Time';
|
|
2
2
|
import type { ParticleSystem } from '@/particles/ParticleSystem';
|
|
3
|
+
/**
|
|
4
|
+
* Contract for all particle spawners attached to a {@link ParticleSystem}.
|
|
5
|
+
* Each emitter is called once per tick via {@link ParticleSystem.update} and
|
|
6
|
+
* is responsible for requesting recycled or new {@link Particle} instances from
|
|
7
|
+
* the system, configuring them, and handing them back via
|
|
8
|
+
* {@link ParticleSystem.emitParticle}. See {@link UniversalEmitter} for the
|
|
9
|
+
* built-in rate-based implementation.
|
|
10
|
+
*/
|
|
3
11
|
export interface ParticleEmitter {
|
|
12
|
+
/**
|
|
13
|
+
* Spawns zero or more particles into `system` for the current `delta`
|
|
14
|
+
* timestep. Called once per frame by {@link ParticleSystem.update}.
|
|
15
|
+
*/
|
|
4
16
|
apply(system: ParticleSystem, delta: Time): this;
|
|
17
|
+
/** Releases any resources owned by this emitter. */
|
|
5
18
|
destroy(): void;
|
|
6
19
|
}
|
|
@@ -2,6 +2,14 @@ import { Vector } from '@/math/Vector';
|
|
|
2
2
|
import { Color } from '@/core/Color';
|
|
3
3
|
import { Time } from '@/core/Time';
|
|
4
4
|
import type { ParticleProperties } from '@/particles/ParticleProperties';
|
|
5
|
+
/**
|
|
6
|
+
* Spawn-time configuration snapshot passed to {@link ParticleEmitter.apply}
|
|
7
|
+
* implementations. Implements {@link ParticleProperties} so the same affector
|
|
8
|
+
* interface can read default values when needed. All fields have sensible
|
|
9
|
+
* defaults (1 s lifetime, zero position/velocity, unit scale, white tint)
|
|
10
|
+
* and every object-valued field is deep-cloned on construction, making it
|
|
11
|
+
* safe to share one `ParticleOptions` instance across multiple emitters.
|
|
12
|
+
*/
|
|
5
13
|
export declare class ParticleOptions implements ParticleProperties {
|
|
6
14
|
private readonly _totalLifetime;
|
|
7
15
|
private readonly _elapsedLifetime;
|
|
@@ -12,6 +20,13 @@ export declare class ParticleOptions implements ParticleProperties {
|
|
|
12
20
|
private _rotation;
|
|
13
21
|
private _rotationSpeed;
|
|
14
22
|
private _textureIndex;
|
|
23
|
+
/**
|
|
24
|
+
* Creates a new options snapshot. Any omitted field falls back to its
|
|
25
|
+
* default value (1 s lifetime, zero position/velocity, unit scale,
|
|
26
|
+
* zero rotation, white tint, texture index 0). All object values are
|
|
27
|
+
* cloned so later mutations to the source objects do not affect this
|
|
28
|
+
* instance.
|
|
29
|
+
*/
|
|
15
30
|
constructor(options?: Partial<ParticleProperties>);
|
|
16
31
|
get totalLifetime(): Time;
|
|
17
32
|
set totalLifetime(totalLifetime: Time);
|
|
@@ -42,5 +57,6 @@ export declare class ParticleOptions implements ParticleProperties {
|
|
|
42
57
|
set textureIndex(textureIndex: number);
|
|
43
58
|
get tint(): Color;
|
|
44
59
|
set tint(color: Color);
|
|
60
|
+
/** Destroys all owned value objects. Called by the owning emitter's `destroy()`. */
|
|
45
61
|
destroy(): void;
|
|
46
62
|
}
|
|
@@ -3,6 +3,14 @@ import { Color } from '../../core/Color.js';
|
|
|
3
3
|
import { Time } from '../../core/Time.js';
|
|
4
4
|
import { trimRotation } from '../../math/utils.js';
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* Spawn-time configuration snapshot passed to {@link ParticleEmitter.apply}
|
|
8
|
+
* implementations. Implements {@link ParticleProperties} so the same affector
|
|
9
|
+
* interface can read default values when needed. All fields have sensible
|
|
10
|
+
* defaults (1 s lifetime, zero position/velocity, unit scale, white tint)
|
|
11
|
+
* and every object-valued field is deep-cloned on construction, making it
|
|
12
|
+
* safe to share one `ParticleOptions` instance across multiple emitters.
|
|
13
|
+
*/
|
|
6
14
|
class ParticleOptions {
|
|
7
15
|
_totalLifetime;
|
|
8
16
|
_elapsedLifetime;
|
|
@@ -13,6 +21,13 @@ class ParticleOptions {
|
|
|
13
21
|
_rotation;
|
|
14
22
|
_rotationSpeed;
|
|
15
23
|
_textureIndex;
|
|
24
|
+
/**
|
|
25
|
+
* Creates a new options snapshot. Any omitted field falls back to its
|
|
26
|
+
* default value (1 s lifetime, zero position/velocity, unit scale,
|
|
27
|
+
* zero rotation, white tint, texture index 0). All object values are
|
|
28
|
+
* cloned so later mutations to the source objects do not affect this
|
|
29
|
+
* instance.
|
|
30
|
+
*/
|
|
16
31
|
constructor(options = {}) {
|
|
17
32
|
const { totalLifetime, elapsedLifetime, position, velocity, scale, rotation, rotationSpeed, textureIndex, tint, } = options;
|
|
18
33
|
this._totalLifetime = (totalLifetime ?? Time.oneSecond).clone();
|
|
@@ -90,6 +105,7 @@ class ParticleOptions {
|
|
|
90
105
|
set tint(color) {
|
|
91
106
|
this._tint.copy(color);
|
|
92
107
|
}
|
|
108
|
+
/** Destroys all owned value objects. Called by the owning emitter's `destroy()`. */
|
|
93
109
|
destroy() {
|
|
94
110
|
this._totalLifetime.destroy();
|
|
95
111
|
this._elapsedLifetime.destroy();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParticleOptions.js","sources":["../../../../../src/particles/emitters/ParticleOptions.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"ParticleOptions.js","sources":["../../../../../src/particles/emitters/ParticleOptions.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,17 @@ import type { Time } from '@/core/Time';
|
|
|
2
2
|
import { ParticleOptions } from '@/particles/emitters/ParticleOptions';
|
|
3
3
|
import type { ParticleEmitter } from '@/particles/emitters/ParticleEmitter';
|
|
4
4
|
import type { ParticleSystem } from '@/particles/ParticleSystem';
|
|
5
|
+
/**
|
|
6
|
+
* Rate-based concrete {@link ParticleEmitter} that spawns a fixed number of
|
|
7
|
+
* particles per second, configured via {@link UniversalEmitter.emissionRate}
|
|
8
|
+
* and {@link UniversalEmitter.particleOptions}. Sub-frame fractions are
|
|
9
|
+
* accumulated in an internal delta so that low emission rates (e.g. 0.5
|
|
10
|
+
* particles/s) remain accurate over time without integer truncation error.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* const emitter = new UniversalEmitter(60, new ParticleOptions({ velocity: new Vector(0, -200) }));
|
|
14
|
+
* particleSystem.addEmitter(emitter);
|
|
15
|
+
*/
|
|
5
16
|
export declare class UniversalEmitter implements ParticleEmitter {
|
|
6
17
|
private _emissionRate;
|
|
7
18
|
private _particleOptions;
|
|
@@ -11,7 +22,19 @@ export declare class UniversalEmitter implements ParticleEmitter {
|
|
|
11
22
|
set emissionRate(particlesPerSecond: number);
|
|
12
23
|
get particleOptions(): ParticleOptions;
|
|
13
24
|
set particleOptions(particleOptions: ParticleOptions);
|
|
25
|
+
/**
|
|
26
|
+
* Computes how many whole particles to spawn for the given `time` slice,
|
|
27
|
+
* carrying any fractional remainder into the next call. This accumulator
|
|
28
|
+
* prevents emission-rate drift when `emissionRate * delta` is not an
|
|
29
|
+
* integer (e.g. 30 fps × 0.5 particles/s = 0.5 per frame → every other
|
|
30
|
+
* frame emits one).
|
|
31
|
+
*/
|
|
14
32
|
computeParticleCount(time: Time): number;
|
|
33
|
+
/**
|
|
34
|
+
* Requests the correct number of particles from `system` for this frame,
|
|
35
|
+
* configures each one with {@link particleOptions} via
|
|
36
|
+
* {@link Particle.applyOptions}, and emits them into the live pool.
|
|
37
|
+
*/
|
|
15
38
|
apply(system: ParticleSystem, delta: Time): this;
|
|
16
39
|
destroy(): void;
|
|
17
40
|
}
|
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
import { ParticleOptions } from './ParticleOptions.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Rate-based concrete {@link ParticleEmitter} that spawns a fixed number of
|
|
5
|
+
* particles per second, configured via {@link UniversalEmitter.emissionRate}
|
|
6
|
+
* and {@link UniversalEmitter.particleOptions}. Sub-frame fractions are
|
|
7
|
+
* accumulated in an internal delta so that low emission rates (e.g. 0.5
|
|
8
|
+
* particles/s) remain accurate over time without integer truncation error.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* const emitter = new UniversalEmitter(60, new ParticleOptions({ velocity: new Vector(0, -200) }));
|
|
12
|
+
* particleSystem.addEmitter(emitter);
|
|
13
|
+
*/
|
|
3
14
|
class UniversalEmitter {
|
|
4
15
|
_emissionRate;
|
|
5
16
|
_particleOptions;
|
|
@@ -20,12 +31,24 @@ class UniversalEmitter {
|
|
|
20
31
|
set particleOptions(particleOptions) {
|
|
21
32
|
this._particleOptions = particleOptions;
|
|
22
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Computes how many whole particles to spawn for the given `time` slice,
|
|
36
|
+
* carrying any fractional remainder into the next call. This accumulator
|
|
37
|
+
* prevents emission-rate drift when `emissionRate * delta` is not an
|
|
38
|
+
* integer (e.g. 30 fps × 0.5 particles/s = 0.5 per frame → every other
|
|
39
|
+
* frame emits one).
|
|
40
|
+
*/
|
|
23
41
|
computeParticleCount(time) {
|
|
24
42
|
const particleAmount = (this._emissionRate * time.seconds) + this._emissionDelta;
|
|
25
43
|
const particles = particleAmount | 0;
|
|
26
44
|
this._emissionDelta = (particleAmount - particles);
|
|
27
45
|
return particles;
|
|
28
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Requests the correct number of particles from `system` for this frame,
|
|
49
|
+
* configures each one with {@link particleOptions} via
|
|
50
|
+
* {@link Particle.applyOptions}, and emits them into the live pool.
|
|
51
|
+
*/
|
|
29
52
|
apply(system, delta) {
|
|
30
53
|
const count = this.computeParticleCount(delta);
|
|
31
54
|
const options = this._particleOptions;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UniversalEmitter.js","sources":["../../../../../src/particles/emitters/UniversalEmitter.ts"],"sourcesContent":[null],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"UniversalEmitter.js","sources":["../../../../../src/particles/emitters/UniversalEmitter.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAKA;;;;;;;;;;AAUG;MACU,gBAAgB,CAAA;AACjB,IAAA,aAAa;AACb,IAAA,gBAAgB;IAChB,cAAc,GAAG,CAAC;IAE1B,WAAA,CAAmB,YAAoB,EAAE,eAAiC,EAAA;AACtE,QAAA,IAAI,CAAC,aAAa,GAAG,YAAY;QACjC,IAAI,CAAC,gBAAgB,GAAG,eAAe,IAAI,IAAI,eAAe,EAAE;IACpE;AAEA,IAAA,IAAW,YAAY,GAAA;QACnB,OAAO,IAAI,CAAC,aAAa;IAC7B;IAEA,IAAW,YAAY,CAAC,kBAA0B,EAAA;AAC9C,QAAA,IAAI,CAAC,aAAa,GAAG,kBAAkB;IAC3C;AAEA,IAAA,IAAW,eAAe,GAAA;QACtB,OAAO,IAAI,CAAC,gBAAgB;IAChC;IAEA,IAAW,eAAe,CAAC,eAAgC,EAAA;AACvD,QAAA,IAAI,CAAC,gBAAgB,GAAG,eAAe;IAC3C;AAEA;;;;;;AAMG;AACI,IAAA,oBAAoB,CAAC,IAAU,EAAA;AAClC,QAAA,MAAM,cAAc,GAAG,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,cAAc;AAChF,QAAA,MAAM,SAAS,GAAG,cAAc,GAAG,CAAC;QAEpC,IAAI,CAAC,cAAc,IAAI,cAAc,GAAG,SAAS,CAAC;AAElD,QAAA,OAAO,SAAS;IACpB;AAEA;;;;AAIG;IACI,KAAK,CAAC,MAAsB,EAAE,KAAW,EAAA;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;AAC9C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB;AAErC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;AAC5B,YAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,eAAe,EAAE;AAEzC,YAAA,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC;AAC9B,YAAA,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC;QACjC;AAEA,QAAA,OAAO,IAAI;IACf;IAEO,OAAO,GAAA;AACV,QAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE;IACnC;AACH;;;;"}
|