@codexo/exojs 0.7.11 → 0.7.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +108 -0
- package/dist/esm/animation/Tween.d.ts +60 -1
- package/dist/esm/animation/Tween.js +60 -1
- package/dist/esm/animation/Tween.js.map +1 -1
- package/dist/esm/animation/TweenManager.d.ts +10 -0
- package/dist/esm/animation/TweenManager.js +10 -0
- package/dist/esm/animation/TweenManager.js.map +1 -1
- package/dist/esm/animation/types.d.ts +15 -0
- package/dist/esm/animation/types.js +6 -0
- package/dist/esm/animation/types.js.map +1 -1
- package/dist/esm/audio/AbstractMedia.d.ts +11 -0
- package/dist/esm/audio/AbstractMedia.js +10 -0
- package/dist/esm/audio/AbstractMedia.js.map +1 -1
- package/dist/esm/audio/AudioAnalyser.d.ts +21 -0
- package/dist/esm/audio/AudioAnalyser.js +16 -0
- package/dist/esm/audio/AudioAnalyser.js.map +1 -1
- package/dist/esm/audio/AudioBus.d.ts +37 -0
- package/dist/esm/audio/AudioBus.js +36 -0
- package/dist/esm/audio/AudioBus.js.map +1 -1
- package/dist/esm/audio/AudioFilter.d.ts +7 -0
- package/dist/esm/audio/AudioFilter.js +6 -0
- package/dist/esm/audio/AudioFilter.js.map +1 -1
- package/dist/esm/audio/AudioListener.d.ts +19 -0
- package/dist/esm/audio/AudioListener.js +11 -0
- package/dist/esm/audio/AudioListener.js.map +1 -1
- package/dist/esm/audio/AudioManager.d.ts +37 -0
- package/dist/esm/audio/AudioManager.js +37 -0
- package/dist/esm/audio/AudioManager.js.map +1 -1
- package/dist/esm/audio/BeatDetector.d.ts +21 -0
- package/dist/esm/audio/BeatDetector.js +21 -0
- package/dist/esm/audio/BeatDetector.js.map +1 -1
- package/dist/esm/audio/Media.d.ts +11 -0
- package/dist/esm/audio/Music.d.ts +12 -0
- package/dist/esm/audio/Music.js +12 -0
- package/dist/esm/audio/Music.js.map +1 -1
- package/dist/esm/audio/Sound.d.ts +25 -0
- package/dist/esm/audio/Sound.js +18 -0
- package/dist/esm/audio/Sound.js.map +1 -1
- package/dist/esm/audio/audio-context.d.ts +48 -0
- package/dist/esm/audio/audio-context.js +48 -5
- package/dist/esm/audio/audio-context.js.map +1 -1
- package/dist/esm/audio/filters/ChorusFilter.d.ts +5 -0
- package/dist/esm/audio/filters/ChorusFilter.js +4 -0
- package/dist/esm/audio/filters/ChorusFilter.js.map +1 -1
- package/dist/esm/audio/filters/CompressorFilter.d.ts +12 -0
- package/dist/esm/audio/filters/CompressorFilter.js +11 -0
- package/dist/esm/audio/filters/CompressorFilter.js.map +1 -1
- package/dist/esm/audio/filters/DelayFilter.d.ts +11 -0
- package/dist/esm/audio/filters/DelayFilter.js +10 -0
- package/dist/esm/audio/filters/DelayFilter.js.map +1 -1
- package/dist/esm/audio/filters/DuckingFilter.d.ts +13 -0
- package/dist/esm/audio/filters/DuckingFilter.js +12 -0
- package/dist/esm/audio/filters/DuckingFilter.js.map +1 -1
- package/dist/esm/audio/filters/EqualizerFilter.d.ts +20 -0
- package/dist/esm/audio/filters/EqualizerFilter.js +40 -0
- package/dist/esm/audio/filters/EqualizerFilter.js.map +1 -1
- package/dist/esm/audio/filters/GranularFilter.d.ts +6 -0
- package/dist/esm/audio/filters/GranularFilter.js +6 -0
- package/dist/esm/audio/filters/GranularFilter.js.map +1 -1
- package/dist/esm/audio/filters/HighpassFilter.d.ts +10 -0
- package/dist/esm/audio/filters/HighpassFilter.js +9 -0
- package/dist/esm/audio/filters/HighpassFilter.js.map +1 -1
- package/dist/esm/audio/filters/LowpassFilter.d.ts +10 -0
- package/dist/esm/audio/filters/LowpassFilter.js +9 -0
- package/dist/esm/audio/filters/LowpassFilter.js.map +1 -1
- package/dist/esm/audio/filters/PitchShiftFilter.d.ts +2 -0
- package/dist/esm/audio/filters/PitchShiftFilter.js +2 -0
- package/dist/esm/audio/filters/PitchShiftFilter.js.map +1 -1
- package/dist/esm/audio/filters/ReverbFilter.d.ts +12 -0
- package/dist/esm/audio/filters/ReverbFilter.js +11 -0
- package/dist/esm/audio/filters/ReverbFilter.js.map +1 -1
- package/dist/esm/audio/filters/VocoderFilter.d.ts +11 -0
- package/dist/esm/audio/filters/VocoderFilter.js +11 -0
- package/dist/esm/audio/filters/VocoderFilter.js.map +1 -1
- package/dist/esm/audio/filters/WorkletFilter.d.ts +6 -1
- package/dist/esm/audio/filters/WorkletFilter.js +6 -1
- package/dist/esm/audio/filters/WorkletFilter.js.map +1 -1
- package/dist/esm/core/Application.d.ts +63 -0
- package/dist/esm/core/Application.js +61 -0
- package/dist/esm/core/Application.js.map +1 -1
- package/dist/esm/core/Bounds.d.ts +23 -0
- package/dist/esm/core/Bounds.js +23 -0
- package/dist/esm/core/Bounds.js.map +1 -1
- package/dist/esm/core/Clock.d.ts +21 -0
- package/dist/esm/core/Clock.js +21 -0
- package/dist/esm/core/Clock.js.map +1 -1
- package/dist/esm/core/Color.d.ts +35 -0
- package/dist/esm/core/Color.js +35 -0
- package/dist/esm/core/Color.js.map +1 -1
- package/dist/esm/core/Scene.d.ts +46 -0
- package/dist/esm/core/Scene.js +27 -0
- package/dist/esm/core/Scene.js.map +1 -1
- package/dist/esm/core/SceneManager.d.ts +62 -0
- package/dist/esm/core/SceneManager.js +49 -0
- package/dist/esm/core/SceneManager.js.map +1 -1
- package/dist/esm/core/SceneNode.d.ts +31 -0
- package/dist/esm/core/SceneNode.js +31 -0
- package/dist/esm/core/SceneNode.js.map +1 -1
- package/dist/esm/core/Signal.d.ts +44 -0
- package/dist/esm/core/Signal.js +39 -0
- package/dist/esm/core/Signal.js.map +1 -1
- package/dist/esm/core/Time.d.ts +21 -0
- package/dist/esm/core/Time.js +21 -0
- package/dist/esm/core/Time.js.map +1 -1
- package/dist/esm/core/Timer.d.ts +7 -0
- package/dist/esm/core/Timer.js +7 -0
- package/dist/esm/core/Timer.js.map +1 -1
- package/dist/esm/core/capabilities.d.ts +12 -0
- package/dist/esm/core/capabilities.js +12 -0
- package/dist/esm/core/capabilities.js.map +1 -1
- package/dist/esm/core/types.d.ts +37 -0
- package/dist/esm/core/utils.d.ts +48 -0
- package/dist/esm/core/utils.js +48 -0
- package/dist/esm/core/utils.js.map +1 -1
- package/dist/esm/debug/BoundingBoxesLayer.d.ts +8 -0
- package/dist/esm/debug/BoundingBoxesLayer.js +8 -0
- package/dist/esm/debug/BoundingBoxesLayer.js.map +1 -1
- package/dist/esm/debug/DebugLayer.d.ts +16 -3
- package/dist/esm/debug/DebugLayer.js +11 -3
- package/dist/esm/debug/DebugLayer.js.map +1 -1
- package/dist/esm/debug/DebugOverlay.d.ts +11 -0
- package/dist/esm/debug/DebugOverlay.js +6 -0
- package/dist/esm/debug/DebugOverlay.js.map +1 -1
- package/dist/esm/debug/HitTestLayer.d.ts +9 -0
- package/dist/esm/debug/HitTestLayer.js +9 -0
- package/dist/esm/debug/HitTestLayer.js.map +1 -1
- package/dist/esm/debug/PerformanceLayer.d.ts +17 -1
- package/dist/esm/debug/PerformanceLayer.js +18 -0
- package/dist/esm/debug/PerformanceLayer.js.map +1 -1
- package/dist/esm/debug/PointerStackLayer.d.ts +8 -0
- package/dist/esm/debug/PointerStackLayer.js +10 -2
- package/dist/esm/debug/PointerStackLayer.js.map +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/esm/input/ArcadeStickGamepadMapping.d.ts +7 -0
- package/dist/esm/input/ArcadeStickGamepadMapping.js +7 -0
- package/dist/esm/input/ArcadeStickGamepadMapping.js.map +1 -1
- package/dist/esm/input/GameCubeGamepadMapping.d.ts +9 -0
- package/dist/esm/input/GameCubeGamepadMapping.js +9 -0
- package/dist/esm/input/GameCubeGamepadMapping.js.map +1 -1
- package/dist/esm/input/Gamepad.d.ts +48 -0
- package/dist/esm/input/Gamepad.js +43 -0
- package/dist/esm/input/Gamepad.js.map +1 -1
- package/dist/esm/input/GamepadChannels.d.ts +8 -0
- package/dist/esm/input/GamepadChannels.js +8 -0
- package/dist/esm/input/GamepadChannels.js.map +1 -1
- package/dist/esm/input/GamepadControl.d.ts +18 -0
- package/dist/esm/input/GamepadControl.js +13 -0
- package/dist/esm/input/GamepadControl.js.map +1 -1
- package/dist/esm/input/GamepadDefinitions.d.ts +64 -1
- package/dist/esm/input/GamepadDefinitions.js +40 -1
- package/dist/esm/input/GamepadDefinitions.js.map +1 -1
- package/dist/esm/input/GamepadMapping.d.ts +32 -2
- package/dist/esm/input/GamepadMapping.js +24 -0
- package/dist/esm/input/GamepadMapping.js.map +1 -1
- package/dist/esm/input/GamepadPromptLayouts.d.ts +32 -1
- package/dist/esm/input/GamepadPromptLayouts.js +25 -1
- package/dist/esm/input/GamepadPromptLayouts.js.map +1 -1
- package/dist/esm/input/GenericDualAnalogGamepadMapping.d.ts +10 -0
- package/dist/esm/input/GenericDualAnalogGamepadMapping.js +10 -0
- package/dist/esm/input/GenericDualAnalogGamepadMapping.js.map +1 -1
- package/dist/esm/input/GestureRecognizer.d.ts +11 -2
- package/dist/esm/input/GestureRecognizer.js +11 -2
- package/dist/esm/input/GestureRecognizer.js.map +1 -1
- package/dist/esm/input/Input.d.ts +24 -0
- package/dist/esm/input/Input.js +22 -0
- package/dist/esm/input/Input.js.map +1 -1
- package/dist/esm/input/InputManager.d.ts +33 -0
- package/dist/esm/input/InputManager.js +33 -0
- package/dist/esm/input/InputManager.js.map +1 -1
- package/dist/esm/input/InteractionEvent.d.ts +13 -0
- package/dist/esm/input/InteractionEvent.js +8 -0
- package/dist/esm/input/InteractionEvent.js.map +1 -1
- package/dist/esm/input/InteractionManager.d.ts +33 -4
- package/dist/esm/input/InteractionManager.js +33 -4
- package/dist/esm/input/InteractionManager.js.map +1 -1
- package/dist/esm/input/JoyConLeftGamepadMapping.d.ts +9 -0
- package/dist/esm/input/JoyConLeftGamepadMapping.js +9 -0
- package/dist/esm/input/JoyConLeftGamepadMapping.js.map +1 -1
- package/dist/esm/input/JoyConRightGamepadMapping.d.ts +9 -0
- package/dist/esm/input/JoyConRightGamepadMapping.js +9 -0
- package/dist/esm/input/JoyConRightGamepadMapping.js.map +1 -1
- package/dist/esm/input/PlayStationGamepadMapping.d.ts +8 -0
- package/dist/esm/input/PlayStationGamepadMapping.js +8 -0
- package/dist/esm/input/PlayStationGamepadMapping.js.map +1 -1
- package/dist/esm/input/Pointer.d.ts +22 -0
- package/dist/esm/input/Pointer.js +22 -0
- package/dist/esm/input/Pointer.js.map +1 -1
- package/dist/esm/input/SteamControllerGamepadMapping.d.ts +8 -0
- package/dist/esm/input/SteamControllerGamepadMapping.js +8 -0
- package/dist/esm/input/SteamControllerGamepadMapping.js.map +1 -1
- package/dist/esm/input/SwitchProGamepadMapping.d.ts +9 -0
- package/dist/esm/input/SwitchProGamepadMapping.js +9 -0
- package/dist/esm/input/SwitchProGamepadMapping.js.map +1 -1
- package/dist/esm/input/XboxGamepadMapping.d.ts +8 -0
- package/dist/esm/input/XboxGamepadMapping.js +8 -0
- package/dist/esm/input/XboxGamepadMapping.js.map +1 -1
- package/dist/esm/input/types.d.ts +20 -0
- package/dist/esm/input/types.js +20 -0
- package/dist/esm/input/types.js.map +1 -1
- package/dist/esm/math/AbstractVector.d.ts +83 -0
- package/dist/esm/math/AbstractVector.js +83 -0
- package/dist/esm/math/AbstractVector.js.map +1 -1
- package/dist/esm/math/Circle.d.ts +32 -0
- package/dist/esm/math/Circle.js +34 -2
- package/dist/esm/math/Circle.js.map +1 -1
- package/dist/esm/math/CircleLike.d.ts +1 -0
- package/dist/esm/math/Collision.d.ts +39 -0
- package/dist/esm/math/Collision.js +5 -0
- package/dist/esm/math/Collision.js.map +1 -1
- package/dist/esm/math/Ellipse.d.ts +11 -0
- package/dist/esm/math/Ellipse.js +18 -2
- package/dist/esm/math/Ellipse.js.map +1 -1
- package/dist/esm/math/EllipseLike.d.ts +3 -0
- package/dist/esm/math/Flags.d.ts +31 -0
- package/dist/esm/math/Flags.js +31 -0
- package/dist/esm/math/Flags.js.map +1 -1
- package/dist/esm/math/Interval.d.ts +15 -0
- package/dist/esm/math/Interval.js +15 -0
- package/dist/esm/math/Interval.js.map +1 -1
- package/dist/esm/math/Line.d.ts +17 -1
- package/dist/esm/math/Line.js +17 -1
- package/dist/esm/math/Line.js.map +1 -1
- package/dist/esm/math/LineLike.d.ts +1 -0
- package/dist/esm/math/Matrix.d.ts +44 -3
- package/dist/esm/math/Matrix.js +44 -3
- package/dist/esm/math/Matrix.js.map +1 -1
- package/dist/esm/math/ObservableSize.d.ts +7 -0
- package/dist/esm/math/ObservableSize.js +7 -0
- package/dist/esm/math/ObservableSize.js.map +1 -1
- package/dist/esm/math/ObservableVector.d.ts +9 -0
- package/dist/esm/math/ObservableVector.js +9 -0
- package/dist/esm/math/ObservableVector.js.map +1 -1
- package/dist/esm/math/PointLike.d.ts +1 -0
- package/dist/esm/math/PolarVector.d.ts +15 -0
- package/dist/esm/math/PolarVector.js +16 -1
- package/dist/esm/math/PolarVector.js.map +1 -1
- package/dist/esm/math/Polygon.d.ts +20 -0
- package/dist/esm/math/Polygon.js +20 -0
- package/dist/esm/math/Polygon.js.map +1 -1
- package/dist/esm/math/PolygonLike.d.ts +4 -0
- package/dist/esm/math/Quadtree.d.ts +40 -3
- package/dist/esm/math/Quadtree.js +39 -3
- package/dist/esm/math/Quadtree.js.map +1 -1
- package/dist/esm/math/Random.d.ts +25 -0
- package/dist/esm/math/Random.js +25 -0
- package/dist/esm/math/Random.js.map +1 -1
- package/dist/esm/math/Rectangle.d.ts +15 -0
- package/dist/esm/math/Rectangle.js +17 -2
- package/dist/esm/math/Rectangle.js.map +1 -1
- package/dist/esm/math/RectangleLike.d.ts +1 -0
- package/dist/esm/math/Segment.d.ts +7 -0
- package/dist/esm/math/Segment.js +7 -0
- package/dist/esm/math/Segment.js.map +1 -1
- package/dist/esm/math/ShapeLike.d.ts +6 -0
- package/dist/esm/math/Size.d.ts +9 -0
- package/dist/esm/math/Size.js +9 -0
- package/dist/esm/math/Size.js.map +1 -1
- package/dist/esm/math/Vector.d.ts +16 -0
- package/dist/esm/math/Vector.js +16 -0
- package/dist/esm/math/Vector.js.map +1 -1
- package/dist/esm/math/collision-detection.d.ts +47 -1
- package/dist/esm/math/collision-detection.js +228 -17
- package/dist/esm/math/collision-detection.js.map +1 -1
- package/dist/esm/math/collision-primitives.d.ts +23 -0
- package/dist/esm/math/collision-primitives.js +23 -0
- package/dist/esm/math/collision-primitives.js.map +1 -1
- package/dist/esm/math/geometry.d.ts +42 -0
- package/dist/esm/math/geometry.js +37 -0
- package/dist/esm/math/geometry.js.map +1 -1
- package/dist/esm/math/utils.d.ts +41 -0
- package/dist/esm/math/utils.js +41 -0
- package/dist/esm/math/utils.js.map +1 -1
- package/dist/esm/particles/Particle.d.ts +37 -0
- package/dist/esm/particles/Particle.js +37 -0
- package/dist/esm/particles/Particle.js.map +1 -1
- package/dist/esm/particles/ParticleProperties.d.ts +15 -0
- package/dist/esm/particles/ParticleSystem.d.ts +69 -0
- package/dist/esm/particles/ParticleSystem.js +69 -0
- package/dist/esm/particles/ParticleSystem.js.map +1 -1
- package/dist/esm/particles/affectors/ColorAffector.d.ts +13 -0
- package/dist/esm/particles/affectors/ColorAffector.js +13 -0
- package/dist/esm/particles/affectors/ColorAffector.js.map +1 -1
- package/dist/esm/particles/affectors/ForceAffector.d.ts +11 -0
- package/dist/esm/particles/affectors/ForceAffector.js +11 -0
- package/dist/esm/particles/affectors/ForceAffector.js.map +1 -1
- package/dist/esm/particles/affectors/ParticleAffector.d.ts +13 -0
- package/dist/esm/particles/affectors/ScaleAffector.d.ts +10 -0
- package/dist/esm/particles/affectors/ScaleAffector.js +10 -0
- package/dist/esm/particles/affectors/ScaleAffector.js.map +1 -1
- package/dist/esm/particles/affectors/TorqueAffector.d.ts +11 -0
- package/dist/esm/particles/affectors/TorqueAffector.js +11 -0
- package/dist/esm/particles/affectors/TorqueAffector.js.map +1 -1
- package/dist/esm/particles/emitters/ParticleEmitter.d.ts +13 -0
- package/dist/esm/particles/emitters/ParticleOptions.d.ts +16 -0
- package/dist/esm/particles/emitters/ParticleOptions.js +16 -0
- package/dist/esm/particles/emitters/ParticleOptions.js.map +1 -1
- package/dist/esm/particles/emitters/UniversalEmitter.d.ts +23 -0
- package/dist/esm/particles/emitters/UniversalEmitter.js +23 -0
- package/dist/esm/particles/emitters/UniversalEmitter.js.map +1 -1
- package/dist/esm/rendering/CallbackRenderPass.d.ts +12 -0
- package/dist/esm/rendering/CallbackRenderPass.js +12 -0
- package/dist/esm/rendering/CallbackRenderPass.js.map +1 -1
- package/dist/esm/rendering/Container.d.ts +43 -0
- package/dist/esm/rendering/Container.js +43 -0
- package/dist/esm/rendering/Container.js.map +1 -1
- package/dist/esm/rendering/Drawable.d.ts +22 -0
- package/dist/esm/rendering/Drawable.js +22 -0
- package/dist/esm/rendering/Drawable.js.map +1 -1
- package/dist/esm/rendering/RenderBackend.d.ts +13 -0
- package/dist/esm/rendering/RenderBackendType.d.ts +4 -0
- package/dist/esm/rendering/RenderBackendType.js +4 -0
- package/dist/esm/rendering/RenderBackendType.js.map +1 -1
- package/dist/esm/rendering/RenderNode.d.ts +18 -0
- package/dist/esm/rendering/RenderNode.js +18 -0
- package/dist/esm/rendering/RenderNode.js.map +1 -1
- package/dist/esm/rendering/RenderPass.d.ts +8 -0
- package/dist/esm/rendering/RenderStats.d.ts +19 -0
- package/dist/esm/rendering/RenderStats.js +7 -0
- package/dist/esm/rendering/RenderStats.js.map +1 -1
- package/dist/esm/rendering/RenderTarget.d.ts +17 -0
- package/dist/esm/rendering/RenderTarget.js +17 -0
- package/dist/esm/rendering/RenderTarget.js.map +1 -1
- package/dist/esm/rendering/RenderTargetPass.d.ts +11 -0
- package/dist/esm/rendering/RenderTargetPass.js +7 -0
- package/dist/esm/rendering/RenderTargetPass.js.map +1 -1
- package/dist/esm/rendering/Renderer.d.ts +15 -0
- package/dist/esm/rendering/RendererRegistry.d.ts +7 -0
- package/dist/esm/rendering/RendererRegistry.js +7 -0
- package/dist/esm/rendering/RendererRegistry.js.map +1 -1
- package/dist/esm/rendering/View.d.ts +67 -2
- package/dist/esm/rendering/View.js +57 -0
- package/dist/esm/rendering/View.js.map +1 -1
- package/dist/esm/rendering/filters/BlurFilter.d.ts +9 -0
- package/dist/esm/rendering/filters/BlurFilter.js +8 -0
- package/dist/esm/rendering/filters/BlurFilter.js.map +1 -1
- package/dist/esm/rendering/filters/ColorFilter.d.ts +7 -0
- package/dist/esm/rendering/filters/ColorFilter.js +7 -0
- package/dist/esm/rendering/filters/ColorFilter.js.map +1 -1
- package/dist/esm/rendering/filters/Filter.d.ts +23 -0
- package/dist/esm/rendering/filters/Filter.js +20 -0
- package/dist/esm/rendering/filters/Filter.js.map +1 -1
- package/dist/esm/rendering/filters/WebGl2ShaderFilter.d.ts +5 -0
- package/dist/esm/rendering/filters/WebGl2ShaderFilter.js +5 -0
- package/dist/esm/rendering/filters/WebGl2ShaderFilter.js.map +1 -1
- package/dist/esm/rendering/filters/WebGpuShaderFilter.d.ts +5 -0
- package/dist/esm/rendering/filters/WebGpuShaderFilter.js +5 -0
- package/dist/esm/rendering/filters/WebGpuShaderFilter.js.map +1 -1
- package/dist/esm/rendering/mesh/Mesh.d.ts +2 -0
- package/dist/esm/rendering/mesh/Mesh.js +2 -0
- package/dist/esm/rendering/mesh/Mesh.js.map +1 -1
- package/dist/esm/rendering/primitives/Graphics.d.ts +34 -0
- package/dist/esm/rendering/primitives/Graphics.js +34 -0
- package/dist/esm/rendering/primitives/Graphics.js.map +1 -1
- package/dist/esm/rendering/shader/Shader.d.ts +36 -0
- package/dist/esm/rendering/shader/Shader.js +26 -0
- package/dist/esm/rendering/shader/Shader.js.map +1 -1
- package/dist/esm/rendering/shader/ShaderAttribute.d.ts +13 -0
- package/dist/esm/rendering/shader/ShaderAttribute.js +13 -0
- package/dist/esm/rendering/shader/ShaderAttribute.js.map +1 -1
- package/dist/esm/rendering/shader/ShaderUniform.d.ts +27 -0
- package/dist/esm/rendering/shader/ShaderUniform.js +28 -1
- package/dist/esm/rendering/shader/ShaderUniform.js.map +1 -1
- package/dist/esm/rendering/sprite/AnimatedSprite.d.ts +38 -0
- package/dist/esm/rendering/sprite/AnimatedSprite.js +36 -0
- package/dist/esm/rendering/sprite/AnimatedSprite.js.map +1 -1
- package/dist/esm/rendering/sprite/Sprite.d.ts +56 -0
- package/dist/esm/rendering/sprite/Sprite.js +56 -0
- package/dist/esm/rendering/sprite/Sprite.js.map +1 -1
- package/dist/esm/rendering/sprite/Spritesheet.d.ts +25 -0
- package/dist/esm/rendering/sprite/Spritesheet.js +20 -0
- package/dist/esm/rendering/sprite/Spritesheet.js.map +1 -1
- package/dist/esm/rendering/text/Text.d.ts +2 -0
- package/dist/esm/rendering/text/Text.js +2 -0
- package/dist/esm/rendering/text/Text.js.map +1 -1
- package/dist/esm/rendering/text/TextStyle.d.ts +29 -0
- package/dist/esm/rendering/text/TextStyle.js +24 -0
- package/dist/esm/rendering/text/TextStyle.js.map +1 -1
- package/dist/esm/rendering/text/types.d.ts +1 -0
- package/dist/esm/rendering/texture/RenderTexture.d.ts +16 -0
- package/dist/esm/rendering/texture/RenderTexture.js +16 -0
- package/dist/esm/rendering/texture/RenderTexture.js.map +1 -1
- package/dist/esm/rendering/texture/Sampler.d.ts +23 -0
- package/dist/esm/rendering/texture/Sampler.js +13 -0
- package/dist/esm/rendering/texture/Sampler.js.map +1 -1
- package/dist/esm/rendering/texture/Texture.d.ts +30 -0
- package/dist/esm/rendering/texture/Texture.js +30 -0
- package/dist/esm/rendering/texture/Texture.js.map +1 -1
- package/dist/esm/rendering/types.d.ts +29 -0
- package/dist/esm/rendering/types.js +29 -0
- package/dist/esm/rendering/types.js.map +1 -1
- package/dist/esm/rendering/utils.d.ts +20 -0
- package/dist/esm/rendering/utils.js +10 -0
- package/dist/esm/rendering/utils.js.map +1 -1
- package/dist/esm/rendering/video/Video.d.ts +35 -1
- package/dist/esm/rendering/video/Video.js +36 -2
- package/dist/esm/rendering/video/Video.js.map +1 -1
- package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.d.ts +7 -0
- package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.js +7 -0
- package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2Backend.d.ts +13 -0
- package/dist/esm/rendering/webgl2/WebGl2Backend.js +13 -0
- package/dist/esm/rendering/webgl2/WebGl2Backend.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.d.ts +8 -0
- package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.js +8 -0
- package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuBackend.d.ts +35 -0
- package/dist/esm/rendering/webgpu/WebGpuBackend.js +135 -5
- package/dist/esm/rendering/webgpu/WebGpuBackend.js.map +1 -1
- package/dist/esm/resources/AbstractAssetFactory.d.ts +20 -0
- package/dist/esm/resources/AbstractAssetFactory.js +20 -0
- package/dist/esm/resources/AbstractAssetFactory.js.map +1 -1
- package/dist/esm/resources/AssetFactory.d.ts +26 -0
- package/dist/esm/resources/AssetManifest.d.ts +45 -0
- package/dist/esm/resources/AssetManifest.js +25 -0
- package/dist/esm/resources/AssetManifest.js.map +1 -1
- package/dist/esm/resources/CacheFirstStrategy.d.ts +12 -0
- package/dist/esm/resources/CacheFirstStrategy.js +12 -0
- package/dist/esm/resources/CacheFirstStrategy.js.map +1 -1
- package/dist/esm/resources/CacheStore.d.ts +23 -0
- package/dist/esm/resources/CacheStrategy.d.ts +20 -0
- package/dist/esm/resources/Database.d.ts +45 -0
- package/dist/esm/resources/FactoryRegistry.d.ts +28 -0
- package/dist/esm/resources/FactoryRegistry.js +24 -0
- package/dist/esm/resources/FactoryRegistry.js.map +1 -1
- package/dist/esm/resources/IndexedDbDatabase.d.ts +22 -1
- package/dist/esm/resources/IndexedDbDatabase.js +21 -0
- package/dist/esm/resources/IndexedDbDatabase.js.map +1 -1
- package/dist/esm/resources/IndexedDbStore.d.ts +20 -0
- package/dist/esm/resources/IndexedDbStore.js +12 -0
- package/dist/esm/resources/IndexedDbStore.js.map +1 -1
- package/dist/esm/resources/Loader.d.ts +167 -0
- package/dist/esm/resources/Loader.js +110 -0
- package/dist/esm/resources/Loader.js.map +1 -1
- package/dist/esm/resources/NetworkOnlyStrategy.d.ts +8 -0
- package/dist/esm/resources/NetworkOnlyStrategy.js +8 -0
- package/dist/esm/resources/NetworkOnlyStrategy.js.map +1 -1
- package/dist/esm/resources/factories/BinaryFactory.d.ts +13 -0
- package/dist/esm/resources/factories/BinaryFactory.js +13 -0
- package/dist/esm/resources/factories/BinaryFactory.js.map +1 -1
- package/dist/esm/resources/factories/FontFactory.d.ts +37 -0
- package/dist/esm/resources/factories/FontFactory.js +26 -0
- package/dist/esm/resources/factories/FontFactory.js.map +1 -1
- package/dist/esm/resources/factories/ImageFactory.d.ts +24 -0
- package/dist/esm/resources/factories/ImageFactory.js +19 -0
- package/dist/esm/resources/factories/ImageFactory.js.map +1 -1
- package/dist/esm/resources/factories/JsonFactory.d.ts +13 -0
- package/dist/esm/resources/factories/JsonFactory.js +13 -0
- package/dist/esm/resources/factories/JsonFactory.js.map +1 -1
- package/dist/esm/resources/factories/MusicFactory.d.ts +36 -0
- package/dist/esm/resources/factories/MusicFactory.js +44 -4
- package/dist/esm/resources/factories/MusicFactory.js.map +1 -1
- package/dist/esm/resources/factories/SoundFactory.d.ts +29 -0
- package/dist/esm/resources/factories/SoundFactory.js +18 -0
- package/dist/esm/resources/factories/SoundFactory.js.map +1 -1
- package/dist/esm/resources/factories/SvgFactory.d.ts +19 -0
- package/dist/esm/resources/factories/SvgFactory.js +19 -0
- package/dist/esm/resources/factories/SvgFactory.js.map +1 -1
- package/dist/esm/resources/factories/TextFactory.d.ts +11 -0
- package/dist/esm/resources/factories/TextFactory.js +11 -0
- package/dist/esm/resources/factories/TextFactory.js.map +1 -1
- package/dist/esm/resources/factories/TextureFactory.d.ts +25 -0
- package/dist/esm/resources/factories/TextureFactory.js +20 -0
- package/dist/esm/resources/factories/TextureFactory.js.map +1 -1
- package/dist/esm/resources/factories/VideoFactory.d.ts +37 -0
- package/dist/esm/resources/factories/VideoFactory.js +48 -5
- package/dist/esm/resources/factories/VideoFactory.js.map +1 -1
- package/dist/esm/resources/factories/VttFactory.d.ts +18 -0
- package/dist/esm/resources/factories/VttFactory.js +24 -0
- package/dist/esm/resources/factories/VttFactory.js.map +1 -1
- package/dist/esm/resources/factories/WasmFactory.d.ts +16 -0
- package/dist/esm/resources/factories/WasmFactory.js +16 -0
- package/dist/esm/resources/factories/WasmFactory.js.map +1 -1
- package/dist/esm/resources/utils.d.ts +10 -0
- package/dist/esm/resources/utils.js +10 -0
- package/dist/esm/resources/utils.js.map +1 -1
- package/dist/exo.esm.js +3392 -59
- package/dist/exo.esm.js.map +1 -1
- package/package.json +7 -8
|
@@ -3,6 +3,17 @@ 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
|
+
* Mutable per-instance state for a single live particle. Implements
|
|
8
|
+
* {@link ParticleProperties} so affectors can mutate it through the shared
|
|
9
|
+
* interface. Particles are pooled by {@link ParticleSystem}: expired instances
|
|
10
|
+
* are moved to the graveyard and reused via {@link ParticleSystem.requestParticle}
|
|
11
|
+
* rather than garbage-collected.
|
|
12
|
+
*
|
|
13
|
+
* Do not construct directly — use {@link ParticleSystem.requestParticle} to
|
|
14
|
+
* obtain a recycled or fresh instance, then configure it through
|
|
15
|
+
* {@link Particle.applyOptions}.
|
|
16
|
+
*/
|
|
6
17
|
class Particle {
|
|
7
18
|
_totalLifetime = Time.oneSecond.clone();
|
|
8
19
|
_elapsedLifetime = Time.zero.clone();
|
|
@@ -67,18 +78,38 @@ class Particle {
|
|
|
67
78
|
set textureIndex(textureIndex) {
|
|
68
79
|
this._textureIndex = textureIndex;
|
|
69
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* Time remaining before this particle expires, returned via the shared
|
|
83
|
+
* `Time.temp` scratch value — copy before storing if you need it beyond
|
|
84
|
+
* the current frame.
|
|
85
|
+
*/
|
|
70
86
|
get remainingLifetime() {
|
|
71
87
|
return Time.temp.set(this._totalLifetime.milliseconds - this._elapsedLifetime.milliseconds);
|
|
72
88
|
}
|
|
89
|
+
/**
|
|
90
|
+
* Fraction of total lifetime already elapsed, in [0, 1]. Used by
|
|
91
|
+
* {@link ColorAffector} as the interpolation factor for tint blending.
|
|
92
|
+
*/
|
|
73
93
|
get elapsedRatio() {
|
|
74
94
|
return this._elapsedLifetime.milliseconds / this._totalLifetime.milliseconds;
|
|
75
95
|
}
|
|
96
|
+
/** Fraction of total lifetime still remaining, in [0, 1]. */
|
|
76
97
|
get remainingRatio() {
|
|
77
98
|
return this.remainingLifetime.milliseconds / this._totalLifetime.milliseconds;
|
|
78
99
|
}
|
|
100
|
+
/**
|
|
101
|
+
* Returns `true` once `elapsedLifetime` exceeds `totalLifetime`. Expired
|
|
102
|
+
* particles are moved to the graveyard by {@link ParticleSystem.update}
|
|
103
|
+
* before affectors run.
|
|
104
|
+
*/
|
|
79
105
|
get expired() {
|
|
80
106
|
return this._elapsedLifetime.greaterThan(this._totalLifetime);
|
|
81
107
|
}
|
|
108
|
+
/**
|
|
109
|
+
* Bulk-copies every field from `options` into this particle, replacing all
|
|
110
|
+
* previous state. Called immediately after {@link ParticleSystem.requestParticle}
|
|
111
|
+
* to configure a recycled particle for reuse.
|
|
112
|
+
*/
|
|
82
113
|
applyOptions(options) {
|
|
83
114
|
const { totalLifetime, elapsedLifetime, position, velocity, scale, tint, rotation, rotationSpeed, textureIndex, } = options;
|
|
84
115
|
this._totalLifetime.copy(totalLifetime);
|
|
@@ -92,6 +123,12 @@ class Particle {
|
|
|
92
123
|
this._textureIndex = textureIndex;
|
|
93
124
|
return this;
|
|
94
125
|
}
|
|
126
|
+
/**
|
|
127
|
+
* Destroys all owned value objects. Called by
|
|
128
|
+
* {@link ParticleSystem.clearParticles} when the pool is flushed entirely.
|
|
129
|
+
* Do not call on individual particles mid-simulation; let the system
|
|
130
|
+
* recycle them via the graveyard instead.
|
|
131
|
+
*/
|
|
95
132
|
destroy() {
|
|
96
133
|
this._totalLifetime.destroy();
|
|
97
134
|
this._elapsedLifetime.destroy();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Particle.js","sources":["../../../../src/particles/Particle.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"Particle.js","sources":["../../../../src/particles/Particle.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,29 @@
|
|
|
1
1
|
import type { Time } from '@/core/Time';
|
|
2
2
|
import type { Vector } from '@/math/Vector';
|
|
3
3
|
import type { Color } from '@/core/Color';
|
|
4
|
+
/**
|
|
5
|
+
* Shared property contract for both {@link Particle} (live instance) and
|
|
6
|
+
* {@link ParticleOptions} (spawn configuration). Every field represents a
|
|
7
|
+
* mutable, per-particle attribute that affectors and the system update each
|
|
8
|
+
* tick.
|
|
9
|
+
*/
|
|
4
10
|
export interface ParticleProperties {
|
|
11
|
+
/** Total time the particle lives before expiring. */
|
|
5
12
|
totalLifetime: Time;
|
|
13
|
+
/** Time that has passed since the particle was spawned. */
|
|
6
14
|
elapsedLifetime: Time;
|
|
15
|
+
/** Position in the owning {@link ParticleSystem}'s local coordinate space. */
|
|
7
16
|
position: Vector;
|
|
17
|
+
/** Pixels-per-second movement vector applied by the system each tick. */
|
|
8
18
|
velocity: Vector;
|
|
19
|
+
/** Multiplicative scale applied to the particle sprite on both axes. */
|
|
9
20
|
scale: Vector;
|
|
21
|
+
/** Rotation in degrees, normalised to [0, 360) by {@link trimRotation}. */
|
|
10
22
|
rotation: number;
|
|
23
|
+
/** Degrees-per-second angular velocity accumulated by {@link TorqueAffector}. */
|
|
11
24
|
rotationSpeed: number;
|
|
25
|
+
/** Index into the atlas frame list used to choose the particle sprite. */
|
|
12
26
|
textureIndex: number;
|
|
27
|
+
/** RGBA tint blended onto the particle sprite, interpolated by {@link ColorAffector}. */
|
|
13
28
|
tint: Color;
|
|
14
29
|
}
|
|
@@ -5,6 +5,20 @@ import { Drawable } from '@/rendering/Drawable';
|
|
|
5
5
|
import type { Texture } from '@/rendering/texture/Texture';
|
|
6
6
|
import type { ParticleEmitter } from '@/particles/emitters/ParticleEmitter';
|
|
7
7
|
import type { ParticleAffector } from '@/particles/affectors/ParticleAffector';
|
|
8
|
+
/**
|
|
9
|
+
* The central coordinator of the particle triad. `ParticleSystem` is a
|
|
10
|
+
* {@link Drawable} that owns a list of {@link ParticleEmitter} spawners, a
|
|
11
|
+
* list of {@link ParticleAffector} mutators, and the live/graveyard particle
|
|
12
|
+
* pools. Each call to {@link ParticleSystem.update} runs all emitters to
|
|
13
|
+
* spawn new particles, advances every live particle's position and lifetime,
|
|
14
|
+
* retires expired ones to the graveyard for pooling, and runs all affectors
|
|
15
|
+
* on the survivors.
|
|
16
|
+
*
|
|
17
|
+
* Rendering reads {@link ParticleSystem.vertices} and
|
|
18
|
+
* {@link ParticleSystem.texCoords} (lazily recomputed on texture-frame
|
|
19
|
+
* changes) plus the live {@link ParticleSystem.particles} array to draw each
|
|
20
|
+
* sprite.
|
|
21
|
+
*/
|
|
8
22
|
export declare class ParticleSystem extends Drawable {
|
|
9
23
|
private _emitters;
|
|
10
24
|
private _affectors;
|
|
@@ -21,23 +35,78 @@ export declare class ParticleSystem extends Drawable {
|
|
|
21
35
|
set texture(texture: Texture);
|
|
22
36
|
get textureFrame(): Rectangle;
|
|
23
37
|
set textureFrame(frame: Rectangle);
|
|
38
|
+
/**
|
|
39
|
+
* Quad corner offsets for the current {@link textureFrame}, in local
|
|
40
|
+
* space as `[minX, minY, maxX, maxY]`. Recomputed lazily whenever
|
|
41
|
+
* `textureFrame` changes. Used by the renderer to position each particle
|
|
42
|
+
* sprite relative to its world position.
|
|
43
|
+
*/
|
|
24
44
|
get vertices(): Float32Array;
|
|
45
|
+
/**
|
|
46
|
+
* Packed UV coordinates for the current {@link textureFrame} as four
|
|
47
|
+
* `Uint32` values, each encoding a `(u, v)` pair in the upper/lower 16
|
|
48
|
+
* bits (normalised to 0–65535). Vertex order respects
|
|
49
|
+
* {@link Texture.flipY}. Recomputed lazily on texture or frame changes.
|
|
50
|
+
*/
|
|
25
51
|
get texCoords(): Uint32Array;
|
|
26
52
|
get emitters(): Array<ParticleEmitter>;
|
|
27
53
|
get affectors(): Array<ParticleAffector>;
|
|
28
54
|
get particles(): Array<Particle>;
|
|
55
|
+
/**
|
|
56
|
+
* Pool of expired {@link Particle} instances waiting to be recycled.
|
|
57
|
+
* {@link requestParticle} pops from this array before allocating a new
|
|
58
|
+
* instance, keeping GC pressure low during sustained emission.
|
|
59
|
+
*/
|
|
29
60
|
get graveyard(): Array<Particle>;
|
|
61
|
+
/**
|
|
62
|
+
* Replaces the particle sprite texture and resets the texture frame to
|
|
63
|
+
* cover the full new texture. No-ops if `texture` is the same instance.
|
|
64
|
+
*/
|
|
30
65
|
setTexture(texture: Texture): this;
|
|
66
|
+
/**
|
|
67
|
+
* Sets the sub-rectangle of the texture used as the particle sprite,
|
|
68
|
+
* invalidating cached vertices and UV coordinates and updating the system's
|
|
69
|
+
* local bounds to match the frame dimensions.
|
|
70
|
+
*/
|
|
31
71
|
setTextureFrame(frame: Rectangle): this;
|
|
72
|
+
/** Resets the texture frame to the full dimensions of the current texture. */
|
|
32
73
|
resetTextureFrame(): this;
|
|
74
|
+
/** Registers `emitter` to be called each tick during {@link update}. */
|
|
33
75
|
addEmitter(emitter: ParticleEmitter): this;
|
|
76
|
+
/** Destroys and removes all registered emitters. */
|
|
34
77
|
clearEmitters(): this;
|
|
78
|
+
/** Registers `affector` to run on every live particle each tick during {@link update}. */
|
|
35
79
|
addAffector(affector: ParticleAffector): this;
|
|
80
|
+
/** Destroys and removes all registered affectors. */
|
|
36
81
|
clearAffectors(): this;
|
|
82
|
+
/**
|
|
83
|
+
* Returns a recycled particle from the {@link graveyard}, or allocates a
|
|
84
|
+
* new one if the pool is empty. Call {@link Particle.applyOptions}
|
|
85
|
+
* immediately after to reset its state before passing it to
|
|
86
|
+
* {@link emitParticle}.
|
|
87
|
+
*/
|
|
37
88
|
requestParticle(): Particle;
|
|
89
|
+
/** Adds a fully-configured `particle` to the live pool. Typically called by emitters. */
|
|
38
90
|
emitParticle(particle: Particle): this;
|
|
91
|
+
/**
|
|
92
|
+
* Advances a single particle by one `delta` step: increments
|
|
93
|
+
* `elapsedLifetime`, integrates velocity into position, and applies
|
|
94
|
+
* `rotationSpeed` to rotation. Called for every live particle by
|
|
95
|
+
* {@link update} before the affector pass.
|
|
96
|
+
*/
|
|
39
97
|
updateParticle(particle: Particle, delta: Time): this;
|
|
98
|
+
/**
|
|
99
|
+
* Destroys and removes all particles from both the live pool and the
|
|
100
|
+
* graveyard. Use when resetting or recycling the entire system.
|
|
101
|
+
*/
|
|
40
102
|
clearParticles(): this;
|
|
103
|
+
/**
|
|
104
|
+
* Advances the full simulation by one `delta` step: runs all emitters,
|
|
105
|
+
* then for each live particle calls {@link updateParticle}, moves expired
|
|
106
|
+
* ones to the {@link graveyard}, and runs all affectors on survivors.
|
|
107
|
+
* The particle array is iterated in reverse to allow in-place splice
|
|
108
|
+
* without re-indexing.
|
|
109
|
+
*/
|
|
41
110
|
update(delta: Time): this;
|
|
42
111
|
destroy(): void;
|
|
43
112
|
}
|
|
@@ -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,6 +121,11 @@ 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;
|
|
@@ -94,13 +134,16 @@ class ParticleSystem extends Drawable {
|
|
|
94
134
|
this._invalidateBoundsCascade();
|
|
95
135
|
return this;
|
|
96
136
|
}
|
|
137
|
+
/** Resets the texture frame to the full dimensions of the current texture. */
|
|
97
138
|
resetTextureFrame() {
|
|
98
139
|
return this.setTextureFrame(Rectangle.temp.set(0, 0, this._texture.width, this._texture.height));
|
|
99
140
|
}
|
|
141
|
+
/** Registers `emitter` to be called each tick during {@link update}. */
|
|
100
142
|
addEmitter(emitter) {
|
|
101
143
|
this._emitters.push(emitter);
|
|
102
144
|
return this;
|
|
103
145
|
}
|
|
146
|
+
/** Destroys and removes all registered emitters. */
|
|
104
147
|
clearEmitters() {
|
|
105
148
|
for (const emitter of this._emitters) {
|
|
106
149
|
emitter.destroy();
|
|
@@ -108,10 +151,12 @@ class ParticleSystem extends Drawable {
|
|
|
108
151
|
this._emitters.length = 0;
|
|
109
152
|
return this;
|
|
110
153
|
}
|
|
154
|
+
/** Registers `affector` to run on every live particle each tick during {@link update}. */
|
|
111
155
|
addAffector(affector) {
|
|
112
156
|
this._affectors.push(affector);
|
|
113
157
|
return this;
|
|
114
158
|
}
|
|
159
|
+
/** Destroys and removes all registered affectors. */
|
|
115
160
|
clearAffectors() {
|
|
116
161
|
for (const affector of this._affectors) {
|
|
117
162
|
affector.destroy();
|
|
@@ -119,13 +164,26 @@ class ParticleSystem extends Drawable {
|
|
|
119
164
|
this._affectors.length = 0;
|
|
120
165
|
return this;
|
|
121
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
|
+
*/
|
|
122
173
|
requestParticle() {
|
|
123
174
|
return this._graveyard.pop() || new Particle();
|
|
124
175
|
}
|
|
176
|
+
/** Adds a fully-configured `particle` to the live pool. Typically called by emitters. */
|
|
125
177
|
emitParticle(particle) {
|
|
126
178
|
this._particles.push(particle);
|
|
127
179
|
return this;
|
|
128
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
|
+
*/
|
|
129
187
|
updateParticle(particle, delta) {
|
|
130
188
|
const seconds = delta.seconds;
|
|
131
189
|
particle.elapsedLifetime.addTime(delta);
|
|
@@ -133,6 +191,10 @@ class ParticleSystem extends Drawable {
|
|
|
133
191
|
particle.rotation += (seconds * particle.rotationSpeed);
|
|
134
192
|
return this;
|
|
135
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
|
+
*/
|
|
136
198
|
clearParticles() {
|
|
137
199
|
for (const particle of this._particles) {
|
|
138
200
|
particle.destroy();
|
|
@@ -144,6 +206,13 @@ class ParticleSystem extends Drawable {
|
|
|
144
206
|
this._graveyard.length = 0;
|
|
145
207
|
return this;
|
|
146
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
|
+
*/
|
|
147
216
|
update(delta) {
|
|
148
217
|
const emitters = this._emitters;
|
|
149
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,6 +20,10 @@ 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;
|
|
@@ -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;;;;"}
|