@rb-games/core 0.1.0
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/README.md +488 -0
- package/dist/devtools/DraggableController.d.ts +10 -0
- package/dist/devtools/DraggableController.d.ts.map +1 -0
- package/dist/devtools/ResizableController.d.ts +19 -0
- package/dist/devtools/ResizableController.d.ts.map +1 -0
- package/dist/devtools/index.d.ts +7 -0
- package/dist/devtools/index.d.ts.map +1 -0
- package/dist/devtools/index.js +884 -0
- package/dist/devtools/index.js.map +1 -0
- package/dist/devtools/overlayPlugin.d.ts +3 -0
- package/dist/devtools/overlayPlugin.d.ts.map +1 -0
- package/dist/devtools/spinePropertiesPlugin.d.ts +3 -0
- package/dist/devtools/spinePropertiesPlugin.d.ts.map +1 -0
- package/dist/devtools/spriteTextPropertiesPlugin.d.ts +3 -0
- package/dist/devtools/spriteTextPropertiesPlugin.d.ts.map +1 -0
- package/dist/devtools/treePlugin.d.ts +7 -0
- package/dist/devtools/treePlugin.d.ts.map +1 -0
- package/dist/engine/PixiEngine.d.ts +404 -0
- package/dist/engine/PixiEngine.d.ts.map +1 -0
- package/dist/engine/index.d.ts +2 -0
- package/dist/engine/index.d.ts.map +1 -0
- package/dist/engine/index.js +1818 -0
- package/dist/engine/index.js.map +1 -0
- package/dist/filters/ChromaKeyFilter.d.ts +64 -0
- package/dist/filters/ChromaKeyFilter.d.ts.map +1 -0
- package/dist/filters/index.d.ts +2 -0
- package/dist/filters/index.d.ts.map +1 -0
- package/dist/filters/index.js +248 -0
- package/dist/filters/index.js.map +1 -0
- package/dist/helpers/AssetHelper.d.ts +117 -0
- package/dist/helpers/AssetHelper.d.ts.map +1 -0
- package/dist/helpers/SVGAssetHelper.d.ts +397 -0
- package/dist/helpers/SVGAssetHelper.d.ts.map +1 -0
- package/dist/helpers/SVGLoader.d.ts +46 -0
- package/dist/helpers/SVGLoader.d.ts.map +1 -0
- package/dist/helpers/SVGParser.d.ts +121 -0
- package/dist/helpers/SVGParser.d.ts.map +1 -0
- package/dist/helpers/eventBridge.d.ts +150 -0
- package/dist/helpers/eventBridge.d.ts.map +1 -0
- package/dist/helpers/index.d.ts +8 -0
- package/dist/helpers/index.d.ts.map +1 -0
- package/dist/helpers/index.js +702 -0
- package/dist/helpers/index.js.map +1 -0
- package/dist/helpers/mergeUtils.d.ts +21 -0
- package/dist/helpers/mergeUtils.d.ts.map +1 -0
- package/dist/helpers/resolvePublicPath.d.ts +6 -0
- package/dist/helpers/resolvePublicPath.d.ts.map +1 -0
- package/dist/i18n/index.d.ts +2 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +527 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/sharedI18n.d.ts +11 -0
- package/dist/i18n/sharedI18n.d.ts.map +1 -0
- package/dist/layout/Align.d.ts +126 -0
- package/dist/layout/Align.d.ts.map +1 -0
- package/dist/layout/Bounds.d.ts +120 -0
- package/dist/layout/Bounds.d.ts.map +1 -0
- package/dist/layout/Distribute.d.ts +103 -0
- package/dist/layout/Distribute.d.ts.map +1 -0
- package/dist/layout/Flow.d.ts +213 -0
- package/dist/layout/Flow.d.ts.map +1 -0
- package/dist/layout/PositionUtils.d.ts +57 -0
- package/dist/layout/PositionUtils.d.ts.map +1 -0
- package/dist/layout/index.d.ts +6 -0
- package/dist/layout/index.d.ts.map +1 -0
- package/dist/layout/index.js +673 -0
- package/dist/layout/index.js.map +1 -0
- package/dist/particle/Emitter.d.ts +290 -0
- package/dist/particle/Emitter.d.ts.map +1 -0
- package/dist/particle/EmitterConfig.d.ts +228 -0
- package/dist/particle/EmitterConfig.d.ts.map +1 -0
- package/dist/particle/LinkedListContainer.d.ts +7 -0
- package/dist/particle/LinkedListContainer.d.ts.map +1 -0
- package/dist/particle/Particle.d.ts +63 -0
- package/dist/particle/Particle.d.ts.map +1 -0
- package/dist/particle/ParticleUtils.d.ts +97 -0
- package/dist/particle/ParticleUtils.d.ts.map +1 -0
- package/dist/particle/PropertyList.d.ts +40 -0
- package/dist/particle/PropertyList.d.ts.map +1 -0
- package/dist/particle/PropertyNode.d.ts +74 -0
- package/dist/particle/PropertyNode.d.ts.map +1 -0
- package/dist/particle/SpineEmitter.d.ts +55 -0
- package/dist/particle/SpineEmitter.d.ts.map +1 -0
- package/dist/particle/SpineParticle.d.ts +74 -0
- package/dist/particle/SpineParticle.d.ts.map +1 -0
- package/dist/particle/behaviors/AccelerationMovement.d.ts +62 -0
- package/dist/particle/behaviors/AccelerationMovement.d.ts.map +1 -0
- package/dist/particle/behaviors/Alpha.d.ts +60 -0
- package/dist/particle/behaviors/Alpha.d.ts.map +1 -0
- package/dist/particle/behaviors/AnimatedTexture.d.ts +111 -0
- package/dist/particle/behaviors/AnimatedTexture.d.ts.map +1 -0
- package/dist/particle/behaviors/Behaviors.d.ts +71 -0
- package/dist/particle/behaviors/Behaviors.d.ts.map +1 -0
- package/dist/particle/behaviors/BlendMode.d.ts +31 -0
- package/dist/particle/behaviors/BlendMode.d.ts.map +1 -0
- package/dist/particle/behaviors/BurstSpawn.d.ts +43 -0
- package/dist/particle/behaviors/BurstSpawn.d.ts.map +1 -0
- package/dist/particle/behaviors/Color.d.ts +60 -0
- package/dist/particle/behaviors/Color.d.ts.map +1 -0
- package/dist/particle/behaviors/MultiStateAnimatedTexture.d.ts +99 -0
- package/dist/particle/behaviors/MultiStateAnimatedTexture.d.ts.map +1 -0
- package/dist/particle/behaviors/OrderedTexture.d.ts +33 -0
- package/dist/particle/behaviors/OrderedTexture.d.ts.map +1 -0
- package/dist/particle/behaviors/PathMovement.d.ts +68 -0
- package/dist/particle/behaviors/PathMovement.d.ts.map +1 -0
- package/dist/particle/behaviors/PointSpawn.d.ts +21 -0
- package/dist/particle/behaviors/PointSpawn.d.ts.map +1 -0
- package/dist/particle/behaviors/RandomColor.d.ts +17 -0
- package/dist/particle/behaviors/RandomColor.d.ts.map +1 -0
- package/dist/particle/behaviors/RandomTexture.d.ts +32 -0
- package/dist/particle/behaviors/RandomTexture.d.ts.map +1 -0
- package/dist/particle/behaviors/Rotation.d.ts +114 -0
- package/dist/particle/behaviors/Rotation.d.ts.map +1 -0
- package/dist/particle/behaviors/Scale.d.ts +74 -0
- package/dist/particle/behaviors/Scale.d.ts.map +1 -0
- package/dist/particle/behaviors/ShapeSpawn.d.ts +58 -0
- package/dist/particle/behaviors/ShapeSpawn.d.ts.map +1 -0
- package/dist/particle/behaviors/SingleTexture.d.ts +32 -0
- package/dist/particle/behaviors/SingleTexture.d.ts.map +1 -0
- package/dist/particle/behaviors/SpeedMovement.d.ts +76 -0
- package/dist/particle/behaviors/SpeedMovement.d.ts.map +1 -0
- package/dist/particle/behaviors/SpineTexture.d.ts +173 -0
- package/dist/particle/behaviors/SpineTexture.d.ts.map +1 -0
- package/dist/particle/behaviors/ZindexBehavior.d.ts +16 -0
- package/dist/particle/behaviors/ZindexBehavior.d.ts.map +1 -0
- package/dist/particle/behaviors/editor/Types.d.ts +104 -0
- package/dist/particle/behaviors/editor/Types.d.ts.map +1 -0
- package/dist/particle/behaviors/editor/behaviors/AccelerationMovement.d.ts +2 -0
- package/dist/particle/behaviors/editor/behaviors/AccelerationMovement.d.ts.map +1 -0
- package/dist/particle/behaviors/editor/behaviors/Alpha.d.ts +2 -0
- package/dist/particle/behaviors/editor/behaviors/Alpha.d.ts.map +1 -0
- package/dist/particle/behaviors/editor/behaviors/AnimatedTexture.d.ts +2 -0
- package/dist/particle/behaviors/editor/behaviors/AnimatedTexture.d.ts.map +1 -0
- package/dist/particle/behaviors/editor/behaviors/BlendMode.d.ts +2 -0
- package/dist/particle/behaviors/editor/behaviors/BlendMode.d.ts.map +1 -0
- package/dist/particle/behaviors/editor/behaviors/BurstSpawn.d.ts +2 -0
- package/dist/particle/behaviors/editor/behaviors/BurstSpawn.d.ts.map +1 -0
- package/dist/particle/behaviors/editor/behaviors/Color.d.ts +2 -0
- package/dist/particle/behaviors/editor/behaviors/Color.d.ts.map +1 -0
- package/dist/particle/behaviors/editor/behaviors/OrderedTexture.d.ts +2 -0
- package/dist/particle/behaviors/editor/behaviors/OrderedTexture.d.ts.map +1 -0
- package/dist/particle/behaviors/editor/behaviors/PathMovement.d.ts +2 -0
- package/dist/particle/behaviors/editor/behaviors/PathMovement.d.ts.map +1 -0
- package/dist/particle/behaviors/editor/behaviors/PointSpawn.d.ts +2 -0
- package/dist/particle/behaviors/editor/behaviors/PointSpawn.d.ts.map +1 -0
- package/dist/particle/behaviors/editor/behaviors/RandomTexture.d.ts +2 -0
- package/dist/particle/behaviors/editor/behaviors/RandomTexture.d.ts.map +1 -0
- package/dist/particle/behaviors/editor/behaviors/Rotation.d.ts +2 -0
- package/dist/particle/behaviors/editor/behaviors/Rotation.d.ts.map +1 -0
- package/dist/particle/behaviors/editor/behaviors/Scale.d.ts +2 -0
- package/dist/particle/behaviors/editor/behaviors/Scale.d.ts.map +1 -0
- package/dist/particle/behaviors/editor/behaviors/ShapeSpawn.d.ts +2 -0
- package/dist/particle/behaviors/editor/behaviors/ShapeSpawn.d.ts.map +1 -0
- package/dist/particle/behaviors/editor/behaviors/SingleTexture.d.ts +2 -0
- package/dist/particle/behaviors/editor/behaviors/SingleTexture.d.ts.map +1 -0
- package/dist/particle/behaviors/editor/behaviors/SpeedMovement.d.ts +2 -0
- package/dist/particle/behaviors/editor/behaviors/SpeedMovement.d.ts.map +1 -0
- package/dist/particle/behaviors/editor/behaviors/index.d.ts +15 -0
- package/dist/particle/behaviors/editor/behaviors/index.d.ts.map +1 -0
- package/dist/particle/behaviors/editor/index.d.ts +5 -0
- package/dist/particle/behaviors/editor/index.d.ts.map +1 -0
- package/dist/particle/behaviors/editor/shapes/PolygonalChain.d.ts +2 -0
- package/dist/particle/behaviors/editor/shapes/PolygonalChain.d.ts.map +1 -0
- package/dist/particle/behaviors/editor/shapes/Rectangle.d.ts +2 -0
- package/dist/particle/behaviors/editor/shapes/Rectangle.d.ts.map +1 -0
- package/dist/particle/behaviors/editor/shapes/Torus.d.ts +2 -0
- package/dist/particle/behaviors/editor/shapes/Torus.d.ts.map +1 -0
- package/dist/particle/behaviors/index.d.ts +25 -0
- package/dist/particle/behaviors/index.d.ts.map +1 -0
- package/dist/particle/behaviors/shapes/PolygonalChain.d.ts +57 -0
- package/dist/particle/behaviors/shapes/PolygonalChain.d.ts.map +1 -0
- package/dist/particle/behaviors/shapes/Rectangle.d.ts +59 -0
- package/dist/particle/behaviors/shapes/Rectangle.d.ts.map +1 -0
- package/dist/particle/behaviors/shapes/SpawnShape.d.ts +32 -0
- package/dist/particle/behaviors/shapes/SpawnShape.d.ts.map +1 -0
- package/dist/particle/behaviors/shapes/Torus.d.ts +71 -0
- package/dist/particle/behaviors/shapes/Torus.d.ts.map +1 -0
- package/dist/particle/behaviors/shapes/index.d.ts +5 -0
- package/dist/particle/behaviors/shapes/index.d.ts.map +1 -0
- package/dist/particle/index.d.ts +11 -0
- package/dist/particle/index.d.ts.map +1 -0
- package/dist/particle/index.js +2845 -0
- package/dist/particle/index.js.map +1 -0
- package/dist/plugins/Plugin.types.d.ts +80 -0
- package/dist/plugins/Plugin.types.d.ts.map +1 -0
- package/dist/plugins/device/DeviceOptimizerPlugin.d.ts +187 -0
- package/dist/plugins/device/DeviceOptimizerPlugin.d.ts.map +1 -0
- package/dist/plugins/device/DeviceOptimizerPlugin.types.d.ts +134 -0
- package/dist/plugins/device/DeviceOptimizerPlugin.types.d.ts.map +1 -0
- package/dist/plugins/device/index.d.ts +3 -0
- package/dist/plugins/device/index.d.ts.map +1 -0
- package/dist/plugins/display/DisplayPlugin.d.ts +208 -0
- package/dist/plugins/display/DisplayPlugin.d.ts.map +1 -0
- package/dist/plugins/display/DisplayPlugin.types.d.ts +174 -0
- package/dist/plugins/display/DisplayPlugin.types.d.ts.map +1 -0
- package/dist/plugins/display/displayViewport.d.ts +10 -0
- package/dist/plugins/display/displayViewport.d.ts.map +1 -0
- package/dist/plugins/display/index.d.ts +4 -0
- package/dist/plugins/display/index.d.ts.map +1 -0
- package/dist/plugins/eventbus/EventBusPlugin.d.ts +21 -0
- package/dist/plugins/eventbus/EventBusPlugin.d.ts.map +1 -0
- package/dist/plugins/eventbus/EventBusPlugin.types.d.ts +24 -0
- package/dist/plugins/eventbus/EventBusPlugin.types.d.ts.map +1 -0
- package/dist/plugins/eventbus/index.d.ts +3 -0
- package/dist/plugins/eventbus/index.d.ts.map +1 -0
- package/dist/plugins/gsap/GsapPlugin.d.ts +307 -0
- package/dist/plugins/gsap/GsapPlugin.d.ts.map +1 -0
- package/dist/plugins/gsap/index.d.ts +2 -0
- package/dist/plugins/gsap/index.d.ts.map +1 -0
- package/dist/plugins/index.d.ts +13 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +12806 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/input/InputPlugin.const.d.ts +80 -0
- package/dist/plugins/input/InputPlugin.const.d.ts.map +1 -0
- package/dist/plugins/input/InputPlugin.d.ts +141 -0
- package/dist/plugins/input/InputPlugin.d.ts.map +1 -0
- package/dist/plugins/input/InputPlugin.types.d.ts +41 -0
- package/dist/plugins/input/InputPlugin.types.d.ts.map +1 -0
- package/dist/plugins/input/KeyboardManager.d.ts +139 -0
- package/dist/plugins/input/KeyboardManager.d.ts.map +1 -0
- package/dist/plugins/input/KeyboardManager.types.d.ts +27 -0
- package/dist/plugins/input/KeyboardManager.types.d.ts.map +1 -0
- package/dist/plugins/input/index.d.ts +4 -0
- package/dist/plugins/input/index.d.ts.map +1 -0
- package/dist/plugins/language/I18NextPlugin.d.ts +30 -0
- package/dist/plugins/language/I18NextPlugin.d.ts.map +1 -0
- package/dist/plugins/language/I18NextPlugin.types.d.ts +29 -0
- package/dist/plugins/language/I18NextPlugin.types.d.ts.map +1 -0
- package/dist/plugins/language/index.d.ts +3 -0
- package/dist/plugins/language/index.d.ts.map +1 -0
- package/dist/plugins/resource/ResourcePlugin.d.ts +189 -0
- package/dist/plugins/resource/ResourcePlugin.d.ts.map +1 -0
- package/dist/plugins/resource/ResourcePlugin.types.d.ts +153 -0
- package/dist/plugins/resource/ResourcePlugin.types.d.ts.map +1 -0
- package/dist/plugins/resource/index.d.ts +3 -0
- package/dist/plugins/resource/index.d.ts.map +1 -0
- package/dist/plugins/scene/Scene.d.ts +203 -0
- package/dist/plugins/scene/Scene.d.ts.map +1 -0
- package/dist/plugins/scene/ScenePlugin.d.ts +162 -0
- package/dist/plugins/scene/ScenePlugin.d.ts.map +1 -0
- package/dist/plugins/scene/ScenePlugin.types.d.ts +35 -0
- package/dist/plugins/scene/ScenePlugin.types.d.ts.map +1 -0
- package/dist/plugins/scene/index.d.ts +4 -0
- package/dist/plugins/scene/index.d.ts.map +1 -0
- package/dist/plugins/sentry/SentryPlugin.d.ts +66 -0
- package/dist/plugins/sentry/SentryPlugin.d.ts.map +1 -0
- package/dist/plugins/sentry/SentryPlugin.types.d.ts +8 -0
- package/dist/plugins/sentry/SentryPlugin.types.d.ts.map +1 -0
- package/dist/plugins/sentry/index.d.ts +3 -0
- package/dist/plugins/sentry/index.d.ts.map +1 -0
- package/dist/plugins/service/ServiceAdapter.d.ts +88 -0
- package/dist/plugins/service/ServiceAdapter.d.ts.map +1 -0
- package/dist/plugins/service/ServiceEventHelper.d.ts +6 -0
- package/dist/plugins/service/ServiceEventHelper.d.ts.map +1 -0
- package/dist/plugins/service/ServicePlugin.d.ts +135 -0
- package/dist/plugins/service/ServicePlugin.d.ts.map +1 -0
- package/dist/plugins/service/ServicePlugin.types.d.ts +14 -0
- package/dist/plugins/service/ServicePlugin.types.d.ts.map +1 -0
- package/dist/plugins/service/adapters/DevAuthAdapter.d.ts +56 -0
- package/dist/plugins/service/adapters/DevAuthAdapter.d.ts.map +1 -0
- package/dist/plugins/service/adapters/RGSAdapter.d.ts +82 -0
- package/dist/plugins/service/adapters/RGSAdapter.d.ts.map +1 -0
- package/dist/plugins/service/adapters/index.d.ts +7 -0
- package/dist/plugins/service/adapters/index.d.ts.map +1 -0
- package/dist/plugins/service/adapters/resolvePublicIp.d.ts +10 -0
- package/dist/plugins/service/adapters/resolvePublicIp.d.ts.map +1 -0
- package/dist/plugins/service/index.d.ts +10 -0
- package/dist/plugins/service/index.d.ts.map +1 -0
- package/dist/plugins/service/types/api.types.d.ts +299 -0
- package/dist/plugins/service/types/api.types.d.ts.map +1 -0
- package/dist/plugins/service/types/index.d.ts +6 -0
- package/dist/plugins/service/types/index.d.ts.map +1 -0
- package/dist/plugins/skin/ISkin.d.ts +62 -0
- package/dist/plugins/skin/ISkin.d.ts.map +1 -0
- package/dist/plugins/skin/Skin.d.ts +155 -0
- package/dist/plugins/skin/Skin.d.ts.map +1 -0
- package/dist/plugins/skin/SkinPlugin.d.ts +285 -0
- package/dist/plugins/skin/SkinPlugin.d.ts.map +1 -0
- package/dist/plugins/skin/SkinPlugin.types.d.ts +56 -0
- package/dist/plugins/skin/SkinPlugin.types.d.ts.map +1 -0
- package/dist/plugins/skin/index.d.ts +5 -0
- package/dist/plugins/skin/index.d.ts.map +1 -0
- package/dist/plugins/sound/SoundPlugin.d.ts +319 -0
- package/dist/plugins/sound/SoundPlugin.d.ts.map +1 -0
- package/dist/plugins/sound/SoundPlugin.types.d.ts +102 -0
- package/dist/plugins/sound/SoundPlugin.types.d.ts.map +1 -0
- package/dist/plugins/sound/SoundTestGUI.d.ts +42 -0
- package/dist/plugins/sound/SoundTestGUI.d.ts.map +1 -0
- package/dist/plugins/sound/index.d.ts +4 -0
- package/dist/plugins/sound/index.d.ts.map +1 -0
- package/dist/state-machine/ConfigBuilder.d.ts +239 -0
- package/dist/state-machine/ConfigBuilder.d.ts.map +1 -0
- package/dist/state-machine/StateMachine.d.ts +251 -0
- package/dist/state-machine/StateMachine.d.ts.map +1 -0
- package/dist/state-machine/guards.d.ts +151 -0
- package/dist/state-machine/guards.d.ts.map +1 -0
- package/dist/state-machine/index.d.ts +5 -0
- package/dist/state-machine/index.d.ts.map +1 -0
- package/dist/state-machine/index.js +954 -0
- package/dist/state-machine/index.js.map +1 -0
- package/dist/state-machine/types.d.ts +65 -0
- package/dist/state-machine/types.d.ts.map +1 -0
- package/dist/store/DataStore.d.ts +167 -0
- package/dist/store/DataStore.d.ts.map +1 -0
- package/dist/store/index.d.ts +3 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +197 -0
- package/dist/store/index.js.map +1 -0
- package/dist/ui/behaviors/ButtonBehavior.d.ts +245 -0
- package/dist/ui/behaviors/ButtonBehavior.d.ts.map +1 -0
- package/dist/ui/behaviors/InputBehavior.d.ts +169 -0
- package/dist/ui/behaviors/InputBehavior.d.ts.map +1 -0
- package/dist/ui/behaviors/ScrollbarBehavior.d.ts +371 -0
- package/dist/ui/behaviors/ScrollbarBehavior.d.ts.map +1 -0
- package/dist/ui/behaviors/index.d.ts +4 -0
- package/dist/ui/behaviors/index.d.ts.map +1 -0
- package/dist/ui/components/ButtonComp.d.ts +138 -0
- package/dist/ui/components/ButtonComp.d.ts.map +1 -0
- package/dist/ui/components/Comp.utils.d.ts +390 -0
- package/dist/ui/components/Comp.utils.d.ts.map +1 -0
- package/dist/ui/components/Component.types.d.ts +41 -0
- package/dist/ui/components/Component.types.d.ts.map +1 -0
- package/dist/ui/components/InputComp.d.ts +43 -0
- package/dist/ui/components/InputComp.d.ts.map +1 -0
- package/dist/ui/components/LabelBox.d.ts +49 -0
- package/dist/ui/components/LabelBox.d.ts.map +1 -0
- package/dist/ui/components/ListTableComp.d.ts +106 -0
- package/dist/ui/components/ListTableComp.d.ts.map +1 -0
- package/dist/ui/components/Skinable.d.ts +261 -0
- package/dist/ui/components/Skinable.d.ts.map +1 -0
- package/dist/ui/components/SliderComp.d.ts +60 -0
- package/dist/ui/components/SliderComp.d.ts.map +1 -0
- package/dist/ui/components/SpriteTextBBCode.d.ts +16 -0
- package/dist/ui/components/SpriteTextBBCode.d.ts.map +1 -0
- package/dist/ui/components/StepperComp.d.ts +89 -0
- package/dist/ui/components/StepperComp.d.ts.map +1 -0
- package/dist/ui/components/index.d.ts +12 -0
- package/dist/ui/components/index.d.ts.map +1 -0
- package/dist/ui/components/spriteText/SpriteText.d.ts +114 -0
- package/dist/ui/components/spriteText/SpriteText.d.ts.map +1 -0
- package/dist/ui/components/spriteText/SpriteText.types.d.ts +109 -0
- package/dist/ui/components/spriteText/SpriteText.types.d.ts.map +1 -0
- package/dist/ui/components/spriteText/SpriteTextAlignment.d.ts +25 -0
- package/dist/ui/components/spriteText/SpriteTextAlignment.d.ts.map +1 -0
- package/dist/ui/components/spriteText/SpriteTextBezier.d.ts +20 -0
- package/dist/ui/components/spriteText/SpriteTextBezier.d.ts.map +1 -0
- package/dist/ui/components/spriteText/SpriteTextCurve.d.ts +4 -0
- package/dist/ui/components/spriteText/SpriteTextCurve.d.ts.map +1 -0
- package/dist/ui/components/spriteText/SpriteTextKerning.d.ts +7 -0
- package/dist/ui/components/spriteText/SpriteTextKerning.d.ts.map +1 -0
- package/dist/ui/components/spriteText/SpriteTextTexture.d.ts +16 -0
- package/dist/ui/components/spriteText/SpriteTextTexture.d.ts.map +1 -0
- package/dist/ui/components/spriteText/SpriteTextWrap.d.ts +19 -0
- package/dist/ui/components/spriteText/SpriteTextWrap.d.ts.map +1 -0
- package/dist/ui/components/spriteText/index.d.ts +3 -0
- package/dist/ui/components/spriteText/index.d.ts.map +1 -0
- package/dist/ui/index.d.ts +3 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +4778 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/utils/ArrayUtils.d.ts +24 -0
- package/dist/utils/ArrayUtils.d.ts.map +1 -0
- package/dist/utils/ColorUtils.d.ts +34 -0
- package/dist/utils/ColorUtils.d.ts.map +1 -0
- package/dist/utils/DataInjector.d.ts +67 -0
- package/dist/utils/DataInjector.d.ts.map +1 -0
- package/dist/utils/Logger.d.ts +332 -0
- package/dist/utils/Logger.d.ts.map +1 -0
- package/dist/utils/NumberFormatter.d.ts +126 -0
- package/dist/utils/NumberFormatter.d.ts.map +1 -0
- package/dist/utils/ObjectUtils.d.ts +64 -0
- package/dist/utils/ObjectUtils.d.ts.map +1 -0
- package/dist/utils/PixiUtils.d.ts +118 -0
- package/dist/utils/PixiUtils.d.ts.map +1 -0
- package/dist/utils/Throttle.d.ts +103 -0
- package/dist/utils/Throttle.d.ts.map +1 -0
- package/dist/utils/index.d.ts +9 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +899 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/vite/index.d.ts +3 -0
- package/dist/vite/index.d.ts.map +1 -0
- package/dist/vite/index.js +126 -0
- package/dist/vite/index.js.map +1 -0
- package/dist/vite/mergeLocalesPlugin.d.ts +22 -0
- package/dist/vite/mergeLocalesPlugin.d.ts.map +1 -0
- package/package.json +143 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../particle/ParticleUtils.ts","../../particle/PropertyNode.ts","../../particle/Particle.ts","../../particle/behaviors/Behaviors.ts","../../particle/Emitter.ts","../../particle/behaviors/index.ts","../../particle/behaviors/shapes/index.ts","../../particle/behaviors/shapes/Rectangle.ts","../../particle/behaviors/shapes/Torus.ts","../../particle/behaviors/shapes/PolygonalChain.ts","../../particle/behaviors/editor/Types.ts","../../particle/behaviors/AccelerationMovement.ts","../../particle/PropertyList.ts","../../particle/behaviors/Alpha.ts","../../particle/behaviors/AnimatedTexture.ts","../../particle/behaviors/BlendMode.ts","../../particle/behaviors/BurstSpawn.ts","../../particle/behaviors/Color.ts","../../particle/behaviors/OrderedTexture.ts","../../particle/behaviors/PathMovement.ts","../../particle/behaviors/PointSpawn.ts","../../particle/behaviors/RandomTexture.ts","../../particle/behaviors/Rotation.ts","../../particle/behaviors/Scale.ts","../../particle/behaviors/ShapeSpawn.ts","../../particle/behaviors/SingleTexture.ts","../../particle/behaviors/SpeedMovement.ts","../../particle/behaviors/RandomColor.ts","../../particle/behaviors/ZindexBehavior.ts","../../particle/behaviors/MultiStateAnimatedTexture.ts","../../particle/behaviors/SpineTexture.ts","../../particle/EmitterConfig.ts","../../particle/SpineParticle.ts","../../particle/SpineEmitter.ts","../../particle/index.ts"],"names":["value","time","BehaviorOrder","ticker","Point","Texture","getTextures","Container"],"mappings":"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","file":"index.js","sourcesContent":["import { PointData, Texture } from 'pixi.js';\nimport { PropertyNode, ValueStep } from './PropertyNode';\n\n/**\n * The method used by behaviors to fetch textures. Defaults to Texture.from.\n */\n// get Texture.from(), only supports V5 and V6 with individual packages\n// eslint-disable-next-line prefer-const\nexport let GetTextureFromString: (d: string) => Texture = Texture.from;\n\n/**\n * A color value, split apart for interpolation.\n */\nexport interface Color {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface EaseSegment {\n cp: number;\n s: number;\n e: number;\n}\n\n/**\n * The basic easing function used. Takes in a value between 0-1, and outputs another value between 0-1.\n * For example, a basic quadratic in ease would be `(time) => time * time`\n */\nexport type SimpleEase = (time: number) => number;\n\n/**\n * If errors and warnings should be logged within the library.\n */\nexport const verbose = false;\n\nexport const DEG_TO_RADS = Math.PI / 180;\n\n/**\n * Rotates a point by a given angle.\n * @param angle The angle to rotate by in radians\n * @param p The point to rotate around 0,0.\n */\nexport function rotatePoint(angle: number, p: PointData): void {\n if (!angle) return;\n\n const s = Math.sin(angle);\n const c = Math.cos(angle);\n const xnew = (p.x * c) - (p.y * s);\n const ynew = (p.x * s) + (p.y * c);\n\n p.x = xnew;\n p.y = ynew;\n}\n\n/**\n * Combines separate color components (0-255) into a single uint color.\n * @param r The red value of the color\n * @param g The green value of the color\n * @param b The blue value of the color\n * @return The color in the form of 0xRRGGBB\n */\nexport function combineRGBComponents(r: number, g: number, b: number/* , a*/): number {\n return /* a << 24 |*/ (r << 16) | (g << 8) | b;\n}\n\n/**\n * Returns the length (or magnitude) of this point.\n * @param point The point to measure length\n * @return The length of this point.\n */\nexport function length(point: PointData): number {\n return Math.sqrt((point.x * point.x) + (point.y * point.y));\n}\n\n/**\n * Reduces the point to a length of 1.\n * @param point The point to normalize\n */\nexport function normalize(point: PointData): void {\n const oneOverLen = 1 / length(point);\n\n point.x *= oneOverLen;\n point.y *= oneOverLen;\n}\n\n/**\n * Multiplies the x and y values of this point by a value.\n * @param point The point to scaleBy\n * @param value The value to scale by.\n */\nexport function scaleBy(point: PointData, value: number): void {\n point.x *= value;\n point.y *= value;\n}\n\n/**\n * Converts a hex string from \"#AARRGGBB\", \"#RRGGBB\", \"0xAARRGGBB\", \"0xRRGGBB\",\n * \"AARRGGBB\", or \"RRGGBB\" to an object of ints of 0-255, as\n * {r, g, b, (a)}.\n * @param color The input color string.\n * @param output An object to put the output in. If omitted, a new object is created.\n * @return The object with r, g, and b properties, possibly with an a property.\n */\nexport function hexToRGB(color: string, output?: Color): Color {\n if (!output) {\n output = {} as Color;\n }\n if (color.charAt(0) === '#') {\n color = color.substr(1);\n }\n else if (color.indexOf('0x') === 0) {\n color = color.substr(2);\n }\n let alpha;\n\n if (color.length === 8) {\n alpha = color.substr(0, 2);\n color = color.substr(2);\n }\n output.r = parseInt(color.substr(0, 2), 16);// Red\n output.g = parseInt(color.substr(2, 2), 16);// Green\n output.b = parseInt(color.substr(4, 2), 16);// Blue\n if (alpha) {\n output.a = parseInt(alpha, 16);\n }\n\n return output;\n}\n\n/**\n * Generates a custom ease function, based on the GreenSock custom ease, as demonstrated\n * by the related tool at http://www.greensock.com/customease/.\n * @param segments An array of segments, as created by\n * http://www.greensock.com/customease/.\n * @return A function that calculates the percentage of change at\n * a given point in time (0-1 inclusive).\n */\nexport function generateEase(segments: EaseSegment[]): SimpleEase {\n const qty = segments.length;\n const oneOverQty = 1 / qty;\n /*\n * Calculates the percentage of change at a given point in time (0-1 inclusive).\n * @param {Number} time The time of the ease, 0-1 inclusive.\n * @return {Number} The percentage of the change, 0-1 inclusive (unless your\n * ease goes outside those bounds).\n */\n\n // eslint-disable-next-line func-names\n return function (time: number): number {\n const i = (qty * time) | 0;// do a quick floor operation\n\n const t = (time - (i * oneOverQty)) * qty;\n const s = segments[i] || segments[qty - 1];\n\n return (s.s + (t * ((2 * (1 - t) * (s.cp - s.s)) + (t * (s.e - s.s)))));\n };\n}\n\ntype BLEND_MODES = 'inherit' | 'normal' | 'add' | 'multiply' | 'screen' | 'darken' | 'lighten' | 'erase' | 'color-dodge' | 'color-burn' | 'linear-burn' | 'linear-dodge' | 'linear-light' | 'hard-light' | 'soft-light' | 'pin-light' | 'difference' | 'exclusion' | 'overlay' | 'saturation' | 'color' | 'luminosity' | 'normal-npm' | 'add-npm' | 'screen-npm' | 'none' | 'subtract' | 'divide' | 'vivid-light' | 'hard-mix' | 'negation' | 'min' | 'max';\n\n/**\n * Gets a blend mode, ensuring that it is valid.\n * @param name The name of the blend mode to get.\n * @return The blend mode as specified in the PIXI.BLEND_MODES enumeration.\n */\nexport function getBlendMode(name: string): BLEND_MODES {\n if (!name) return \"normal\";\n return name as BLEND_MODES;\n}\n\n/**\n * Converts a list of {value, time} objects starting at time 0 and ending at time 1 into an evenly\n * spaced stepped list of PropertyNodes for color values. This is primarily to handle conversion of\n * linear gradients to fewer colors, allowing for some optimization for Canvas2d fallbacks.\n * @param list The list of data to convert.\n * @param [numSteps=10] The number of steps to use.\n * @return The blend mode as specified in the PIXI.blendModes enumeration.\n */\nexport function createSteppedGradient(list: ValueStep<string>[], numSteps = 10): PropertyNode<Color> {\n if (typeof numSteps !== 'number' || numSteps <= 0) {\n numSteps = 10;\n }\n const first = new PropertyNode<Color>(hexToRGB(list[0].value), list[0].time);\n\n first.isStepped = true;\n let currentNode = first;\n let current = list[0];\n let nextIndex = 1;\n let next = list[nextIndex];\n\n for (let i = 1; i < numSteps; ++i) {\n let lerp = i / numSteps;\n // ensure we are on the right segment, if multiple\n\n while (lerp > next.time) {\n current = next;\n next = list[++nextIndex];\n }\n // convert the lerp value to the segment range\n lerp = (lerp - current.time) / (next.time - current.time);\n const curVal = hexToRGB(current.value);\n const nextVal = hexToRGB(next.value);\n const output: Color = {\n r: ((nextVal.r - curVal.r) * lerp) + curVal.r,\n g: ((nextVal.g - curVal.g) * lerp) + curVal.g,\n b: ((nextVal.b - curVal.b) * lerp) + curVal.b,\n };\n\n currentNode.next = new PropertyNode(output, i / numSteps);\n currentNode = currentNode.next;\n }\n\n // we don't need to have a PropertyNode for time of 1, because in a stepped version at that point\n // the particle has died of old age\n return first;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { generateEase, hexToRGB, EaseSegment, SimpleEase, Color } from './ParticleUtils';\nimport { BasicTweenable } from './EmitterConfig';\n\n/**\n * A single step of a ValueList.\n */\nexport interface ValueStep<T> {\n /**\n * The color or number to use at this step.\n */\n value: T;\n /**\n * The percentage time of the particle's lifespan that this step happens at.\n * Values are between 0 and 1, inclusive.\n */\n time: number;\n}\n\n/**\n * Configuration for an interpolated or stepped list of numeric or color particle values.\n */\nexport interface ValueList<T> {\n /**\n * The ordered list of values.\n */\n list: ValueStep<T>[];\n /**\n * If the list is stepped. Stepped lists don't determine any in-between values, instead sticking with each value\n * until its time runs out.\n */\n isStepped?: boolean;\n /**\n * Easing that should be applied to this list, in order to alter how quickly the steps progress.\n */\n ease?: SimpleEase | EaseSegment[];\n}\n/**\n * A single node in a PropertyList.\n */\nexport class PropertyNode<V> {\n /**\n * Value for the node.\n */\n public value: V;\n /**\n * Time value for the node. Between 0-1.\n */\n public time: number;\n /**\n * The next node in line.\n */\n public next: PropertyNode<V>;\n /**\n * If this is the first node in the list, controls if the entire list is stepped or not.\n */\n public isStepped: boolean;\n public ease: SimpleEase;\n\n /**\n * @param value The value for this node\n * @param time The time for this node, between 0-1\n * @param [ease] Custom ease for this list. Only relevant for the first node.\n */\n constructor(value: V, time: number, ease?: SimpleEase | EaseSegment[]) {\n this.value = value;\n this.time = time;\n this.next = null as any;\n this.isStepped = false;\n if (ease) {\n this.ease = typeof ease === 'function' ? ease : generateEase(ease);\n }\n else {\n this.ease = null as any;\n }\n }\n\n /**\n * Creates a list of property values from a data object {list, isStepped} with a list of objects in\n * the form {value, time}. Alternatively, the data object can be in the deprecated form of\n * {start, end}.\n * @param data The data for the list.\n * @param data.list The array of value and time objects.\n * @param data.isStepped If the list is stepped rather than interpolated.\n * @param data.ease Custom ease for this list.\n * @return The first node in the list\n */\n // eslint-disable-next-line max-len\n public static createList<T extends (string | number)>(data: ValueList<T> | BasicTweenable<T>): PropertyNode<T extends string ? Color : T> {\n if ('list' in data) {\n const array = data.list;\n let node;\n const { value, time } = array[0];\n\n // eslint-disable-next-line max-len\n const first = node = new PropertyNode(typeof value === 'string' ? hexToRGB(value) : value, time, data.ease);\n\n // only set up subsequent nodes if there are a bunch or the 2nd one is different from the first\n if (array.length > 2 || (array.length === 2 && array[1].value !== value)) {\n for (let i = 1; i < array.length; ++i) {\n const { value, time } = array[i];\n\n node.next = new PropertyNode(typeof value === 'string' ? hexToRGB(value) : value, time);\n node = node.next;\n }\n }\n first.isStepped = !!data.isStepped;\n\n return first as PropertyNode<T extends string ? Color : T>;\n }\n\n // Handle deprecated version here\n const start = new PropertyNode(typeof data.start === 'string' ? hexToRGB(data.start) : data.start, 0);\n // only set up a next value if it is different from the starting value\n\n if (data.end !== data.start) {\n start.next = new PropertyNode(typeof data.end === 'string' ? hexToRGB(data.end) : data.end, 1);\n }\n\n return start as PropertyNode<T extends string ? Color : T>;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Sprite } from 'pixi.js';\nimport { Emitter } from './Emitter';\nimport { LinkedListChild } from './LinkedListContainer';\n\n\n/**\n * An individual particle image. You shouldn't have to deal with these.\n */\nexport class Particle extends Sprite implements LinkedListChild {\n /**\n * The emitter that controls this particle.\n */\n public emitter: Emitter;\n /**\n * The maximum lifetime of this particle, in seconds.\n */\n public maxLife: number;\n /**\n * The current age of the particle, in seconds.\n */\n public age: number;\n /**\n * The current age of the particle as a normalized value between 0 and 1.\n */\n public agePercent: number;\n /**\n * One divided by the max life of the particle, saved for slightly faster math.\n */\n public oneOverLife: number;\n /**\n * Reference to the next particle in the list.\n */\n public next: Particle;\n\n /**\n * Reference to the previous particle in the list.\n */\n public prev: Particle;\n\n public prevChild: LinkedListChild;\n public nextChild: LinkedListChild;\n\n /**\n * Static per-particle configuration for behaviors to use. Is not cleared when recycling.\n */\n public config: { [key: string]: any };\n\n /**\n * @param emitter The emitter that controls this particle.\n */\n constructor(emitter: Emitter) {\n // start off the sprite with a blank texture, since we are going to replace it\n // later when the particle is initialized.\n super();\n // initialize LinkedListChild props so they are included in underlying JS class definition\n this.prevChild = this.nextChild = null as any;\n\n this.emitter = emitter;\n this.config = {};\n // particles should be centered\n this.anchor.x = this.anchor.y = 0.5;\n this.maxLife = 0;\n this.age = 0;\n this.agePercent = 0;\n this.oneOverLife = 0;\n this.next = null as any;\n this.prev = null as any;\n\n // save often used functions on the instance instead of the prototype for better speed\n this.init = this.init as any;\n this.kill = this.kill as any;\n }\n\n /**\n * Initializes the particle for use, based on the properties that have to\n * have been set already on the particle.\n */\n public init(maxLife: number): void {\n this.maxLife = maxLife;\n // reset the age\n this.age = this.agePercent = 0;\n // reset the sprite props\n this.rotation = 0;\n this.position.x = this.position.y = 0;\n this.scale.x = this.scale.y = 1;\n this.tint = 0xffffff;\n this.alpha = 1;\n // save our lerp helper\n this.oneOverLife = 1 / this.maxLife;\n\n // ensure visibility\n this.visible = true;\n }\n\n /**\n * Kills the particle, removing it from the display list\n * and telling the emitter to recycle it.\n */\n public kill(): void {\n this.emitter.recycle(this);\n }\n\n /**\n * Destroys the particle, removing references and preventing future use.\n */\n public destroy(): void {\n if (this.parent) {\n this.parent.removeChild(this);\n }\n this.emitter = this.next = this.prev = null as any;\n super.destroy();\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Particle } from '../Particle';\nimport { BehaviorEditorConfig } from './editor/Types';\n\n/**\n * All behaviors instances must implement this interface, and the class must match the\n * {@link IEmitterBehaviorClass} interface. All behaviors must have an order property and\n * `initParticles` method. Implementing the `updateParticle` or `recycleParticle` methods is optional.\n */\nexport interface IEmitterBehavior {\n /**\n * Order in which the behavior will be handled. Lower numbers are handled earlier, with an order of 0 getting\n * special treatment before the Emitter's transformation is applied.\n */\n order: number;\n /**\n * Called to initialize a wave of particles, with a reference to the first particle in the linked list.\n * @param first The first (maybe only) particle in a newly spawned wave of particles.\n */\n initParticles(first: Particle): void;\n /**\n * Updates a single particle for a given period of time elapsed. Return `true` to recycle the particle.\n * @param particle The particle to update.\n * @param deltaSec The time to advance the particle by in seconds.\n */\n updateParticle?(particle: Particle, deltaSec: number): void | boolean;\n /**\n * A hook for when a particle is recycled.\n * @param particle The particle that was just recycled.\n * @param natural `true` if the reycling was due to natural lifecycle, `false` if it was due to emitter cleanup.\n */\n recycleParticle?(particle: Particle, natural: boolean): void;\n}\n\n/**\n * All behavior classes must match this interface. The instances need to implement the {@link IEmitterBehavior} interface.\n */\nexport interface IEmitterBehaviorClass {\n /**\n * The unique type name that the behavior is registered under.\n */\n type: string;\n /**\n * Configuration data for an editor to display this behavior. Does not need to exist in production code.\n */\n editorConfig?: BehaviorEditorConfig;\n /**\n * The behavior constructor itself.\n * @param config The config for the behavior, which should match its defined specifications.\n */\n new(config: any): IEmitterBehavior;\n}\n\n/**\n * Standard behavior order values, specifying when/how they are used. Other numeric values can be used,\n * but only the Spawn value will be handled in a special way. All other values will be sorted numerically.\n * Behaviors with the same value will not be given any specific sort order, as they are assumed to not\n * interfere with each other.\n */\nexport enum BehaviorOrder {\n /**\n * Spawn - initial placement and/or rotation. This happens before rotation/translation due to\n * emitter rotation/position is applied.\n */\n Spawn = 0,\n /**\n * Normal priority, for things that don't matter when they are applied.\n */\n Normal = 2,\n /**\n * Delayed priority, for things that need to read other values in order to act correctly.\n */\n Late = 5,\n}\n","/* eslint-disable no-self-assign */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { generateEase, rotatePoint, SimpleEase } from './ParticleUtils';\nimport { Particle } from './Particle';\nimport { EmitterConfigV3 } from './EmitterConfig';\nimport { BehaviorOrder, IEmitterBehavior, IEmitterBehaviorClass } from './behaviors/Behaviors';\nimport { Container, Point, Ticker } from 'pixi.js';\n// get the shared ticker, only supports V5 and V6 with individual packages\n/**\n * @hidden\n */\nconst ticker = Ticker.shared;\n\n/**\n * Key used in sorted order to determine when to set particle position from the emitter position\n * and rotation.\n */\nconst PositionParticle = Symbol('Position particle per emitter position');\n\n/**\n * A particle emitter.\n */\nexport class Emitter {\n private static knownBehaviors: { [key: string]: IEmitterBehaviorClass } = {};\n\n /**\n * Registers a new behavior, so that it will be recognized when initializing emitters.\n * Behaviors registered later with duplicate types will override older ones, although there is no limit on\n * the allowed types.\n * @param constructor The behavior class to register.\n */\n public static registerBehavior(constructor: IEmitterBehaviorClass): void {\n Emitter.knownBehaviors[constructor.type] = constructor;\n }\n\n /**\n * Active initialization behaviors for this emitter.\n */\n protected initBehaviors: (IEmitterBehavior | typeof PositionParticle)[];\n /**\n * Active update behaviors for this emitter.\n */\n protected updateBehaviors: IEmitterBehavior[];\n /**\n * Active recycle behaviors for this emitter.\n */\n protected recycleBehaviors: IEmitterBehavior[];\n // properties for individual particles\n /**\n * The minimum lifetime for a particle, in seconds.\n */\n public minLifetime: number;\n /**\n * The maximum lifetime for a particle, in seconds.\n */\n public maxLifetime: number;\n /**\n * An easing function for nonlinear interpolation of values. Accepts a single\n * parameter of time as a value from 0-1, inclusive. Expected outputs are values\n * from 0-1, inclusive.\n */\n public customEase: SimpleEase;\n // properties for spawning particles\n /**\n * Time between particle spawns in seconds.\n */\n protected _frequency: number;\n /**\n * Chance that a particle will be spawned on each opportunity to spawn one.\n * 0 is 0%, 1 is 100%.\n */\n public spawnChance: number;\n /**\n * Maximum number of particles to keep alive at a time. If this limit\n * is reached, no more particles will spawn until some have died.\n */\n public maxParticles: number;\n /**\n * The amount of time in seconds to emit for before setting emit to false.\n * A value of -1 is an unlimited amount of time.\n */\n public emitterLifetime: number;\n /**\n * Position at which to spawn particles, relative to the emitter's owner's origin.\n * For example, the flames of a rocket travelling right might have a spawnPos\n * of {x:-50, y:0}.\n * to spawn at the rear of the rocket.\n * To change this, use updateSpawnPos().\n */\n public spawnPos: Point;\n /**\n * Number of particles to spawn time that the frequency allows for particles to spawn.\n */\n public particlesPerWave: number;\n /**\n * Rotation of the emitter or emitter's owner in degrees. This is added to\n * the calculated spawn angle.\n * To change this, use rotate().\n */\n protected rotation: number;\n /**\n * The world position of the emitter's owner, to add spawnPos to when\n * spawning particles. To change this, use updateOwnerPos().\n */\n protected ownerPos: Point;\n /**\n * The origin + spawnPos in the previous update, so that the spawn position\n * can be interpolated to space out particles better.\n */\n protected _prevEmitterPos: Point;\n /**\n * If _prevEmitterPos is valid, to prevent interpolation on the first update\n */\n protected _prevPosIsValid: boolean;\n /**\n * If either ownerPos or spawnPos has changed since the previous update.\n */\n protected _posChanged: boolean;\n /**\n * The container to add particles to.\n */\n protected _parent: Container;\n /**\n * If particles should be added at the back of the display list instead of the front.\n */\n public addAtBack: boolean;\n /**\n * The current number of active particles.\n */\n public particleCount: number;\n /**\n * If particles should be emitted during update() calls. Setting this to false\n * stops new particles from being created, but allows existing ones to die out.\n */\n protected _emit: boolean;\n /**\n * The timer for when to spawn particles in seconds, where numbers less\n * than 0 mean that particles should be spawned.\n */\n protected _spawnTimer: number;\n /**\n * The life of the emitter in seconds.\n */\n protected _emitterLife: number;\n /**\n * The particles that are active and on the display list. This is the first particle in a\n * linked list.\n */\n protected _activeParticlesFirst: Particle;\n /**\n * The particles that are active and on the display list. This is the last particle in a\n * linked list.\n */\n protected _activeParticlesLast: Particle;\n /**\n * The particles that are not currently being used. This is the first particle in a\n * linked list.\n */\n protected _poolFirst: Particle;\n /**\n * The original config object that this emitter was initialized with.\n */\n protected _origConfig: any;\n /**\n * If the update function is called automatically from the shared ticker.\n * Setting this to false requires calling the update function manually.\n */\n protected _autoUpdate: boolean;\n /**\n * If the emitter should destroy itself when all particles have died out. This is set by\n * playOnceAndDestroy();\n */\n protected _destroyWhenComplete: boolean;\n /**\n * A callback for when all particles have died out. This is set by\n * playOnceAndDestroy() or playOnce();\n */\n protected _completeCallback: () => void;\n\n /**\n * Factory method to create a new particle. Override this in subclasses\n * to create custom particle types (e.g., SpineParticle).\n */\n protected createParticle(): Particle {\n return new Particle(this);\n }\n\n /**\n * @param particleParent The container to add the particles to.\n * @param particleImages A texture or array of textures to use\n * for the particles. Strings will be turned\n * into textures via Texture.from().\n * @param config A configuration object containing settings for the emitter.\n * @param config.emit If config.emit is explicitly passed as false, the\n * Emitter will start disabled.\n * @param config.autoUpdate If config.autoUpdate is explicitly passed as\n * true, the Emitter will automatically call\n * update via the PIXI shared ticker.\n */\n constructor(particleParent: Container, config: EmitterConfigV3) {\n this.initBehaviors = [];\n this.updateBehaviors = [];\n this.recycleBehaviors = [];\n // properties for individual particles\n this.minLifetime = 0;\n this.maxLifetime = 0;\n this.customEase = null as any;\n // properties for spawning particles\n this._frequency = 1;\n this.spawnChance = 1;\n this.maxParticles = 1000;\n this.emitterLifetime = -1;\n this.spawnPos = new Point();\n this.particlesPerWave = 1;\n // emitter properties\n this.rotation = 0;\n this.ownerPos = new Point();\n this._prevEmitterPos = new Point();\n this._prevPosIsValid = false;\n this._posChanged = false;\n this._parent = null as any;\n this.addAtBack = false;\n this.particleCount = 0;\n this._emit = false;\n this._spawnTimer = 0;\n this._emitterLife = -1;\n this._activeParticlesFirst = null as any;\n this._activeParticlesLast = null as any;\n this._poolFirst = null as any;\n this._origConfig = null;\n this._autoUpdate = false;\n this._destroyWhenComplete = false;\n this._completeCallback = null as any;\n\n // set the initial parent\n this.parent = particleParent;\n\n if (config) {\n this.init(config);\n }\n\n // save often used functions on the instance instead of the prototype for better speed\n this.recycle = this.recycle;\n this.update = this.update;\n this.rotate = this.rotate;\n this.updateSpawnPos = this.updateSpawnPos;\n this.updateOwnerPos = this.updateOwnerPos;\n }\n\n /**\n * Time between particle spawns in seconds. If this value is not a number greater than 0,\n * it will be set to 1 (particle per second) to prevent infinite loops.\n */\n public get frequency(): number { return this._frequency; }\n public set frequency(value: number) {\n // do some error checking to prevent infinite loops\n if (typeof value === 'number' && value > 0) {\n this._frequency = value;\n }\n else {\n this._frequency = 1;\n }\n }\n\n /**\n * The container to add particles to. Settings this will dump any active particles.\n */\n public get parent(): Container { return this._parent; }\n public set parent(value: Container) {\n this.cleanup();\n this._parent = value;\n }\n\n /**\n * Sets up the emitter based on the config settings.\n * @param config A configuration object containing settings for the emitter.\n */\n public init(config: EmitterConfigV3): void {\n if (!config) {\n return;\n }\n // clean up any existing particles\n this.cleanup();\n\n // store the original config and particle images, in case we need to re-initialize\n // when the particle constructor is changed\n this._origConfig = config;\n\n // /////////////////////////\n // Particle Properties //\n // /////////////////////////\n\n // set up the lifetime\n this.minLifetime = config.lifetime.min;\n this.maxLifetime = config.lifetime.max;\n // use the custom ease if provided\n if (config.ease) {\n this.customEase = typeof config.ease === 'function'\n ? config.ease : generateEase(config.ease);\n }\n else {\n this.customEase = null as any;\n }\n // ////////////////////////\n // Emitter Properties //\n // ////////////////////////\n // reset spawn type specific settings\n this.particlesPerWave = 1;\n if (config.particlesPerWave && config.particlesPerWave > 1) {\n this.particlesPerWave = config.particlesPerWave;\n }\n // set the spawning frequency\n this.frequency = config.frequency;\n this.spawnChance = (typeof config.spawnChance === 'number' && config.spawnChance > 0) ? config.spawnChance : 1;\n // set the emitter lifetime\n this.emitterLifetime = config.emitterLifetime || -1;\n // set the max particles\n this.maxParticles = config.maxParticles ?? 1000;\n // determine if we should add the particle at the back of the list or not\n this.addAtBack = !!config.addAtBack;\n // reset the emitter position and rotation variables\n this.rotation = 0;\n this.ownerPos.set(0);\n if (config.pos) {\n this.spawnPos.copyFrom(config.pos);\n }\n else {\n this.spawnPos.set(0);\n }\n\n this._prevEmitterPos.copyFrom(this.spawnPos);\n // previous emitter position is invalid and should not be used for interpolation\n this._prevPosIsValid = false;\n // start emitting\n this._spawnTimer = 0;\n this.emit = config.emit === undefined ? true : !!config.emit;\n this.autoUpdate = !!config.autoUpdate;\n\n // ////////////////////////\n // Behaviors //\n // ////////////////////////\n const behaviors: (IEmitterBehavior | typeof PositionParticle)[] = config.behaviors.map((data) => {\n const constructor = Emitter.knownBehaviors[data.type];\n\n if (!constructor) {\n console.error(`Unknown behavior: ${data.type}`);\n\n return null;\n }\n\n return new constructor(data.config);\n })\n .filter((b) => !!b);\n\n behaviors.push(PositionParticle);\n behaviors.sort((a, b) => {\n if (a === PositionParticle) {\n return (b as IEmitterBehavior).order === BehaviorOrder.Spawn ? 1 : -1;\n }\n else if (b === PositionParticle) {\n return (a as IEmitterBehavior).order === BehaviorOrder.Spawn ? -1 : 1;\n }\n\n return (a as IEmitterBehavior).order - (b as IEmitterBehavior).order;\n });\n this.initBehaviors = behaviors.slice();\n this.updateBehaviors = behaviors.filter((b) => b !== PositionParticle && b.updateParticle) as IEmitterBehavior[];\n this.recycleBehaviors = behaviors.filter((b) => b !== PositionParticle && b.recycleParticle) as IEmitterBehavior[];\n }\n\n /**\n * Gets the instantiated behavior of the specified type, if it is present on this emitter.\n * @param type The behavior type to find.\n */\n public getBehavior(type: string): IEmitterBehavior | null {\n // bail if we don't know about such an emitter\n if (!Emitter.knownBehaviors[type]) return null;\n\n // find one that is an instance of the specified type\n return this.initBehaviors.find((b) => b instanceof Emitter.knownBehaviors[type]) as IEmitterBehavior || null;\n }\n\n /**\n * Fills the pool with the specified number of particles, so that they don't have to be instantiated later.\n * @param count The number of particles to create.\n */\n public fillPool(count: number): void {\n for (; count > 0; --count) {\n const p = new Particle(this);\n\n p.next = this._poolFirst;\n this._poolFirst = p;\n }\n }\n\n /**\n * Recycles an individual particle. For internal use only.\n * @param particle The particle to recycle.\n * @param fromCleanup If this is being called to manually clean up all particles.\n * @internal\n */\n public recycle(particle: Particle, fromCleanup = false): void {\n for (let i = 0; i < this.recycleBehaviors.length; ++i) {\n (this.recycleBehaviors[i] as IEmitterBehavior).recycleParticle?.(particle, !fromCleanup);\n }\n if (particle.next) {\n particle.next.prev = particle.prev;\n }\n if (particle.prev) {\n particle.prev.next = particle.next;\n }\n if (particle === this._activeParticlesLast) {\n this._activeParticlesLast = particle.prev;\n }\n if (particle === this._activeParticlesFirst) {\n this._activeParticlesFirst = particle.next;\n }\n // add to pool\n particle.prev = null as any;\n particle.next = this._poolFirst;\n this._poolFirst = particle;\n // remove child from display, or make it invisible if it is in a ParticleContainer\n if ((particle as any).parent) {\n (particle as any).parent.removeChild(particle);\n }\n // decrease count\n --this.particleCount;\n }\n\n /**\n * Sets the rotation of the emitter to a new value. This rotates the spawn position in addition\n * to particle direction.\n * @param newRot The new rotation, in degrees.\n */\n public rotate(newRot: number): void {\n if (this.rotation === newRot) return;\n // caclulate the difference in rotation for rotating spawnPos\n const diff = newRot - this.rotation;\n\n this.rotation = newRot;\n // rotate spawnPos\n rotatePoint(diff, this.spawnPos);\n // mark the position as having changed\n this._posChanged = true;\n }\n\n /**\n * Changes the spawn position of the emitter.\n * @param x The new x value of the spawn position for the emitter.\n * @param y The new y value of the spawn position for the emitter.\n */\n public updateSpawnPos(x: number, y: number): void {\n this._posChanged = true;\n this.spawnPos.x = x;\n this.spawnPos.y = y;\n }\n\n /**\n * Changes the position of the emitter's owner. You should call this if you are adding\n * particles to the world container that your emitter's owner is moving around in.\n * @param x The new x value of the emitter's owner.\n * @param y The new y value of the emitter's owner.\n */\n public updateOwnerPos(x: number, y: number): void {\n this._posChanged = true;\n this.ownerPos.x = x;\n this.ownerPos.y = y;\n }\n\n /**\n * Prevents emitter position interpolation in the next update.\n * This should be used if you made a major position change of your emitter's owner\n * that was not normal movement.\n */\n public resetPositionTracking(): void {\n this._prevPosIsValid = false;\n }\n\n /**\n * If particles should be emitted during update() calls. Setting this to false\n * stops new particles from being created, but allows existing ones to die out.\n */\n public get emit(): boolean { return this._emit; }\n public set emit(value: boolean) {\n this._emit = !!value;\n this._emitterLife = this.emitterLifetime;\n }\n\n /**\n * If the update function is called automatically from the shared ticker.\n * Setting this to false requires calling the update function manually.\n */\n public get autoUpdate(): boolean { return this._autoUpdate; }\n public set autoUpdate(value: boolean) {\n if (this._autoUpdate && !value) {\n ticker.remove(this._update, this);\n }\n else if (!this._autoUpdate && value) {\n ticker.add(this._update, this);\n }\n this._autoUpdate = !!value;\n }\n\n /**\n * Starts emitting particles, sets autoUpdate to true, and sets up the Emitter to destroy itself\n * when particle emission is complete.\n * @param callback Callback for when emission is complete (all particles have died off)\n */\n public playOnceAndDestroy(callback?: () => void): void {\n this.autoUpdate = true;\n this.emit = true;\n this._destroyWhenComplete = true;\n this._completeCallback = callback as any;\n }\n\n /**\n * Starts emitting particles and optionally calls a callback when particle emission is complete.\n * @param callback Callback for when emission is complete (all particles have died off)\n */\n public playOnce(callback?: () => void): void {\n this.emit = true;\n this._completeCallback = callback as any;\n }\n\n private _update(ticker: Ticker) {\n this.update(ticker.deltaTime);\n }\n\n /**\n * Updates all particles spawned by this emitter and emits new ones.\n * @param delta Time elapsed since the previous frame, in __seconds__.\n */\n public update(delta: number): void {\n if (this._autoUpdate) {\n delta = ticker.elapsedMS * 0.001;\n }\n\n // if we don't have a parent to add particles to, then don't do anything.\n // this also works as a isDestroyed check\n if (!this._parent) return;\n\n // == update existing particles ==\n\n // update all particle lifetimes before turning them over to behaviors\n for (let particle = this._activeParticlesFirst, next; particle; particle = next) {\n // save next particle in case we recycle this one\n next = particle.next;\n // increase age\n particle.age += delta;\n // recycle particle if it is too old\n if (particle.age > particle.maxLife || particle.age < 0) {\n this.recycle(particle);\n }\n else {\n // determine our interpolation value\n let lerp = particle.age * particle.oneOverLife;// lifetime / maxLife;\n\n // global ease affects all interpolation calculations\n if (this.customEase) {\n if (this.customEase.length === 4) {\n // the t, b, c, d parameters that some tween libraries use\n // (time, initial value, end value, duration)\n lerp = (this.customEase as any)(lerp, 0, 1, 1);\n }\n else {\n // the simplified version that we like that takes\n // one parameter, time from 0-1. TweenJS eases provide this usage.\n lerp = this.customEase(lerp);\n }\n }\n\n // set age percent for all interpolation calculations\n particle.agePercent = lerp;\n\n // let each behavior run wild on the active particles\n for (let i = 0; i < this.updateBehaviors.length; ++i) {\n if ((this.updateBehaviors[i] as any).updateParticle(particle, delta)) {\n this.recycle(particle);\n break;\n }\n }\n }\n }\n\n let prevX: number = 0;\n let prevY: number = 0;\n\n // if the previous position is valid, store these for later interpolation\n if (this._prevPosIsValid) {\n prevX = this._prevEmitterPos.x;\n prevY = this._prevEmitterPos.y;\n }\n // store current position of the emitter as local variables\n const curX = this.ownerPos.x + this.spawnPos.x;\n const curY = this.ownerPos.y + this.spawnPos.y;\n // spawn new particles\n\n if (this._emit) {\n // decrease spawn timer\n this._spawnTimer -= delta < 0 ? 0 : delta;\n // while _spawnTimer < 0, we have particles to spawn\n while (this._spawnTimer <= 0) {\n // determine if the emitter should stop spawning\n if (this._emitterLife >= 0) {\n this._emitterLife -= this._frequency;\n if (this._emitterLife <= 0) {\n this._spawnTimer = 0;\n this._emitterLife = 0;\n this.emit = false;\n break;\n }\n }\n // determine if we have hit the particle limit\n if (this.particleCount >= this.maxParticles) {\n this._spawnTimer += this._frequency;\n continue;\n }\n let emitPosX: number;\n let emitPosY: number;\n\n // If the position has changed and this isn't the first spawn,\n // interpolate the spawn position\n if (this._prevPosIsValid && this._posChanged) {\n // 1 - _spawnTimer / delta, but _spawnTimer is negative\n const lerp = 1 + (this._spawnTimer / delta);\n\n emitPosX = ((curX - prevX) * lerp) + prevX;\n emitPosY = ((curY - prevY) * lerp) + prevY;\n }\n // otherwise just set to the spawn position\n else {\n emitPosX = curX;\n emitPosY = curY;\n }\n\n let waveFirst: Particle = null as any;\n let waveLast: Particle = null as any;\n\n // create enough particles to fill the wave\n for (let len = Math.min(this.particlesPerWave, this.maxParticles - this.particleCount), i = 0; i < len; ++i) {\n // see if we actually spawn one\n if (this.spawnChance < 1 && Math.random() >= this.spawnChance) {\n continue;\n }\n // determine the particle lifetime\n let lifetime;\n\n if (this.minLifetime === this.maxLifetime) {\n lifetime = this.minLifetime;\n }\n else {\n lifetime = (Math.random() * (this.maxLifetime - this.minLifetime)) + this.minLifetime;\n }\n // only make the particle if it wouldn't immediately destroy itself\n if (-this._spawnTimer >= lifetime) {\n continue;\n }\n // create particle\n let p: Particle;\n\n if (this._poolFirst) {\n p = this._poolFirst;\n this._poolFirst = this._poolFirst.next;\n p.next = null as any;\n }\n else {\n p = this.createParticle();\n }\n\n // initialize particle\n p.init(lifetime);\n // add the particle to the display list\n if (this.addAtBack) {\n this._parent.addChildAt(p, 0);\n }\n else {\n this._parent.addChild(p);\n }\n // add particles to list of ones in this wave\n if (waveFirst) {\n waveLast.next = p;\n p.prev = waveLast;\n waveLast = p;\n }\n else {\n waveLast = waveFirst = p;\n }\n // increase our particle count\n ++this.particleCount;\n }\n\n if (waveFirst) {\n // add particle to list of active particles\n if (this._activeParticlesLast) {\n this._activeParticlesLast.next = waveFirst;\n waveFirst.prev = this._activeParticlesLast;\n this._activeParticlesLast = waveLast;\n }\n else {\n this._activeParticlesFirst = waveFirst;\n this._activeParticlesLast = waveLast;\n }\n // run behavior init on particles\n for (let i = 0; i < this.initBehaviors.length; ++i) {\n const behavior = this.initBehaviors[i];\n\n // if we hit our special key, interrupt behaviors to apply\n // emitter position/rotation\n if (behavior === PositionParticle) {\n for (let particle = waveFirst, next; particle; particle = next) {\n // save next particle in case we recycle this one\n next = particle.next;\n // rotate the particle's position by the emitter's rotation\n if (this.rotation !== 0) {\n rotatePoint(this.rotation, particle.position);\n particle.rotation += this.rotation;\n }\n // offset by the emitter's position\n particle.position.x += emitPosX;\n particle.position.y += emitPosY;\n\n // also, just update the particle's age properties while we are looping through\n particle.age += -this._spawnTimer;\n // determine our interpolation value\n let lerp = particle.age * particle.oneOverLife;// lifetime / maxLife;\n\n // global ease affects all interpolation calculations\n if (this.customEase) {\n if (this.customEase.length === 4) {\n // the t, b, c, d parameters that some tween libraries use\n // (time, initial value, end value, duration)\n lerp = (this.customEase as any)(lerp, 0, 1, 1);\n }\n else {\n // the simplified version that we like that takes\n // one parameter, time from 0-1. TweenJS eases provide this usage.\n lerp = this.customEase(lerp);\n }\n }\n // set age percent for all interpolation calculations\n particle.agePercent = lerp;\n }\n }\n else {\n behavior.initParticles(waveFirst);\n }\n }\n for (let particle = waveFirst, next; particle; particle = next) {\n // save next particle in case we recycle this one\n next = particle.next;\n // now update the particles by the time passed, so the particles are spread out properly\n for (let i = 0; i < this.updateBehaviors.length; ++i) {\n // we want a positive delta, because a negative delta messes things up\n if ((this.updateBehaviors[i] as any).updateParticle(particle, -this._spawnTimer)) {\n // bail if the particle got reycled\n this.recycle(particle);\n break;\n }\n }\n }\n }\n // increase timer and continue on to any other particles that need to be created\n this._spawnTimer += this._frequency;\n }\n }\n // if the position changed before this update, then keep track of that\n if (this._posChanged) {\n this._prevEmitterPos.x = curX;\n this._prevEmitterPos.y = curY;\n this._prevPosIsValid = true;\n this._posChanged = false;\n }\n\n // if we are all done and should destroy ourselves, take care of that\n if (!this._emit && !this._activeParticlesFirst) {\n if (this._completeCallback) {\n const cb = this._completeCallback;\n\n this._completeCallback = null as any;\n cb();\n }\n if (this._destroyWhenComplete) {\n this.destroy();\n }\n }\n }\n\n /**\n * Emits a single wave of particles, using standard spawnChance & particlesPerWave settings. Does not affect\n * regular spawning through the frequency, and ignores the emit property. The max particle count is respected, however,\n * so if there are already too many particles then nothing will happen.\n */\n public emitNow(): void {\n const emitPosX = this.ownerPos.x + this.spawnPos.x;\n const emitPosY = this.ownerPos.y + this.spawnPos.y;\n\n let waveFirst: Particle = null as any;\n let waveLast: Particle = null as any;\n\n // create enough particles to fill the wave\n for (let len = Math.min(this.particlesPerWave, this.maxParticles - this.particleCount), i = 0; i < len; ++i) {\n // see if we actually spawn one\n if (this.spawnChance < 1 && Math.random() >= this.spawnChance) {\n continue;\n }\n // create particle\n let p: Particle;\n\n if (this._poolFirst) {\n p = this._poolFirst;\n this._poolFirst = this._poolFirst.next;\n p.next = null as any;\n }\n else {\n p = this.createParticle();\n }\n\n let lifetime: number;\n\n if (this.minLifetime === this.maxLifetime) {\n lifetime = this.minLifetime;\n }\n else {\n lifetime = (Math.random() * (this.maxLifetime - this.minLifetime)) + this.minLifetime;\n }\n // initialize particle\n p.init(lifetime);\n // add the particle to the display list\n if (this.addAtBack) {\n this._parent.addChildAt(p, 0);\n }\n else {\n this._parent.addChild(p);\n }\n // add particles to list of ones in this wave\n if (waveFirst) {\n waveLast.next = p;\n p.prev = waveLast;\n waveLast = p;\n }\n else {\n waveLast = waveFirst = p;\n }\n // increase our particle count\n ++this.particleCount;\n }\n\n if (waveFirst) {\n // add particle to list of active particles\n if (this._activeParticlesLast) {\n this._activeParticlesLast.next = waveFirst;\n waveFirst.prev = this._activeParticlesLast;\n this._activeParticlesLast = waveLast;\n }\n else {\n this._activeParticlesFirst = waveFirst;\n this._activeParticlesLast = waveLast;\n }\n // run behavior init on particles\n for (let i = 0; i < this.initBehaviors.length; ++i) {\n const behavior = this.initBehaviors[i];\n\n // if we hit our special key, interrupt behaviors to apply\n // emitter position/rotation\n if (behavior === PositionParticle) {\n for (let particle = waveFirst, next; particle; particle = next) {\n // save next particle in case we recycle this one\n next = particle.next;\n // rotate the particle's position by the emitter's rotation\n if (this.rotation !== 0) {\n rotatePoint(this.rotation, particle.position);\n particle.rotation += this.rotation;\n }\n // offset by the emitter's position\n particle.position.x += emitPosX;\n particle.position.y += emitPosY;\n }\n }\n else {\n behavior.initParticles(waveFirst);\n }\n }\n }\n }\n\n /**\n * Kills all active particles immediately.\n */\n public cleanup(): void {\n let particle;\n let next;\n\n for (particle = this._activeParticlesFirst; particle; particle = next) {\n next = particle.next;\n this.recycle(particle, true);\n }\n this._activeParticlesFirst = this._activeParticlesLast = null as any;\n this.particleCount = 0;\n }\n\n /**\n * If this emitter has been destroyed. Note that a destroyed emitter can still be reused, after\n * having a new parent set and being reinitialized.\n */\n public get destroyed(): boolean {\n return !(this._parent && this.initBehaviors.length);\n }\n\n /**\n * Destroys the emitter and all of its particles.\n */\n public destroy(): void {\n // make sure we aren't still listening to any tickers\n this.autoUpdate = false;\n // puts all active particles in the pool, and removes them from the particle parent\n this.cleanup();\n // wipe the pool clean\n let next;\n\n for (let particle = this._poolFirst; particle; particle = next) {\n // store next value so we don't lose it in our destroy call\n next = particle.next;\n particle.destroy();\n }\n this._poolFirst = this._parent = this.spawnPos = this.ownerPos\n = this.customEase = this._completeCallback = null as any;\n\n this.initBehaviors.length = this.updateBehaviors.length = this.recycleBehaviors.length = 0;\n }\n}\n","// export support types for external use\nimport * as spawnShapes from './shapes';\nexport { spawnShapes };\nexport * from './Behaviors';\n\nimport * as editor from './editor/Types';\nexport { editor };\n\n// export all of the individual behaviors\nexport * from './AccelerationMovement';\nexport * from './Alpha';\nexport * from './AnimatedTexture';\nexport * from './BlendMode';\nexport * from './BurstSpawn';\nexport * from './Color';\nexport * from './OrderedTexture';\nexport * from './PathMovement';\nexport * from './PointSpawn';\nexport * from './RandomTexture';\nexport * from './Rotation';\nexport * from './Scale';\nexport * from './ShapeSpawn';\nexport * from './SingleTexture';\nexport * from './SpeedMovement';\nexport * from './RandomColor';\nexport * from './ZindexBehavior';\nexport * from './MultiStateAnimatedTexture';\nexport * from './SpineTexture';\n","export * from './SpawnShape';\nexport * from './Rectangle';\nexport * from './Torus';\nexport * from './PolygonalChain';\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Particle } from '../../Particle';\nimport type { ObjectProperty } from '../editor/Types';\nimport { SpawnShape } from './SpawnShape';\n\n/**\n * A SpawnShape that randomly picks locations inside a rectangle.\n *\n * Example config:\n * ```javascript\n * {\n * type: 'rect',\n * data: {\n * x: 0,\n * y: 0,\n * w: 10,\n * h: 100\n * }\n * }\n * ```\n */\nexport class Rectangle implements SpawnShape {\n public static type = 'rect';\n public static editorConfig: ObjectProperty = null as any;\n /**\n * X (left) position of the rectangle.\n */\n public x: number;\n /**\n * Y (top) position of the rectangle.\n */\n public y: number;\n /**\n * Width of the rectangle.\n */\n public w: number;\n /**\n * Height of the rectangle.\n */\n public h: number;\n\n constructor(config: {\n /**\n * X (left) position of the rectangle.\n */\n x: number;\n /**\n * Y (top) position of the rectangle.\n */\n y: number;\n /**\n * Width of the rectangle.\n */\n w: number;\n /**\n * Height of the rectangle.\n */\n h: number;\n }) {\n this.x = config.x;\n this.y = config.y;\n this.w = config.w;\n this.h = config.h;\n }\n\n getRandPos(particle: Particle): void {\n // place the particle at a random point in the rectangle\n particle.x = (Math.random() * this.w) + this.x;\n particle.y = (Math.random() * this.h) + this.y;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Particle } from '../../Particle';\nimport { rotatePoint } from '../../ParticleUtils';\nimport { ObjectProperty } from '../editor/Types';\nimport { SpawnShape } from './SpawnShape';\n\n/**\n * A class for spawning particles in a circle or ring.\n * Can optionally apply rotation to particles so that they are aimed away from the center of the circle.\n *\n * Example config:\n * ```javascript\n * {\n * type: 'torus',\n * data: {\n * radius: 30,\n * x: 0,\n * y: 0,\n * innerRadius: 10,\n * rotation: true\n * }\n * }\n * ```\n */\nexport class Torus implements SpawnShape {\n public static type = 'torus';\n public static editorConfig: ObjectProperty = null as any;\n /**\n * X position of the center of the shape.\n */\n public x: number;\n /**\n * Y position of the center of the shape.\n */\n public y: number;\n /**\n * Radius of circle, or outer radius of a ring.\n */\n public radius: number;\n /**\n * Inner radius of a ring. Use 0 to have a circle.\n */\n public innerRadius: number;\n /**\n * If rotation should be applied to particles.\n */\n public rotation: boolean;\n\n constructor(config: {\n /**\n * Radius of circle, or outer radius of a ring. Note that this uses the full name of 'radius',\n * where earlier versions of the library may have used 'r'.\n */\n radius: number;\n /**\n * X position of the center of the shape.\n */\n x: number;\n /**\n * Y position of the center of the shape.\n */\n y: number;\n /**\n * Inner radius of a ring. Omit, or use 0, to have a circle.\n */\n innerRadius?: number;\n /**\n * If rotation should be applied to particles, pointing them away from the center of the torus.\n * Defaults to false.\n */\n affectRotation?: boolean\n }) {\n this.x = config.x || 0;\n this.y = config.y || 0;\n this.radius = config.radius;\n this.innerRadius = config.innerRadius || 0;\n this.rotation = !!config.affectRotation;\n }\n\n getRandPos(particle: Particle): void {\n // place the particle at a random radius in the ring\n if (this.innerRadius !== this.radius) {\n particle.x = (Math.random() * (this.radius - this.innerRadius)) + this.innerRadius;\n }\n else {\n particle.x = this.radius;\n }\n particle.y = 0;\n // rotate the point to a random angle in the circle\n const angle = Math.random() * Math.PI * 2;\n\n if (this.rotation) {\n particle.rotation += angle;\n }\n rotatePoint(angle, particle.position);\n // now add in the center of the torus\n particle.position.x += this.x;\n particle.position.y += this.y;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { PointData } from 'pixi.js';\nimport { ListProperty } from '../editor/Types';\nimport { SpawnShape } from './SpawnShape';\n\n/**\n * Data structure for internal parsed data in PolygonalChain spawn shapes.\n */\nexport interface Segment {\n p1: PointData;\n p2: PointData;\n l: number;\n}\n\n/**\n * A spawn shape that picks a random position along a series of line segments. If those\n * line segments form a polygon, particles will only be placed on the perimeter of that polygon.\n *\n * Example config:\n * ```javascript\n * {\n * type: 'polygonalChain',\n * data: [\n * [{x: 0, y: 0}, {x: 10, y: 10}, {x: 20, y: 0}],\n * [{x: 0, y, -10}, {x: 10, y: 0}, {x: 20, y: -10}]\n * ]\n * }\n * ```\n */\nexport class PolygonalChain implements SpawnShape {\n public static type = 'polygonalChain';\n public static editorConfig: ListProperty = null as any;\n /**\n * List of segment objects in the chain.\n */\n private segments: Segment[];\n /**\n * Total length of all segments of the chain.\n */\n private totalLength: number;\n /**\n * Total length of segments up to and including the segment of the same index.\n * Used for weighted random selection of segment.\n */\n private countingLengths: number[];\n\n /**\n * @param data Point data for polygon chains. Either a list of points for a single chain, or a list of chains.\n */\n constructor(data: PointData[] | PointData[][]) {\n this.segments = [];\n this.countingLengths = [];\n this.totalLength = 0;\n this.init(data);\n }\n\n /**\n * @param data Point data for polygon chains. Either a list of points for a single chain, or a list of chains.\n */\n private init(data: PointData[] | PointData[][]): void {\n // if data is not present, set up a segment of length 0\n if (!data || !data.length) {\n this.segments.push({ p1: { x: 0, y: 0 }, p2: { x: 0, y: 0 }, l: 0 });\n }\n else if (Array.isArray(data[0])) {\n // list of segment chains, each defined as a list of points\n for (let i = 0; i < data.length; ++i) {\n // loop through the chain, connecting points\n const chain = data[i] as PointData[];\n let prevPoint = chain[0] as PointData;\n\n for (let j = 1; j < chain.length; ++j) {\n const second = chain[j] as PointData;\n\n this.segments.push({ p1: prevPoint, p2: second, l: 0 });\n prevPoint = second;\n }\n }\n }\n else {\n let prevPoint = data[0] as PointData;\n // list of points\n\n for (let i = 1; i < data.length; ++i) {\n const second = data[i] as PointData;\n\n this.segments.push({ p1: prevPoint, p2: second, l: 0 });\n prevPoint = second;\n }\n }\n // now go through our segments to calculate the lengths so that we\n // can set up a nice weighted random distribution\n for (let i = 0; i < this.segments.length; ++i) {\n const { p1, p2 } = this.segments[i];\n const segLength = Math.sqrt(((p2.x - p1.x) * (p2.x - p1.x)) + ((p2.y - p1.y) * (p2.y - p1.y)));\n // save length so we can turn a random number into a 0-1 interpolation value later\n\n this.segments[i].l = segLength;\n this.totalLength += segLength;\n // keep track of the length so far, counting up\n this.countingLengths.push(this.totalLength);\n }\n }\n\n /**\n * Gets a random point in the chain.\n * @param out The point to store the selected position in.\n */\n public getRandPos(out: PointData): void {\n // select a random spot in the length of the chain\n const rand = Math.random() * this.totalLength;\n let chosenSeg!: Segment;\n let lerp!: number;\n\n // if only one segment, it wins\n if (this.segments.length === 1) {\n chosenSeg = this.segments[0];\n lerp = rand;\n }\n else {\n // otherwise, go through countingLengths until we have determined\n // which segment we chose\n for (let i = 0; i < this.countingLengths.length; ++i) {\n if (rand < this.countingLengths[i]) {\n chosenSeg = this.segments[i];\n // set lerp equal to the length into that segment\n // (i.e. the remainder after subtracting all the segments before it)\n lerp = i === 0 ? rand : rand - this.countingLengths[i - 1];\n break;\n }\n }\n }\n // divide lerp by the segment length, to result in a 0-1 number.\n lerp /= chosenSeg.l || 1;\n const { p1, p2 } = chosenSeg;\n // now calculate the position in the segment that the lerp value represents\n\n out.x = p1.x + (lerp * (p2.x - p1.x));\n out.y = p1.y + (lerp * (p2.y - p1.y));\n }\n}\n","export interface NumberProperty\n{\n type: 'number';\n name: string;\n title: string;\n description: string;\n default: number;\n min?: number;\n max?: number;\n}\n\nexport interface ColorProperty\n{\n type: 'color';\n name: string;\n title: string;\n description: string;\n default: string;\n}\n\nexport interface BooleanProperty\n{\n type: 'boolean';\n name: string;\n title: string;\n description: string;\n default: boolean;\n}\n\nexport interface TextProperty\n{\n type: 'text';\n name: string;\n title: string;\n description: string;\n default: string;\n}\n\nexport interface PointProperty\n{\n type: 'point';\n name: string;\n title: string;\n description: string;\n default: {x: number, y: number};\n}\n\nexport interface NumberListProperty\n{\n type: 'numberList';\n name: string;\n title: string;\n description: string;\n default: number;\n min?: number;\n max?: number;\n}\n\nexport interface ColorListProperty\n{\n type: 'colorList';\n name: string;\n title: string;\n description: string;\n default: string;\n}\n\nexport interface ImageProperty\n{\n type: 'image';\n name: string;\n title: string;\n description: string;\n}\n\nexport interface ListProperty\n{\n type: 'list';\n name: string;\n title: string;\n description: string;\n entryType: Property;\n}\n\nexport interface ObjectProperty\n{\n type: 'object';\n name: string;\n title: string;\n description: string;\n props: Property[];\n}\n\nexport interface SelectProperty\n{\n type: 'select';\n name: string;\n title: string;\n description: string;\n options: {label: string, value: string}[];\n default: string;\n}\n\nexport interface SelectSubConfigProperty\n{\n type: 'subconfig';\n /** Name of property where the type of the config is stored */\n name: string;\n title: string;\n description: string;\n dictionaryProp: string;\n /** Name of property in which the config should be stored */\n configName: string;\n}\n\nexport type Property = NumberProperty | ColorProperty | BooleanProperty | TextProperty | PointProperty | NumberListProperty |\n ColorListProperty | ImageProperty | ListProperty | ObjectProperty | SelectProperty | SelectSubConfigProperty;\n\nexport interface BehaviorEditorConfig\n{\n category: 'art'|'color'|'alpha'|'scale'|'movement'|'rotation'|'blend'|'spawn'|'other';\n title: string;\n props: Property[];\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Point } from 'pixi.js';\nimport { Particle } from '../Particle';\nimport { rotatePoint, scaleBy, length } from '../ParticleUtils';\nimport { IEmitterBehavior, BehaviorOrder } from './Behaviors';\nimport { BehaviorEditorConfig } from './editor/Types';\n\n/**\n * A Movement behavior that handles movement by applying a constant acceleration to all particles.\n *\n * Example configuration:\n * ```javascript\n * {\n * \"type\": \"moveAcceleration\",\n * \"config\": {\n * \"accel\": {\n * \"x\": 0,\n * \"y\": 2000\n * },\n * \"minStart\": 600,\n * \"maxStart\": 600,\n * \"rotate\": true\n * }\n *}\n * ```\n */\nexport class AccelerationBehavior implements IEmitterBehavior {\n public static type = 'moveAcceleration';\n public static editorConfig: BehaviorEditorConfig = null as any;\n\n // doesn't _really_ need to be late, but doing so ensures that we can override any\n // rotation behavior that is mistakenly added\n public order = BehaviorOrder.Late;\n private minStart: number;\n private maxStart: number;\n private accel: { x: number; y: number };\n private rotate: boolean;\n private maxSpeed: number;\n constructor(config: {\n /**\n * Minimum speed when initializing the particle, in world units/second.\n */\n minStart: number;\n /**\n * Maximum speed when initializing the particle. in world units/second.\n */\n maxStart: number;\n /**\n * Constant acceleration, in the coordinate space of the particle parent, in world units/second.\n */\n accel: { x: number; y: number };\n /**\n * Rotate the particle with its direction of movement.\n * While initial movement direction reacts to rotation settings, this overrides any dynamic rotation.\n * Defaults to false.\n */\n rotate?: boolean;\n /**\n * Maximum linear speed. 0 is unlimited. Defaults to 0.\n */\n maxSpeed?: number;\n }) {\n this.minStart = config.minStart;\n this.maxStart = config.maxStart;\n this.accel = config.accel;\n this.rotate = !!config.rotate;\n this.maxSpeed = config.maxSpeed ?? 0;\n }\n\n initParticles(first: Particle): void {\n let next = first;\n\n while (next) {\n const speed = Math.random() * (this.maxStart - this.minStart) + this.minStart;\n\n if (!next.config.velocity) {\n next.config.velocity = new Point(speed, 0);\n } else {\n (next.config.velocity as Point).set(speed, 0);\n }\n\n rotatePoint(next.rotation, next.config.velocity);\n\n next = next.next;\n }\n }\n\n updateParticle(particle: Particle, deltaSec: number): void {\n const vel = particle.config.velocity;\n const oldVX = vel.x;\n const oldVY = vel.y;\n\n vel.x += this.accel.x * deltaSec;\n vel.y += this.accel.y * deltaSec;\n if (this.maxSpeed) {\n const currentSpeed = length(vel);\n // if we are going faster than we should, clamp at the max speed\n // DO NOT recalculate vector length\n\n if (currentSpeed > this.maxSpeed) {\n scaleBy(vel, this.maxSpeed / currentSpeed);\n }\n }\n // calculate position delta by the midpoint between our old velocity and our new velocity\n particle.x += ((oldVX + vel.x) / 2) * deltaSec;\n particle.y += ((oldVY + vel.y) / 2) * deltaSec;\n if (this.rotate) {\n particle.rotation = Math.atan2(vel.y, vel.x);\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { combineRGBComponents, SimpleEase, Color } from './ParticleUtils';\nimport { PropertyNode } from './PropertyNode';\n\nfunction intValueSimple(this: PropertyList<number>, lerp: number): number {\n if (this.ease) lerp = this.ease(lerp);\n\n return ((this.first.next.value - this.first.value) * lerp) + this.first.value;\n}\n\nfunction intColorSimple(this: PropertyList<Color>, lerp: number): number {\n if (this.ease) lerp = this.ease(lerp);\n\n const curVal = this.first.value;\n const nextVal = this.first.next.value;\n const r = ((nextVal.r - curVal.r) * lerp) + curVal.r;\n const g = ((nextVal.g - curVal.g) * lerp) + curVal.g;\n const b = ((nextVal.b - curVal.b) * lerp) + curVal.b;\n\n return combineRGBComponents(r, g, b);\n}\n\nfunction intValueComplex(this: PropertyList<number>, lerp: number): number {\n if (this.ease) lerp = this.ease(lerp);\n\n // make sure we are on the right segment\n let current = this.first;\n let next = current.next;\n\n while (lerp > next.time) {\n current = next;\n next = next.next;\n }\n // convert the lerp value to the segment range\n lerp = (lerp - current.time) / (next.time - current.time);\n\n return ((next.value - current.value) * lerp) + current.value;\n}\n\nfunction intColorComplex(this: PropertyList<Color>, lerp: number): number {\n if (this.ease) lerp = this.ease(lerp);\n\n // make sure we are on the right segment\n let current = this.first;\n let next = current.next;\n\n while (lerp > next.time) {\n current = next;\n next = next.next;\n }\n // convert the lerp value to the segment range\n lerp = (lerp - current.time) / (next.time - current.time);\n const curVal = current.value;\n const nextVal = next.value;\n const r = ((nextVal.r - curVal.r) * lerp) + curVal.r;\n const g = ((nextVal.g - curVal.g) * lerp) + curVal.g;\n const b = ((nextVal.b - curVal.b) * lerp) + curVal.b;\n\n return combineRGBComponents(r, g, b);\n}\n\nfunction intValueStepped(this: PropertyList<number>, lerp: number): number {\n if (this.ease) lerp = this.ease(lerp);\n\n // make sure we are on the right segment\n let current = this.first;\n\n while (current.next && lerp > current.next.time) {\n current = current.next;\n }\n\n return current.value;\n}\n\nfunction intColorStepped(this: PropertyList<Color>, lerp: number): number {\n if (this.ease) lerp = this.ease(lerp);\n\n // make sure we are on the right segment\n let current = this.first;\n\n while (current.next && lerp > current.next.time) {\n current = current.next;\n }\n const curVal = current.value;\n\n return combineRGBComponents(curVal.r, curVal.g, curVal.b);\n}\n\n/**\n * Singly linked list container for keeping track of interpolated properties for particles.\n * Each Particle will have one of these for each interpolated property.\n */\nexport class PropertyList<V> {\n /**\n * The first property node in the linked list.\n */\n public first: PropertyNode<V>;\n /**\n * Calculates the correct value for the current interpolation value. This method is set in\n * the reset() method.\n * @param lerp The interpolation value from 0-1.\n * @return The interpolated value. Colors are converted to the hex value.\n */\n public interpolate: (lerp: number) => number;\n /**\n * A custom easing method for this list.\n * @param lerp The interpolation value from 0-1.\n * @return The eased value, also from 0-1.\n */\n public ease: SimpleEase;\n /**\n * If this list manages colors, which requires a different method for interpolation.\n */\n private isColor: boolean;\n\n /**\n * @param isColor If this list handles color values\n */\n constructor(isColor = false) {\n this.first = null as any;\n this.isColor = !!isColor;\n this.interpolate = null as any;\n this.ease = null as any;\n }\n\n /**\n * Resets the list for use.\n * @param first The first node in the list.\n * @param first.isStepped If the values should be stepped instead of interpolated linearly.\n */\n public reset(first: PropertyNode<V>): void {\n this.first = first;\n const isSimple = first.next && first.next.time >= 1;\n\n if (isSimple) {\n this.interpolate = this.isColor ? intColorSimple : intValueSimple;\n }\n else if (first.isStepped) {\n this.interpolate = this.isColor ? intColorStepped : intValueStepped;\n }\n else {\n this.interpolate = this.isColor ? intColorComplex : intValueComplex;\n }\n this.ease = this.first.ease;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Particle } from '../Particle';\nimport { PropertyList } from '../PropertyList';\nimport { PropertyNode, ValueList } from '../PropertyNode';\nimport { IEmitterBehavior, BehaviorOrder } from './Behaviors';\nimport { BehaviorEditorConfig } from './editor/Types';\n\n/**\n * An Alpha behavior that applies an interpolated or stepped list of values to the particle's opacity.\n *\n * Example config:\n * ```javascript\n * {\n * type: 'alpha',\n * config: {\n * alpha: {\n * list: [{value: 0, time: 0}, {value: 1, time: 0.25}, {value: 0, time: 1}]\n * },\n * }\n * }\n * ```\n */\nexport class AlphaBehavior implements IEmitterBehavior {\n public static type = 'alpha';\n public static editorConfig: BehaviorEditorConfig = null as any;\n\n public order = BehaviorOrder.Normal;\n private list: PropertyList<number>;\n constructor(config: {\n /**\n * Transparency of the particles from 0 (transparent) to 1 (opaque)\n */\n alpha: ValueList<number>;\n }) {\n this.list = new PropertyList(false);\n this.list.reset(PropertyNode.createList(config.alpha));\n }\n\n initParticles(first: Particle): void {\n let next = first;\n\n while (next) {\n next.alpha = this.list.first.value;\n next = next.next;\n }\n }\n\n updateParticle(particle: Particle): void {\n particle.alpha = this.list.interpolate(particle.agePercent);\n }\n}\n\n/**\n * An Alpha behavior that applies a static value to the particle's opacity at particle initialization.\n *\n * Example config:\n * ```javascript\n * {\n * type: 'alphaStatic',\n * config: {\n * alpha: 0.75,\n * }\n * }\n * ```\n */\nexport class StaticAlphaBehavior implements IEmitterBehavior {\n public static type = 'alphaStatic';\n public static editorConfig: BehaviorEditorConfig = null as any;\n\n public order = BehaviorOrder.Normal;\n private value: number;\n constructor(config: {\n /**\n * Transparency of the particles from 0 (transparent) to 1 (opaque)\n */\n alpha: number;\n }) {\n this.value = config.alpha;\n }\n\n initParticles(first: Particle): void {\n let next = first;\n\n while (next) {\n next.alpha = this.value;\n next = next.next;\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Particle } from '../Particle';\nimport { IEmitterBehavior, BehaviorOrder } from './Behaviors';\nimport { GetTextureFromString } from '../ParticleUtils';\nimport { Texture } from 'pixi.js';\nimport { BehaviorEditorConfig } from './editor/Types';\n\n/**\n * The format of a single animation to be used on a particle.\n */\nexport interface AnimatedParticleArt {\n /**\n * Framerate for the animation (in frames per second). A value of -1 will tie the framerate to\n * the particle's lifetime so that the animation lasts exactly as long as the particle.\n */\n framerate: -1 | number;\n /**\n * If the animation should loop. Defaults to false.\n */\n loop?: boolean;\n /**\n * A list of textures or frame descriptions for duplicated frames.\n * String values will be converted to textures with {@link ParticleUtils.GetTextureFromString}.\n * Example of a texture repeated for 5 frames, followed by a second texture for one frame:\n * ```javascript\n * [{texture: 'myFirstTex', count: 5}, 'mySecondTex']\n * ```\n */\n textures: (string | Texture | { texture: string | Texture; count: number })[];\n}\n\n/**\n * Internal data format for playback.\n */\nexport interface ParsedAnimatedParticleArt {\n textures: Texture[];\n duration: number;\n framerate: number;\n loop: boolean;\n}\n\nfunction getTextures(textures: (string | Texture | { texture: string | Texture; count: number })[]): Texture[] {\n const outTextures: Texture[] = [];\n\n for (let j = 0; j < textures.length; ++j) {\n let tex = textures[j];\n\n if (typeof tex === 'string') {\n outTextures.push(GetTextureFromString(tex));\n }\n else if (tex instanceof Texture) {\n outTextures.push(tex);\n }\n // assume an object with extra data determining duplicate frame data\n else {\n let dupe = tex.count || 1;\n\n if (typeof tex.texture === 'string') {\n tex = GetTextureFromString(tex.texture);\n }\n else// if(tex.texture instanceof Texture)\n {\n tex = tex.texture;\n }\n for (; dupe > 0; --dupe) {\n outTextures.push(tex);\n }\n }\n }\n\n return outTextures;\n}\n\n/**\n * A Texture behavior that picks a random animation for each particle to play.\n * See {@link AnimatedParticleArt} for detailed configuration info.\n *\n * Example config:\n * ```javascript\n * {\n * type: 'animatedRandom',\n * config: {\n * anims: [\n * {\n * framerate: 25,\n * loop: true,\n * textures: ['frame1', 'frame2', 'frame3']\n * },\n * {\n * framerate: 25,\n * loop: true,\n * textures: ['frame3', 'frame2', 'frame1']\n * }\n * ],\n * }\n * }\n * ```\n */\nexport class RandomAnimatedTextureBehavior implements IEmitterBehavior {\n public static type = 'animatedRandom';\n public static editorConfig: BehaviorEditorConfig = null as any;\n\n public order = BehaviorOrder.Normal;\n private anims: ParsedAnimatedParticleArt[];\n constructor(config: {\n /**\n * Animation configuration to use for each particle, randomly chosen from the list.\n */\n anims: AnimatedParticleArt[];\n }) {\n this.anims = [];\n for (let i = 0; i < config.anims.length; ++i) {\n const anim = config.anims[i];\n const textures = getTextures(anim.textures);\n // eslint-disable-next-line no-nested-ternary\n const framerate = anim.framerate < 0 ? -1 : (anim.framerate > 0 ? anim.framerate : 60);\n const parsedAnim: ParsedAnimatedParticleArt = {\n textures,\n duration: framerate > 0 ? textures.length / framerate : 0,\n framerate,\n loop: framerate > 0 ? !!anim.loop : false,\n };\n\n this.anims.push(parsedAnim);\n }\n }\n\n initParticles(first: Particle): void {\n let next = first;\n\n while (next) {\n const index = Math.floor(Math.random() * this.anims.length);\n const anim = next.config.anim = this.anims[index];\n\n next.texture = anim.textures[0];\n next.config.animElapsed = 0;\n // if anim should match particle life exactly\n if (anim.framerate === -1) {\n next.config.animDuration = next.maxLife;\n next.config.animFramerate = anim.textures.length / next.maxLife;\n }\n else {\n next.config.animDuration = anim.duration;\n next.config.animFramerate = anim.framerate;\n }\n\n next = next.next;\n }\n }\n\n updateParticle(particle: Particle, deltaSec: number): void {\n const config = particle.config;\n const anim = config.anim;\n\n config.animElapsed += deltaSec;\n if (config.animElapsed >= config.animDuration) {\n // loop elapsed back around\n if (config.anim.loop) {\n config.animElapsed = config.animElapsed % config.animDuration;\n }\n // subtract a small amount to prevent attempting to go past the end of the animation\n else {\n config.animElapsed = config.animDuration - 0.000001;\n }\n }\n // add a very small number to the frame and then floor it to avoid\n // the frame being one short due to floating point errors.\n const frame = ((config.animElapsed * config.animFramerate) + 0.0000001) | 0;\n\n // in the very rare case that framerate * elapsed math ends up going past the end, use the last texture\n particle.texture = anim.textures[frame] || anim.textures[anim.textures.length - 1] || Texture.EMPTY;\n }\n}\n\n/**\n * A Texture behavior that uses a single animation for each particle to play.\n * See {@link AnimatedParticleArt} for detailed configuration info.\n *\n * Example config:\n * ```javascript\n * {\n * type: 'animatedSingle',\n * config: {\n * anim: {\n * framerate: 25,\n * loop: true,\n * textures: ['frame1', 'frame2', 'frame3']\n * }\n * }\n * }\n * ```\n */\nexport class SingleAnimatedTextureBehavior implements IEmitterBehavior {\n public static type = 'animatedSingle';\n public static editorConfig: BehaviorEditorConfig = null as any;\n\n public order = BehaviorOrder.Normal;\n private anim: ParsedAnimatedParticleArt;\n constructor(config: {\n /**\n * Animation configuration to use for each particle.\n */\n anim: AnimatedParticleArt;\n }) {\n const anim = config.anim;\n const textures = getTextures(anim.textures);\n // eslint-disable-next-line no-nested-ternary\n const framerate = anim.framerate < 0 ? -1 : (anim.framerate > 0 ? anim.framerate : 60);\n\n this.anim = {\n textures,\n duration: framerate > 0 ? textures.length / framerate : 0,\n framerate,\n loop: framerate > 0 ? !!anim.loop : false,\n };\n }\n\n initParticles(first: Particle): void {\n let next = first;\n const anim = this.anim;\n\n while (next) {\n next.texture = anim.textures[0];\n next.config.animElapsed = 0;\n // if anim should match particle life exactly\n if (anim.framerate === -1) {\n next.config.animDuration = next.maxLife;\n next.config.animFramerate = anim.textures.length / next.maxLife;\n }\n else {\n next.config.animDuration = anim.duration;\n next.config.animFramerate = anim.framerate;\n }\n\n next = next.next;\n }\n }\n\n updateParticle(particle: Particle, deltaSec: number): void {\n const anim = this.anim;\n const config = particle.config;\n\n config.animElapsed += deltaSec;\n if (config.animElapsed >= config.animDuration) {\n // loop elapsed back around\n if (anim.loop) {\n config.animElapsed = config.animElapsed % config.animDuration;\n }\n // subtract a small amount to prevent attempting to go past the end of the animation\n else {\n config.animElapsed = config.animDuration - 0.000001;\n }\n }\n // add a very small number to the frame and then floor it to avoid\n // the frame being one short due to floating point errors.\n const frame = ((config.animElapsed * config.animFramerate) + 0.0000001) | 0;\n\n // in the very rare case that framerate * elapsed math ends up going past the end, use the last texture\n particle.texture = anim.textures[frame] || anim.textures[anim.textures.length - 1] || Texture.EMPTY;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Particle } from '../Particle';\nimport { getBlendMode } from '../ParticleUtils';\nimport { IEmitterBehavior, BehaviorOrder } from './Behaviors';\nimport { BehaviorEditorConfig } from './editor/Types';\n\n/**\n * A Blend Mode behavior that applies a blend mode value to the particle at initialization.\n *\n * Example config:\n * ```javascript\n * {\n * type: 'blendMode',\n * config: {\n * blendMode: 'multiply',\n * }\n * }\n * ```\n */\nexport class BlendModeBehavior implements IEmitterBehavior {\n public static type = 'blendMode';\n public static editorConfig: BehaviorEditorConfig = null as any;\n\n public order = BehaviorOrder.Normal;\n private value: string;\n constructor(config: {\n /**\n * Blend mode of all particles. This value is a key from\n * [PixiJs's BLEND_MODE enum](https://pixijs.download/release/docs/PIXI.html#BLEND_MODES).\n */\n blendMode: string;\n }) {\n this.value = config.blendMode;\n }\n\n initParticles(first: Particle): void {\n let next = first;\n\n while (next) {\n next.blendMode = getBlendMode(this.value);\n next = next.next;\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Particle } from '../Particle';\nimport { IEmitterBehavior, BehaviorOrder } from './Behaviors';\nimport { DEG_TO_RADS, rotatePoint } from '../ParticleUtils';\nimport { BehaviorEditorConfig } from './editor/Types';\n\n/**\n * A Spawn behavior that sends particles out from a single point or ring, and is capable of evenly spacing\n * the particle's starting angles.\n *\n * Example config:\n * ```javascript\n * {\n * type: 'spawnBurst',\n * config: {\n * spacing: 90,\n * start: 0,\n * distance: 40,\n * }\n * }\n * ```\n */\nexport class BurstSpawnBehavior implements IEmitterBehavior {\n public static type = 'spawnBurst';\n public static editorConfig: BehaviorEditorConfig = null as any;\n\n order = BehaviorOrder.Spawn;\n private spacing: number;\n private start: number;\n private distance: number;\n\n constructor(config: {\n /**\n * Description: Spacing between each particle spawned in a wave, in degrees.\n */\n spacing: number;\n /**\n * Description: Angle to start placing particles at, in degrees. 0 is facing right, 90 is facing upwards.\n */\n start: number;\n /**\n * Description: Distance from the emitter to spawn particles, forming a ring/arc.\n */\n distance: number;\n }) {\n this.spacing = config.spacing * DEG_TO_RADS;\n this.start = config.start * DEG_TO_RADS;\n this.distance = config.distance;\n }\n\n initParticles(first: Particle): void {\n let count = 0;\n let next = first;\n\n while (next) {\n let angle: number;\n\n if (this.spacing) {\n angle = this.start + (this.spacing * count);\n }\n else {\n angle = Math.random() * Math.PI * 2;\n }\n\n next.rotation = angle;\n if (this.distance) {\n next.position.x = this.distance;\n rotatePoint(angle, next.position);\n }\n next = next.next;\n ++count;\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Particle } from '../Particle';\nimport { Color, combineRGBComponents } from '../ParticleUtils';\nimport { PropertyList } from '../PropertyList';\nimport { PropertyNode, ValueList } from '../PropertyNode';\nimport { IEmitterBehavior, BehaviorOrder } from './Behaviors';\nimport { BehaviorEditorConfig } from './editor/Types';\n\n/**\n * A Color behavior that applies an interpolated or stepped list of values to the particle's tint property.\n *\n * Example config:\n * ```javascript\n * {\n * type: 'color',\n * config: {\n * color: {\n * list: [{value: '#ff0000' time: 0}, {value: '#00ff00', time: 0.5}, {value: '#0000ff', time: 1}]\n * },\n * }\n * }\n * ```\n */\nexport class ColorBehavior implements IEmitterBehavior {\n public static type = 'color';\n public static editorConfig: BehaviorEditorConfig = null as any;\n\n public order = BehaviorOrder.Normal;\n private list: PropertyList<Color>;\n constructor(config: {\n /**\n * Color of the particles as 6 digit hex codes.\n */\n color: ValueList<string>;\n }) {\n this.list = new PropertyList(true);\n this.list.reset(PropertyNode.createList(config.color));\n }\n\n initParticles(first: Particle): void {\n let next = first;\n const color = this.list.first.value;\n const tint = combineRGBComponents(color.r, color.g, color.b);\n\n while (next) {\n next.tint = tint;\n next = next.next;\n }\n }\n\n updateParticle(particle: Particle): void {\n particle.tint = this.list.interpolate(particle.agePercent);\n }\n}\n\n/**\n * A Color behavior that applies a single color to the particle's tint property at initialization.\n *\n * Example config:\n * ```javascript\n * {\n * type: 'colorStatic',\n * config: {\n * color: '#ffff00',\n * }\n * }\n * ```\n */\nexport class StaticColorBehavior implements IEmitterBehavior {\n public static type = 'colorStatic';\n public static editorConfig: BehaviorEditorConfig = null as any;\n\n public order = BehaviorOrder.Normal;\n private value: number;\n constructor(config: {\n /**\n * Color of the particles as 6 digit hex codes.\n */\n color: string;\n }) {\n let color = config.color;\n\n if (color.charAt(0) === '#') {\n color = color.substr(1);\n }\n else if (color.indexOf('0x') === 0) {\n color = color.substr(2);\n }\n\n this.value = parseInt(color, 16);\n }\n\n initParticles(first: Particle): void {\n let next = first;\n\n while (next) {\n next.tint = this.value;\n next = next.next;\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Particle } from '../Particle';\nimport { IEmitterBehavior, BehaviorOrder } from './Behaviors';\nimport { GetTextureFromString } from '../ParticleUtils';\nimport { BehaviorEditorConfig } from './editor/Types';\nimport { Texture } from 'pixi.js';\n\n/**\n * A Texture behavior that assigns a texture to each particle from its list, in order, before looping around to the first\n * texture again. String values will be converted to textures with {@link ParticleUtils.GetTextureFromString}.\n *\n * Example config:\n * ```javascript\n * {\n * type: 'textureOrdered',\n * config: {\n * textures: [\"myTex1Id\", \"myTex2Id\", \"myTex3Id\", \"myTex4Id\"],\n * }\n * }\n * ```\n */\nexport class OrderedTextureBehavior implements IEmitterBehavior {\n public static type = 'textureOrdered';\n public static editorConfig: BehaviorEditorConfig = null as any;\n\n public order = BehaviorOrder.Normal;\n private textures: Texture[];\n private index: number;\n constructor(config: {\n /**\n * Images to use for each particle, used in order before looping around\n */\n textures: Texture[];\n }) {\n this.index = 0;\n this.textures = config.textures.map((tex) => (typeof tex === 'string' ? GetTextureFromString(tex) : tex));\n }\n\n initParticles(first: Particle): void {\n let next = first;\n\n while (next) {\n next.texture = this.textures[this.index];\n if (++this.index >= this.textures.length) {\n this.index = 0;\n }\n next = next.next;\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Point } from 'pixi.js';\nimport { Particle } from '../Particle';\nimport { rotatePoint, verbose } from '../ParticleUtils';\nimport { PropertyList } from '../PropertyList';\nimport { PropertyNode, ValueList } from '../PropertyNode';\nimport { IEmitterBehavior, BehaviorOrder } from './Behaviors';\nimport { BehaviorEditorConfig } from './editor/Types';\n\n/**\n * A helper point for math things.\n * @hidden\n */\nconst helperPoint = new Point();\n\n/**\n * A hand picked list of Math functions (and a couple properties) that are\n * allowable. They should be used without the preceding \"Math.\"\n * @hidden\n */\nconst MATH_FUNCS = [\n 'E',\n 'LN2',\n 'LN10',\n 'LOG2E',\n 'LOG10E',\n 'PI',\n 'SQRT1_2',\n 'SQRT2',\n 'abs',\n 'acos',\n 'acosh',\n 'asin',\n 'asinh',\n 'atan',\n 'atanh',\n 'atan2',\n 'cbrt',\n 'ceil',\n 'cos',\n 'cosh',\n 'exp',\n 'expm1',\n 'floor',\n 'fround',\n 'hypot',\n 'log',\n 'log1p',\n 'log10',\n 'log2',\n 'max',\n 'min',\n 'pow',\n 'random',\n 'round',\n 'sign',\n 'sin',\n 'sinh',\n 'sqrt',\n 'tan',\n 'tanh',\n];\n/**\n * create an actual regular expression object from the string\n * @hidden\n */\nconst WHITELISTER = new RegExp(\n [\n // Allow the 4 basic operations, parentheses and all numbers/decimals, as well\n // as 'x', for the variable usage.\n '[01234567890\\\\.\\\\*\\\\-\\\\+\\\\/\\\\(\\\\)x ,]',\n ].concat(MATH_FUNCS).join('|'),\n 'g',\n);\n\n/**\n * Parses a string into a function for path following.\n * This involves whitelisting the string for safety, inserting \"Math.\" to math function\n * names, and using `new Function()` to generate a function.\n * @hidden\n * @param pathString The string to parse.\n * @return The path function - takes x, outputs y.\n */\nfunction parsePath(pathString: string): (x: number) => number {\n const matches = pathString.match(WHITELISTER);\n\n for (let i = (matches as any).length - 1; i >= 0; --i) {\n if (MATH_FUNCS.indexOf((matches as any)[i]) >= 0) { (matches as any)[i] = `Math.${(matches as any)[i]}`; }\n }\n pathString = (matches as any).join('');\n\n // eslint-disable-next-line no-new-func\n return new Function('x', `return ${pathString};`) as (x: number) => number;\n}\n\n/**\n * A particle that follows a path defined by an algebraic expression, e.g. \"sin(x)\" or\n * \"5x + 3\".\n * To use this class, the behavior config must have a \"path\" string or function.\n *\n * A string should have \"x\" in it to represent movement (from the\n * speed settings of the behavior). It may have numbers, parentheses, the four basic\n * operations, and any Math functions or properties (without the preceding \"Math.\").\n * The overall movement of the particle and the expression value become x and y positions for\n * the particle, respectively. The final position is rotated by the spawn rotation/angle of\n * the particle.\n *\n * A function merely needs to accept the \"x\" argument and output the a corresponding \"y\" value.\n *\n * Some example paths:\n *\n * * `\"sin(x/10) * 20\"` A sine wave path.\n * * `\"cos(x/100) * 30\"` Particles curve counterclockwise (for medium speed/low lifetime particles)\n * * `\"pow(x/10, 2) / 2\"` Particles curve clockwise (remember, +y is down).\n * * `(x) => Math.floor(x) * 3` Supplying an existing function should look like this\n *\n * Example configuration:\n * ```javascript\n * {\n * \"type\": \"movePath\",\n * \"config\": {\n * \"path\": \"round(sin(x) * 2\",\n * \"speed\": {\n * \"list\": [{value: 10, time: 0}, {value: 100, time: 0.25}, {value: 0, time: 1}],\n * },\n * \"minMult\": 0.8\n * }\n *}\n */\nexport class PathBehavior implements IEmitterBehavior {\n public static type = 'movePath';\n public static editorConfig: BehaviorEditorConfig = null as any;\n\n // *MUST* happen after other behaviors do initialization so that we can read initial transformations\n public order = BehaviorOrder.Late;\n /**\n * The function representing the path the particle should take.\n */\n private path: (x: number) => number;\n private list: PropertyList<number>;\n private minMult: number;\n constructor(config: {\n /**\n * Algebraic expression describing the movement of the particle.\n */\n path: string | ((x: number) => number);\n /**\n * Speed of the particles in world units/second. This affects the x value in the path.\n * Unlike normal speed movement, this can have negative values.\n */\n speed: ValueList<number>;\n /**\n * A value between minimum speed multipler and 1 is randomly generated and multiplied\n * with each speed value to generate the actual speed for each particle.\n */\n minMult: number;\n }) {\n if (config.path) {\n if (typeof config.path === 'function') {\n this.path = config.path;\n }\n else {\n try {\n this.path = parsePath(config.path);\n }\n catch (e) {\n if (verbose) {\n console.error('PathParticle: error in parsing path expression', e);\n }\n this.path = null as any;\n }\n }\n }\n else {\n if (verbose) {\n console.error('PathParticle requires a path value in its config!');\n }\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n this.path = (x) => x;\n }\n this.list = new PropertyList(false);\n this.list.reset(PropertyNode.createList(config.speed));\n this.minMult = config.minMult ?? 1;\n }\n\n initParticles(first: Particle): void {\n let next = first;\n\n while (next) {\n /*\n * The initial rotation in degrees of the particle, because the direction of the path\n * is based on that.\n */\n next.config.initRotation = next.rotation;\n /* The initial position of the particle, as all path movement is added to that. */\n if (!next.config.initPosition) {\n next.config.initPosition = new Point(next.x, next.y);\n }\n else {\n (next.config.initPosition as Point).copyFrom(next.position);\n }\n /* Total single directional movement, due to speed. */\n next.config.movement = 0;\n\n // also do speed multiplier, since this includes basic speed movement\n const mult = (Math.random() * (1 - this.minMult)) + this.minMult;\n\n next.config.speedMult = mult;\n\n next = next.next;\n }\n }\n\n updateParticle(particle: Particle, deltaSec: number): void {\n // increase linear movement based on speed\n const speed = this.list.interpolate(particle.agePercent) * particle.config.speedMult;\n\n particle.config.movement += speed * deltaSec;\n // set up the helper point for rotation\n helperPoint.x = particle.config.movement;\n helperPoint.y = this.path(helperPoint.x);\n rotatePoint(particle.config.initRotation, helperPoint);\n particle.position.x = particle.config.initPosition.x + helperPoint.x;\n particle.position.y = particle.config.initPosition.y + helperPoint.y;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Particle } from '../Particle';\nimport { IEmitterBehavior, BehaviorOrder } from './Behaviors';\nimport { BehaviorEditorConfig } from './editor/Types';\n\n/**\n * A Spawn behavior that sends particles out from a single point at the emitter's position.\n *\n * Example config:\n * ```javascript\n * {\n * type: 'spawnPoint',\n * config: {}\n * }\n * ```\n */\nexport class PointSpawnBehavior implements IEmitterBehavior {\n public static type = 'spawnPoint';\n public static editorConfig: BehaviorEditorConfig = null as any;\n\n order = BehaviorOrder.Spawn;\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n initParticles(_first: Particle): void {\n // really just a no-op\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Particle } from '../Particle';\nimport { IEmitterBehavior, BehaviorOrder } from './Behaviors';\nimport { GetTextureFromString } from '../ParticleUtils';\nimport { BehaviorEditorConfig } from './editor/Types';\nimport { Texture } from 'pixi.js';\n\n/**\n * A Texture behavior that assigns a random texture to each particle from its list.\n * String values will be converted to textures with {@link ParticleUtils.GetTextureFromString}.\n *\n * Example config:\n * ```javascript\n * {\n * type: 'textureRandom',\n * config: {\n * textures: [\"myTex1Id\", \"myTex2Id\", \"myTex3Id\", \"myTex4Id\"],\n * }\n * }\n * ```\n */\nexport class RandomTextureBehavior implements IEmitterBehavior {\n public static type = 'textureRandom';\n public static editorConfig: BehaviorEditorConfig = null as any;\n\n public order = BehaviorOrder.Normal;\n private textures: Texture[];\n constructor(config: {\n /**\n * Images to use for each particle, randomly chosen from the list.\n */\n textures: (Texture | string)[];\n }) {\n this.textures = config.textures.map((tex) => (typeof tex === 'string' ? GetTextureFromString(tex) : tex));\n }\n\n initParticles(first: Particle): void {\n let next = first;\n\n while (next) {\n const index = Math.floor(Math.random() * this.textures.length);\n\n next.texture = this.textures[index];\n\n next = next.next;\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Particle } from '../Particle';\nimport { DEG_TO_RADS } from '../ParticleUtils';\nimport { IEmitterBehavior, BehaviorOrder } from './Behaviors';\nimport { BehaviorEditorConfig } from './editor/Types';\n\n/**\n * A Rotation behavior that handles starting rotation, rotation speed, and rotational acceleration.\n *\n * Example configuration:\n * ```javascript\n * {\n * \"type\": \"rotation\",\n * \"config\": {\n * \"minStart\": 0,\n * \"maxStart\": 180,\n * \"minSpeed\": 30,\n * \"maxSpeed\": 45,\n * \"accel\": 20\n * }\n *}\n * ```\n */\nexport class RotationBehavior implements IEmitterBehavior {\n public static type = 'rotation';\n public static editorConfig: BehaviorEditorConfig = null as any;\n\n public order = BehaviorOrder.Normal;\n private minStart: number;\n private maxStart: number;\n private minSpeed: number;\n private maxSpeed: number;\n private accel: number;\n constructor(config: {\n /**\n * Minimum starting rotation of the particles, in degrees. 0 is facing right, 90 is upwards.\n */\n minStart: number;\n /**\n * Maximum starting rotation of the particles, in degrees. 0 is facing right, 90 is upwards.\n */\n maxStart: number;\n /**\n * Minimum rotation speed of the particles, in degrees/second. Positive is counter-clockwise.\n */\n minSpeed: number;\n /**\n * Maximum rotation speed of the particles, in degrees/second. Positive is counter-clockwise.\n */\n maxSpeed: number;\n /**\n * Constant rotational acceleration of the particles, in degrees/second/second.\n */\n accel: number;\n }) {\n this.minStart = config.minStart * DEG_TO_RADS;\n this.maxStart = config.maxStart * DEG_TO_RADS;\n this.minSpeed = config.minSpeed * DEG_TO_RADS;\n this.maxSpeed = config.maxSpeed * DEG_TO_RADS;\n this.accel = config.accel * DEG_TO_RADS;\n }\n\n initParticles(first: Particle): void {\n let next = first;\n\n while (next) {\n if (this.minStart === this.maxStart) {\n next.rotation += this.maxStart;\n } else {\n next.rotation += Math.random() * (this.maxStart - this.minStart) + this.minStart;\n }\n next.config.rotSpeed = Math.random() * (this.maxSpeed - this.minSpeed) + this.minSpeed;\n\n next = next.next;\n }\n }\n\n updateParticle(particle: Particle, deltaSec: number): void {\n if (this.accel) {\n const oldSpeed = particle.config.rotSpeed;\n\n particle.config.rotSpeed += this.accel * deltaSec;\n particle.rotation += ((particle.config.rotSpeed + oldSpeed) / 2) * deltaSec;\n } else {\n particle.rotation += particle.config.rotSpeed * deltaSec;\n }\n }\n}\n\n/**\n * A Rotation behavior that handles starting rotation.\n *\n * Example configuration:\n * ```javascript\n * {\n * \"type\": \"rotationStatic\",\n * \"config\": {\n * \"min\": 0,\n * \"max\": 180,\n * }\n *}\n * ```\n */\nexport class StaticRotationBehavior implements IEmitterBehavior {\n public static type = 'rotationStatic';\n public static editorConfig: BehaviorEditorConfig = null as any;\n\n public order = BehaviorOrder.Normal;\n private min: number;\n private max: number;\n constructor(config: {\n /**\n * Minimum starting rotation of the particles, in degrees. 0 is facing right, 90 is upwards.\n */\n min: number;\n /**\n * Maximum starting rotation of the particles, in degrees. 0 is facing right, 90 is upwards.\n */\n max: number;\n }) {\n this.min = config.min * DEG_TO_RADS;\n this.max = config.max * DEG_TO_RADS;\n }\n\n initParticles(first: Particle): void {\n let next = first;\n\n while (next) {\n if (this.min === this.max) {\n next.rotation += this.max;\n } else {\n next.rotation += Math.random() * (this.max - this.min) + this.min;\n }\n\n next = next.next;\n }\n }\n}\n\n/**\n * A Rotation behavior that blocks all rotation caused by spawn settings,\n * by resetting it to the specified rotation (or 0).\n *\n * Example configuration:\n * ```javascript\n * {\n * \"type\": \"noRotation\",\n * \"config\": {\n * \"rotation\": 0\n * }\n *}\n * ```\n */\nexport class NoRotationBehavior implements IEmitterBehavior {\n public static type = 'noRotation';\n public static editorConfig: BehaviorEditorConfig = null as any;\n\n public order = BehaviorOrder.Late + 1;\n\n private rotation: number;\n constructor(config: {\n /**\n * Locked rotation of the particles, in degrees. 0 is facing right, 90 is upwards.\n */\n rotation?: number;\n }) {\n this.rotation = (config.rotation || 0) * DEG_TO_RADS;\n }\n\n initParticles(first: Particle): void {\n let next = first;\n\n while (next) {\n next.rotation = this.rotation;\n\n next = next.next;\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Particle } from '../Particle';\nimport { PropertyList } from '../PropertyList';\nimport { PropertyNode, ValueList } from '../PropertyNode';\nimport { IEmitterBehavior, BehaviorOrder } from './Behaviors';\nimport { BehaviorEditorConfig } from './editor/Types';\n\n/**\n * A Scale behavior that applies an interpolated or stepped list of values to the particle's x & y scale.\n *\n * Example config:\n * ```javascript\n * {\n * type: 'scale',\n * config: {\n * scale: {\n * list: [{value: 0, time: 0}, {value: 1, time: 0.25}, {value: 0, time: 1}],\n * isStepped: true\n * },\n * minMult: 0.5\n * }\n * }\n * ```\n */\nexport class ScaleBehavior implements IEmitterBehavior {\n public static type = 'scale';\n public static editorConfig: BehaviorEditorConfig = null as any;\n\n public order = BehaviorOrder.Normal;\n private list: PropertyList<number>;\n private minMult: number;\n constructor(config: {\n /**\n * Scale of the particles, with a minimum value of 0\n */\n scale: ValueList<number>;\n /**\n * A value between minimum scale multipler and 1 is randomly\n * generated and multiplied with each scale value to provide the actual scale for each particle.\n */\n minMult: number;\n }) {\n this.list = new PropertyList(false);\n this.list.reset(PropertyNode.createList(config.scale));\n this.minMult = config.minMult ?? 1;\n }\n\n initParticles(first: Particle): void {\n let next = first;\n\n while (next) {\n const mult = (Math.random() * (1 - this.minMult)) + this.minMult;\n\n next.config.scaleMult = mult;\n next.scale.x = next.scale.y = this.list.first.value * mult;\n\n next = next.next;\n }\n }\n\n updateParticle(particle: Particle): void {\n particle.scale.x = particle.scale.y = this.list.interpolate(particle.agePercent) * particle.config.scaleMult;\n }\n}\n\n/**\n * A Scale behavior that applies a randomly picked value to the particle's x & y scale at initialization.\n *\n * Example config:\n * ```javascript\n * {\n * type: 'scaleStatic',\n * config: {\n * min: 0.25,\n * max: 0.75,\n * }\n * }\n * ```\n */\nexport class StaticScaleBehavior implements IEmitterBehavior {\n public static type = 'scaleStatic';\n public static editorConfig: BehaviorEditorConfig = null as any;\n\n public order = BehaviorOrder.Normal;\n private min: number;\n private max: number;\n constructor(config: {\n /**\n * Minimum scale of the particles, with a minimum value of 0\n */\n min: number;\n /**\n * Maximum scale of the particles, with a minimum value of 0\n */\n max: number;\n }) {\n this.min = config.min;\n this.max = config.max;\n }\n\n initParticles(first: Particle): void {\n let next = first;\n\n while (next) {\n const scale = (Math.random() * (this.max - this.min)) + this.min;\n\n next.scale.x = next.scale.y = scale;\n\n next = next.next;\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Particle } from '../Particle';\nimport { IEmitterBehavior, BehaviorOrder } from './Behaviors';\nimport { SpawnShape, SpawnShapeClass } from './shapes/SpawnShape';\nimport { PolygonalChain } from './shapes/PolygonalChain';\nimport { Rectangle } from './shapes/Rectangle';\nimport { Torus } from './shapes/Torus';\nimport { BehaviorEditorConfig } from './editor/Types';\n\n/**\n * A Spawn behavior that places (and optionally rotates) particles according to a\n * specified shape. Additional shapes can be registered with {@link registerShape | SpawnShape.registerShape()}.\n * Additional shapes must implement the {@link SpawnShape} interface, and their class must match the\n * {@link SpawnShapeClass} interface.\n * Shapes included by default are:\n * * {@link Rectangle}\n * * {@link Torus}\n * * {@link PolygonalChain}\n *\n * Example config:\n * ```javascript\n * {\n * type: 'spawnShape',\n * config: {\n * type: 'rect',\n * data: {\n * x: 0,\n * y: 0,\n * width: 20,\n * height: 300,\n * }\n * }\n * }\n * ```\n */\nexport class ShapeSpawnBehavior implements IEmitterBehavior {\n public static type = 'spawnShape';\n public static editorConfig: BehaviorEditorConfig = null as any;\n\n /**\n * Dictionary of all registered shape classes.\n */\n private static shapes: { [key: string]: SpawnShapeClass } = {};\n\n /**\n * Registers a shape to be used by the ShapeSpawn behavior.\n * @param constructor The shape class constructor to use, with a static `type` property to reference it by.\n * @param typeOverride An optional type override, primarily for registering a shape under multiple names.\n */\n public static registerShape(constructor: SpawnShapeClass, typeOverride?: string): void {\n ShapeSpawnBehavior.shapes[typeOverride || constructor.type] = constructor;\n }\n\n order = BehaviorOrder.Spawn;\n private shape: SpawnShape;\n\n constructor(config: {\n /**\n * Type of the shape to spawn\n */\n type: string;\n /**\n * Configuration data for the spawn shape.\n */\n data: any;\n }) {\n const ShapeClass = ShapeSpawnBehavior.shapes[config.type];\n\n if (!ShapeClass) {\n throw new Error(`No shape found with type '${config.type}'`);\n }\n this.shape = new ShapeClass(config.data);\n }\n\n initParticles(first: Particle): void {\n let next = first;\n\n while (next) {\n this.shape.getRandPos(next);\n next = next.next;\n }\n }\n}\n\nShapeSpawnBehavior.registerShape(PolygonalChain);\nShapeSpawnBehavior.registerShape(Rectangle);\nShapeSpawnBehavior.registerShape(Torus);\nShapeSpawnBehavior.registerShape(Torus, 'circle');\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Particle } from '../Particle';\nimport { IEmitterBehavior, BehaviorOrder } from './Behaviors';\nimport { GetTextureFromString } from '../ParticleUtils';\nimport { Texture } from 'pixi.js';\nimport { BehaviorEditorConfig } from './editor/Types';\n\n/**\n * A Textuure behavior that assigns a single texture to each particle.\n * String values will be converted to textures with {@link ParticleUtils.GetTextureFromString}.\n *\n * Example config:\n * ```javascript\n * {\n * type: 'textureSingle',\n * config: {\n * texture: Texture.from('myTexId'),\n * }\n * }\n * ```\n */\nexport class SingleTextureBehavior implements IEmitterBehavior {\n public static type = 'textureSingle';\n public static editorConfig: BehaviorEditorConfig = null as any;\n\n public order = BehaviorOrder.Normal;\n private texture: Texture;\n constructor(config: {\n /**\n * Image to use for each particle.\n */\n texture: Texture | string;\n }) {\n this.texture = typeof config.texture === 'string' ? GetTextureFromString(config.texture) : config.texture;\n }\n\n initParticles(first: Particle): void {\n let next = first;\n\n while (next) {\n next.texture = this.texture;\n\n next = next.next;\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Point } from 'pixi.js';\nimport { Particle } from '../Particle';\nimport { rotatePoint, normalize, scaleBy } from '../ParticleUtils';\nimport { PropertyList } from '../PropertyList';\nimport { PropertyNode, ValueList } from '../PropertyNode';\nimport { IEmitterBehavior, BehaviorOrder } from './Behaviors';\nimport { BehaviorEditorConfig } from './editor/Types';\n\n/**\n * A Movement behavior that uses an interpolated or stepped list of values for a particles speed at any given moment.\n * Movement direction is controlled by the particle's starting rotation.\n *\n * Example config:\n * ```javascript\n * {\n * type: 'moveSpeed',\n * config: {\n * speed: {\n * list: [{value: 10, time: 0}, {value: 100, time: 0.25}, {value: 0, time: 1}],\n * },\n * minMult: 0.8\n * }\n * }\n * ```\n */\nexport class SpeedBehavior implements IEmitterBehavior {\n public static type = 'moveSpeed';\n public static editorConfig: BehaviorEditorConfig = null as any;\n\n public order = BehaviorOrder.Late;\n private list: PropertyList<number>;\n private minMult: number;\n constructor(config: {\n /**\n * Speed of the particles in world units/second, with a minimum value of 0\n */\n speed: ValueList<number>;\n /**\n * A value between minimum speed multipler and 1 is randomly\n * generated and multiplied with each speed value to generate the actual speed for each particle.\n */\n minMult: number;\n }) {\n this.list = new PropertyList(false);\n this.list.reset(PropertyNode.createList(config.speed));\n this.minMult = config.minMult ?? 1;\n }\n\n initParticles(first: Particle): void {\n let next = first;\n\n while (next) {\n const mult = (Math.random() * (1 - this.minMult)) + this.minMult;\n\n next.config.speedMult = mult;\n if (!next.config.velocity) {\n next.config.velocity = new Point(this.list.first.value * mult, 0);\n }\n else {\n (next.config.velocity as Point).set(this.list.first.value * mult, 0);\n }\n\n rotatePoint(next.rotation, next.config.velocity);\n\n next = next.next;\n }\n }\n\n updateParticle(particle: Particle, deltaSec: number): void {\n const speed = this.list.interpolate(particle.agePercent) * particle.config.speedMult;\n const vel = particle.config.velocity;\n\n normalize(vel);\n scaleBy(vel, speed);\n particle.x += vel.x * deltaSec;\n particle.y += vel.y * deltaSec;\n }\n}\n\n/**\n * A Movement behavior that uses a randomly picked constant speed throughout a particle's lifetime.\n * Movement direction is controlled by the particle's starting rotation.\n *\n * Example config:\n * ```javascript\n * {\n * type: 'moveSpeedStatic',\n * config: {\n * min: 100,\n * max: 150\n * }\n * }\n * ```\n */\nexport class StaticSpeedBehavior implements IEmitterBehavior {\n public static type = 'moveSpeedStatic';\n public static editorConfig: BehaviorEditorConfig = null as any;\n\n public order = BehaviorOrder.Late;\n private min: number;\n private max: number;\n constructor(config: {\n /**\n * Minimum speed when initializing the particle.\n */\n min: number;\n /**\n * Maximum speed when initializing the particle.\n */\n max: number;\n }) {\n this.min = config.min;\n this.max = config.max;\n }\n\n initParticles(first: Particle): void {\n let next = first;\n\n while (next) {\n const speed = (Math.random() * (this.max - this.min)) + this.min;\n\n if (!next.config.velocity) {\n next.config.velocity = new Point(speed, 0);\n }\n else {\n (next.config.velocity as Point).set(speed, 0);\n }\n\n rotatePoint(next.rotation, next.config.velocity);\n\n next = next.next;\n }\n }\n\n updateParticle(particle: Particle, deltaSec: number): void {\n const velocity = particle.config.velocity;\n\n particle.x += velocity.x * deltaSec;\n particle.y += velocity.y * deltaSec;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Particle } from '../Particle';\nimport { IEmitterBehavior, BehaviorOrder } from './Behaviors';\nimport { Color, combineRGBComponents, hexToRGB } from '../ParticleUtils';\nimport { BehaviorEditorConfig } from './editor/Types';\n\nexport class RandomColor implements IEmitterBehavior {\n public static type = \"rngcolor\";\n public static editorConfig: BehaviorEditorConfig;\n\n public order = BehaviorOrder.Normal;\n private list: Color[];\n constructor(config: {\n /**\n * Color of the particles as 6 digit hex codes.\n */\n colour: string[];\n }) {\n this.list = config.colour.map((color) => hexToRGB(color));\n }\n\n initParticles(first: Particle): void {\n let next = first;\n\n while (next) {\n const index = Math.floor(Math.random() * this.list.length);\n const color = this.list[index];\n const tint = combineRGBComponents(color.r, color.g, color.b);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (next as any).tint = tint;\n\n next = next.next;\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Particle } from '../Particle';\nimport { IEmitterBehavior, BehaviorOrder } from './Behaviors';\nimport { BehaviorEditorConfig } from './editor/Types';\nimport { PropertyList } from '../PropertyList';\nimport { PropertyNode, ValueList } from '../PropertyNode';\n\nexport class ZIndexBehavior implements IEmitterBehavior {\n public static type = \"zIndex\";\n public static editorConfig: BehaviorEditorConfig;\n\n public order = BehaviorOrder.Normal;\n private list: PropertyList<number>;\n constructor(config: { zIndex: ValueList<number> }) {\n this.list = new PropertyList(false);\n this.list.reset(PropertyNode.createList(config.zIndex));\n }\n\n initParticles(first: Particle): void {\n let next = first;\n\n while (next) {\n next = next.next;\n }\n }\n\n updateParticle(particle: Particle): void {\n (particle as any).zIndex = this.list.interpolate(particle.agePercent);\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Particle } from '../Particle';\nimport { IEmitterBehavior, BehaviorOrder } from './Behaviors';\nimport { GetTextureFromString } from '../ParticleUtils';\nimport { Texture } from 'pixi.js';\nimport { BehaviorEditorConfig } from './editor/Types';\n\n/**\n * Animation state configuration for a single state (e.g., 'default', 'splash')\n */\nexport interface AnimationStateConfig {\n /**\n * Framerate for the animation (in frames per second).\n * A value of -1 will tie the framerate to the particle's lifetime.\n */\n framerate: -1 | number;\n /**\n * If the animation should loop. Defaults to false.\n */\n loop?: boolean;\n /**\n * A list of texture names or Texture objects for this animation state.\n */\n textures: (string | Texture | { texture: string | Texture; count: number })[];\n}\n\n/**\n * Parsed internal format for animation state\n */\ninterface ParsedAnimationState {\n textures: Texture[];\n duration: number;\n framerate: number;\n loop: boolean;\n}\n\n/**\n * A set of animation states for a single particle type (e.g., 'symbol1')\n */\nexport interface AnimationSet {\n /**\n * Unique identifier for this animation set (e.g., 'symbol1', 'symbol2')\n */\n id: string;\n /**\n * Map of state names to animation configurations\n */\n states: Record<string, AnimationStateConfig>;\n}\n\n/**\n * Parsed internal format for animation set\n */\ninterface ParsedAnimationSet {\n id: string;\n states: Record<string, ParsedAnimationState>;\n}\n\n/**\n * Configuration for MultiStateAnimatedTextureBehavior\n */\nexport interface MultiStateAnimatedTextureConfig {\n /**\n * Array of animation sets, one will be randomly chosen per particle\n */\n sets: AnimationSet[];\n /**\n * Initial state to use when particle spawns. Defaults to 'default'.\n */\n initialState?: string;\n}\n\nfunction getTextures(\n textures: (string | Texture | { texture: string | Texture; count: number })[],\n): Texture[] {\n const outTextures: Texture[] = [];\n\n for (let j = 0; j < textures.length; ++j) {\n let tex = textures[j];\n\n if (typeof tex === 'string') {\n outTextures.push(GetTextureFromString(tex));\n } else if (tex instanceof Texture) {\n outTextures.push(tex);\n } else {\n let dupe = tex.count || 1;\n\n if (typeof tex.texture === 'string') {\n tex = GetTextureFromString(tex.texture);\n } else {\n tex = tex.texture;\n }\n for (; dupe > 0; --dupe) {\n outTextures.push(tex);\n }\n }\n }\n\n return outTextures;\n}\n\nfunction parseAnimationState(state: AnimationStateConfig): ParsedAnimationState {\n const textures = getTextures(state.textures);\n // eslint-disable-next-line no-nested-ternary\n const framerate = state.framerate < 0 ? -1 : state.framerate > 0 ? state.framerate : 60;\n\n return {\n textures,\n duration: framerate > 0 ? textures.length / framerate : 0,\n framerate,\n loop: framerate > 0 ? !!state.loop : false,\n };\n}\n\n/**\n * A Texture behavior that supports multiple animation states per particle.\n * Each particle randomly selects an animation set (e.g., 'symbol1', 'symbol2'),\n * and can switch between states (e.g., 'default', 'splash') at runtime.\n *\n * Example config:\n * ```javascript\n * {\n * type: 'multiStateAnimated',\n * config: {\n * sets: [\n * {\n * id: 'symbol1',\n * states: {\n * default: { framerate: 12, loop: true, textures: ['s1_0', 's1_1', 's1_2'] },\n * splash: { framerate: 24, loop: false, textures: ['s1_splash_0', 's1_splash_1'] }\n * }\n * },\n * {\n * id: 'symbol2',\n * states: {\n * default: { framerate: 12, loop: true, textures: ['s2_0', 's2_1', 's2_2'] },\n * splash: { framerate: 24, loop: false, textures: ['s2_splash_0', 's2_splash_1'] }\n * }\n * }\n * ],\n * initialState: 'default'\n * }\n * }\n * ```\n *\n * To change state at runtime:\n * ```javascript\n * particle.config.setState('splash');\n * ```\n */\nexport class MultiStateAnimatedTextureBehavior implements IEmitterBehavior {\n public static type = 'multiStateAnimated';\n public static editorConfig: BehaviorEditorConfig = null as any;\n\n public order = BehaviorOrder.Normal;\n private sets: ParsedAnimationSet[];\n private initialState: string;\n\n constructor(config: MultiStateAnimatedTextureConfig) {\n this.initialState = config.initialState || 'default';\n this.sets = [];\n\n for (const set of config.sets) {\n const parsedSet: ParsedAnimationSet = {\n id: set.id,\n states: {},\n };\n\n for (const [stateName, stateConfig] of Object.entries(set.states)) {\n parsedSet.states[stateName] = parseAnimationState(stateConfig);\n }\n\n this.sets.push(parsedSet);\n }\n }\n\n initParticles(first: Particle): void {\n let next = first;\n\n while (next) {\n // Capture current particle in closure\n const particle = next;\n\n // Randomly select an animation set\n const setIndex = Math.floor(Math.random() * this.sets.length);\n const set = this.sets[setIndex];\n\n // Store set reference and current state\n particle.config.animSet = set;\n particle.config.animSetId = set.id;\n particle.config.animStateName = this.initialState;\n\n // Initialize animation for the initial state\n this.applyState(particle, this.initialState);\n\n // Add setState method to particle config\n particle.config.setState = (stateName: string) => {\n if (particle.config.animStateName !== stateName) {\n this.applyState(particle, stateName);\n }\n };\n\n next = next.next;\n }\n }\n\n private applyState(particle: Particle, stateName: string): void {\n const set = particle.config.animSet as ParsedAnimationSet;\n const state = set.states[stateName];\n\n if (!state) {\n console.warn(`[MultiStateAnimatedTexture] State '${stateName}' not found in set '${set.id}'`);\n return;\n }\n\n particle.config.animStateName = stateName;\n particle.config.anim = state;\n particle.config.animElapsed = 0;\n\n // Set initial texture\n particle.texture = state.textures[0] || Texture.EMPTY;\n\n // Calculate duration and framerate\n if (state.framerate === -1) {\n particle.config.animDuration = particle.maxLife;\n particle.config.animFramerate = state.textures.length / particle.maxLife;\n } else {\n particle.config.animDuration = state.duration;\n particle.config.animFramerate = state.framerate;\n }\n }\n\n updateParticle(particle: Particle, deltaSec: number): void {\n const config = particle.config;\n const anim = config.anim as ParsedAnimationState;\n\n if (!anim || !anim.textures.length) return;\n\n config.animElapsed += deltaSec;\n\n if (config.animElapsed >= config.animDuration) {\n if (anim.loop) {\n config.animElapsed = config.animElapsed % config.animDuration;\n } else {\n config.animElapsed = config.animDuration - 0.000001;\n }\n }\n\n const frame = (config.animElapsed * config.animFramerate + 0.0000001) | 0;\n particle.texture =\n anim.textures[frame] || anim.textures[anim.textures.length - 1] || Texture.EMPTY;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { IEmitterBehavior, BehaviorOrder } from './Behaviors';\nimport { SpineParticle } from '../SpineParticle';\nimport { BehaviorEditorConfig } from './editor/Types';\n\n/**\n * Configuration for SpineAnimationBehavior\n */\nexport interface SpineAnimationConfig {\n /**\n * Animation name to play\n */\n animation: string;\n\n /**\n * Whether the animation should loop. Defaults to false.\n */\n loop?: boolean;\n\n /**\n * Time scale for the animation. Defaults to 1.\n */\n timeScale?: number;\n\n /**\n * Single skin name to use. If not provided, uses default skin.\n */\n skin?: string;\n\n /**\n * Array of skin names to randomly choose from.\n * Takes precedence over 'skin' if provided.\n */\n skins?: string[];\n}\n\n/**\n * A behavior that sets up Spine animation and skin for SpineParticles.\n * Supports single skin or random skin selection from a list.\n *\n * Example config:\n * ```javascript\n * {\n * type: 'spineAnimation',\n * config: {\n * animation: 'burst',\n * loop: false,\n * timeScale: 1,\n * // Option 1: Single skin\n * skin: 'gold',\n * // Option 2: Random skin from list\n * skins: ['gold', 'silver', 'bronze'],\n * }\n * }\n * ```\n */\nexport class SpineAnimationBehavior implements IEmitterBehavior {\n public static type = 'spineAnimation';\n public static editorConfig: BehaviorEditorConfig = null as any;\n\n public order = BehaviorOrder.Normal;\n\n private animation: string;\n private loop: boolean;\n private timeScale: number;\n private skin: string | null;\n private skins: string[] | null;\n\n constructor(config: SpineAnimationConfig) {\n this.animation = config.animation;\n this.loop = config.loop ?? false;\n this.timeScale = config.timeScale ?? 1;\n this.skin = config.skin ?? null;\n this.skins = config.skins ?? null;\n }\n\n /**\n * Initialize particles with Spine animation and skin\n */\n initParticles(first: any): void {\n let next: SpineParticle | null = first as SpineParticle;\n\n while (next) {\n const particle = next as SpineParticle;\n\n if (particle.spine) {\n // Set skin\n if (this.skins && this.skins.length > 0) {\n // Random skin from list\n const randomIndex = Math.floor(Math.random() * this.skins.length);\n const skinName = this.skins[randomIndex];\n particle.spine.skeleton.setSkinByName(skinName);\n particle.spine.skeleton.setSlotsToSetupPose();\n } else if (this.skin) {\n // Single skin\n particle.spine.skeleton.setSkinByName(this.skin);\n particle.spine.skeleton.setSlotsToSetupPose();\n }\n\n // Set animation\n const trackEntry = particle.spine.state.setAnimation(0, this.animation, this.loop);\n if (trackEntry) {\n trackEntry.timeScale = this.timeScale;\n }\n }\n\n next = particle.next;\n }\n }\n\n /**\n * Update is not needed - Spine handles its own animation updates\n */\n updateParticle(_particle: any, _deltaSec: number): void {\n // Spine updates automatically via its internal ticker\n // No additional update logic needed\n }\n}\n\n/**\n * A behavior that randomly selects a skin for each SpineParticle.\n * Use this if you want to set skin separately from animation.\n *\n * Example config:\n * ```javascript\n * {\n * type: 'spineRandomSkin',\n * config: {\n * skins: ['PIC1', 'PIC2', 'PIC3', 'PIC4'],\n * }\n * }\n * ```\n */\nexport class SpineRandomSkinBehavior implements IEmitterBehavior {\n public static type = 'spineRandomSkin';\n public static editorConfig: BehaviorEditorConfig = null as any;\n\n public order = BehaviorOrder.Normal - 1; // Run before animation behavior\n\n private skins: string[];\n\n constructor(config: { skins: string[] }) {\n this.skins = config.skins;\n }\n\n initParticles(first: any): void {\n let next: SpineParticle | null = first as SpineParticle;\n\n while (next) {\n const particle = next as SpineParticle;\n\n if (particle.spine && this.skins.length > 0) {\n const randomIndex = Math.floor(Math.random() * this.skins.length);\n const skinName = this.skins[randomIndex];\n particle.spine.skeleton.setSkinByName(skinName);\n particle.spine.skeleton.setSlotsToSetupPose();\n }\n\n next = particle.next;\n }\n }\n}\n\n/**\n * Animation keyframe for sequence behavior\n */\nexport interface SpineAnimationKeyframe {\n /**\n * Animation name to play\n */\n value: string;\n /**\n * Time in particle lifetime (0-1) when this animation should start\n */\n time: number;\n}\n\n/**\n * Configuration for SpineAnimationSequence behavior\n */\nexport interface SpineAnimationSequenceConfig {\n /**\n * List of animation keyframes with time values (0-1)\n * Similar to alpha behavior's list format\n */\n animation: {\n list: SpineAnimationKeyframe[];\n };\n /**\n * Whether animations should loop. Defaults to false.\n */\n loop?: boolean;\n /**\n * Time scale for animations. Defaults to 1.\n */\n timeScale?: number;\n /**\n * Single skin name to use.\n */\n skin?: string;\n /**\n * Array of skin names to randomly choose from.\n */\n skins?: string[];\n}\n\n/**\n * A behavior that plays different Spine animations at different points\n * in the particle's lifetime, similar to how alpha behavior works.\n *\n * Example config:\n * ```javascript\n * {\n * type: 'spineAnimationSequence',\n * config: {\n * animation: {\n * list: [\n * { value: 'idle', time: 0 },\n * { value: 'burst', time: 0.8 },\n * ]\n * },\n * loop: false,\n * skins: ['pic1', 'pic2', 'pic3'],\n * }\n * }\n * ```\n */\nexport class SpineAnimationSequenceBehavior implements IEmitterBehavior {\n public static type = 'spineAnimationSequence';\n public static editorConfig: BehaviorEditorConfig = null as any;\n\n public order = BehaviorOrder.Normal;\n\n private animationList: SpineAnimationKeyframe[];\n private loop: boolean;\n private timeScale: number;\n private skin: string | null;\n private skins: string[] | null;\n\n constructor(config: SpineAnimationSequenceConfig) {\n this.animationList = config.animation.list;\n this.loop = config.loop ?? false;\n this.timeScale = config.timeScale ?? 1;\n this.skin = config.skin ?? null;\n this.skins = config.skins ?? null;\n }\n\n /**\n * Initialize particles with skin and first animation\n */\n initParticles(first: any): void {\n let next: SpineParticle | null = first as SpineParticle;\n\n while (next) {\n const particle = next as SpineParticle;\n\n if (particle.spine) {\n // Set skin\n if (this.skins && this.skins.length > 0) {\n const randomIndex = Math.floor(Math.random() * this.skins.length);\n const skinName = this.skins[randomIndex];\n particle.spine.skeleton.setSkinByName(skinName);\n particle.spine.skeleton.setSlotsToSetupPose();\n } else if (this.skin) {\n particle.spine.skeleton.setSkinByName(this.skin);\n particle.spine.skeleton.setSlotsToSetupPose();\n }\n\n // Set initial animation (first in list)\n if (this.animationList.length > 0) {\n const firstAnim = this.animationList[0];\n const trackEntry = particle.spine.state.setAnimation(0, firstAnim.value, this.loop);\n if (trackEntry) {\n trackEntry.timeScale = this.timeScale;\n }\n }\n\n // Store current animation index in particle config\n particle.config.spineAnimIndex = 0;\n }\n\n next = particle.next;\n }\n }\n\n /**\n * Update particle - check if we need to switch to next animation\n */\n updateParticle(particle: any, _deltaSec: number): void {\n const spineParticle = particle as SpineParticle;\n if (!spineParticle.spine) return;\n\n const currentIndex = spineParticle.config.spineAnimIndex ?? 0;\n const agePercent = spineParticle.agePercent;\n\n // Check if we need to advance to next animation\n for (let i = currentIndex + 1; i < this.animationList.length; i++) {\n const keyframe = this.animationList[i];\n if (agePercent >= keyframe.time) {\n // Switch to this animation\n const trackEntry = spineParticle.spine.state.setAnimation(0, keyframe.value, this.loop);\n if (trackEntry) {\n trackEntry.timeScale = this.timeScale;\n }\n spineParticle.config.spineAnimIndex = i;\n }\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable no-lonely-if */\nimport { PointData } from 'pixi.js';\nimport { EaseSegment, SimpleEase } from './ParticleUtils';\nimport { ValueList } from './PropertyNode';\n\n/**\n * Full Emitter configuration for initializing an Emitter instance.\n */\nexport interface EmitterConfigV3 {\n /**\n * Random number configuration for picking the lifetime for each particle..\n */\n lifetime: RandNumber;\n /**\n * Easing to be applied to all interpolated or stepped values across the particle lifetime.\n */\n ease?: SimpleEase | EaseSegment[];\n /**\n * How many particles to spawn at once, each time that it is determined that particles should be spawned.\n * If omitted, only one particle will spawn at a time.\n */\n particlesPerWave?: number;\n /**\n * How often to spawn particles. This is a value in seconds, so a value of 0.5 would be twice a second.\n */\n frequency: number;\n /**\n * Defines a chance to not spawn particles. Values lower than 1 mean particles may not be spawned each time.\n * If omitted, particles will always spawn.\n */\n spawnChance?: number;\n /**\n * How long to run the Emitter before it stops spawning particles. If omitted, runs forever (or until told to stop\n * manually).\n */\n emitterLifetime?: number;\n /**\n * Maximum number of particles that can be alive at any given time for this emitter.\n */\n maxParticles?: number;\n /**\n * If newly spawned particles should be added to the back of the parent container (to make them less conspicuous\n * as they pop in). If omitted, particles will be added to the top of the container.\n */\n addAtBack?: boolean;\n /**\n * Default position to spawn particles from inside the parent container.\n */\n pos: { x: number; y: number };\n /**\n * If the emitter should start out emitting particles. If omitted, it will be treated as `true` and will emit particles\n * immediately.\n */\n emit?: boolean;\n /**\n * If the Emitter should hook into PixiJS's shared ticker. If this is false or emitted, you will be responsible for\n * connecting it to update ticks.\n */\n autoUpdate?: boolean;\n\n /**\n * The list of behaviors to apply to this emitter. See the behaviors namespace for\n * a list of built in behaviors. Custom behaviors may be registered with {@link Emitter.registerBehavior}.\n */\n behaviors: BehaviorEntry[];\n}\n\n/**\n * See {@link EmitterConfigV3.behaviors}\n */\nexport interface BehaviorEntry {\n /**\n * The behavior type, as defined as the static `type` property of a behavior class.\n */\n type: string;\n /**\n * Configuration data specific to that behavior.\n */\n config: any;\n}\n\n/**\n * Configuration for how to pick a random number (inclusive).\n */\nexport interface RandNumber {\n /**\n * Maximum pickable value.\n */\n max: number;\n /**\n * Minimum pickable value.\n */\n min: number;\n}\n\n/**\n * Converts emitter configuration from pre-5.0.0 library values into the current version.\n *\n * Example usage:\n * ```javascript\n * const emitter = new Emitter(myContainer, upgradeConfig(myOldConfig, [myTexture, myOtherTexture]));\n * ```\n * @param config The old emitter config to upgrade.\n * @param art The old art values as would have been passed into the Emitter constructor or `Emitter.init()`\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function upgradeConfig(config: EmitterConfigV2 | EmitterConfigV1, art: any): EmitterConfigV3 {\n // just ensure we aren't given any V3 config data\n if ('behaviors' in config) {\n return config as any;\n }\n\n const out: EmitterConfigV3 = {\n lifetime: config.lifetime,\n ease: config.ease,\n particlesPerWave: config.particlesPerWave,\n frequency: config.frequency,\n spawnChance: config.spawnChance,\n emitterLifetime: config.emitterLifetime,\n maxParticles: config.maxParticles,\n addAtBack: config.addAtBack,\n pos: config.pos,\n emit: config.emit,\n autoUpdate: config.autoUpdate,\n behaviors: [],\n };\n\n // set up the alpha\n if (config.alpha) {\n if ('start' in config.alpha) {\n if (config.alpha.start === config.alpha.end) {\n if (config.alpha.start !== 1) {\n out.behaviors.push({\n type: 'alphaStatic',\n config: { alpha: config.alpha.start },\n });\n }\n }\n else {\n const list: ValueList<number> = {\n list: [\n { time: 0, value: config.alpha.start },\n { time: 1, value: config.alpha.end },\n ],\n };\n\n out.behaviors.push({\n type: 'alpha',\n config: { alpha: list },\n });\n }\n }\n else if (config.alpha.list.length === 1) {\n if (config.alpha.list[0].value !== 1) {\n out.behaviors.push({\n type: 'alphaStatic',\n config: { alpha: config.alpha.list[0].value },\n });\n }\n }\n else {\n out.behaviors.push({\n type: 'alpha',\n config: { alpha: config.alpha },\n });\n }\n }\n\n // acceleration movement\n if (config.acceleration && (config.acceleration.x || config.acceleration.y)) {\n let minStart: number;\n let maxStart: number;\n\n if ('start' in (config.speed as any)) {\n minStart = (config as any).speed.start * ((config as any).speed.minimumSpeedMultiplier ?? 1);\n maxStart = (config as any).speed.start;\n }\n else {\n minStart = (config as any).speed.list[0].value * ((config as EmitterConfigV2).minimumSpeedMultiplier ?? 1);\n maxStart = (config as any).speed.list[0].value;\n }\n\n out.behaviors.push({\n type: 'moveAcceleration',\n config: {\n accel: config.acceleration,\n minStart,\n maxStart,\n rotate: !config.noRotation,\n maxSpeed: config.maxSpeed,\n },\n });\n }\n // path movement\n else if (config.extraData?.path) {\n let list: ValueList<number>;\n let mult: number;\n\n if ('start' in (config as any).speed) {\n mult = (config as any).speed.minimumSpeedMultiplier ?? 1;\n if ((config as any).speed.start === (config as any).speed.end) {\n list = {\n list: [{ time: 0, value: (config as any).speed.start }],\n };\n }\n else {\n list = {\n list: [\n { time: 0, value: (config as any).speed.start },\n { time: 1, value: (config as any).speed.end },\n ],\n };\n }\n }\n else {\n list = config.speed as any;\n mult = ((config as EmitterConfigV2).minimumSpeedMultiplier ?? 1);\n }\n\n out.behaviors.push({\n type: 'movePath',\n config: {\n path: config.extraData.path,\n speed: list,\n minMult: mult,\n },\n });\n }\n // normal speed movement\n else {\n if (config.speed) {\n if ('start' in config.speed) {\n if (config.speed.start === config.speed.end) {\n out.behaviors.push({\n type: 'moveSpeedStatic',\n config: {\n min: config.speed.start * (config.speed.minimumSpeedMultiplier ?? 1),\n max: config.speed.start,\n },\n });\n }\n else {\n const list: ValueList<number> = {\n list: [\n { time: 0, value: config.speed.start },\n { time: 1, value: config.speed.end },\n ],\n };\n\n out.behaviors.push({\n type: 'moveSpeed',\n config: { speed: list, minMult: config.speed.minimumSpeedMultiplier },\n });\n }\n }\n else if (config.speed.list.length === 1) {\n out.behaviors.push({\n type: 'moveSpeedStatic',\n config: {\n min: config.speed.list[0].value * ((config as EmitterConfigV2).minimumSpeedMultiplier ?? 1),\n max: config.speed.list[0].value,\n },\n });\n }\n else {\n out.behaviors.push({\n type: 'moveSpeed',\n config: { speed: config.speed, minMult: ((config as EmitterConfigV2).minimumSpeedMultiplier ?? 1) },\n });\n }\n }\n }\n\n // scale\n if (config.scale) {\n if ('start' in config.scale) {\n const mult = config.scale.minimumScaleMultiplier ?? 1;\n\n if (config.scale.start === config.scale.end) {\n out.behaviors.push({\n type: 'scaleStatic',\n config: {\n min: config.scale.start * mult,\n max: config.scale.start,\n },\n });\n }\n else {\n const list: ValueList<number> = {\n list: [\n { time: 0, value: config.scale.start },\n { time: 1, value: config.scale.end },\n ],\n };\n\n out.behaviors.push({\n type: 'scale',\n config: { scale: list, minMult: mult },\n });\n }\n }\n else if (config.scale.list.length === 1) {\n const mult = (config as EmitterConfigV2).minimumScaleMultiplier ?? 1;\n const scale = config.scale.list[0].value;\n\n out.behaviors.push({\n type: 'scaleStatic',\n config: { min: scale * mult, max: scale },\n });\n }\n else {\n out.behaviors.push({\n type: 'scale',\n config: { scale: config.scale, minMult: (config as EmitterConfigV2).minimumScaleMultiplier ?? 1 },\n });\n }\n }\n\n // color\n if (config.color) {\n if ('start' in config.color) {\n if (config.color.start === config.color.end) {\n if (config.color.start !== 'ffffff') {\n out.behaviors.push({\n type: 'colorStatic',\n config: { color: config.color.start },\n });\n }\n }\n else {\n const list: ValueList<string> = {\n list: [\n { time: 0, value: config.color.start },\n { time: 1, value: config.color.end },\n ],\n };\n\n out.behaviors.push({\n type: 'color',\n config: { color: list },\n });\n }\n }\n else if (config.color.list.length === 1) {\n if (config.color.list[0].value !== 'ffffff') {\n out.behaviors.push({\n type: 'colorStatic',\n config: { color: config.color.list[0].value },\n });\n }\n }\n else {\n out.behaviors.push({\n type: 'color',\n config: { color: config.color },\n });\n }\n }\n\n // rotation\n if (config.rotationAcceleration || config.rotationSpeed?.min || config.rotationSpeed?.max) {\n out.behaviors.push({\n type: 'rotation',\n config: {\n accel: config.rotationAcceleration || 0,\n minSpeed: config.rotationSpeed?.min || 0,\n maxSpeed: config.rotationSpeed?.max || 0,\n minStart: config.startRotation?.min || 0,\n maxStart: config.startRotation?.max || 0,\n },\n });\n }\n else if (config.startRotation?.min || config.startRotation?.max) {\n out.behaviors.push({\n type: 'rotationStatic',\n config: {\n min: config.startRotation?.min || 0,\n max: config.startRotation?.max || 0,\n },\n });\n }\n if (config.noRotation) {\n out.behaviors.push({\n type: 'noRotation',\n config: {},\n });\n }\n\n // blend mode\n if (config.blendMode && config.blendMode !== 'normal') {\n out.behaviors.push({\n type: 'blendMode',\n config: {\n blendMode: config.blendMode,\n },\n });\n }\n\n // animated\n if (Array.isArray(art) && typeof art[0] !== 'string' && 'framerate' in art[0]) {\n for (let i = 0; i < art.length; ++i) {\n if (art[i].framerate === 'matchLife') {\n art[i].framerate = -1;\n }\n }\n out.behaviors.push({\n type: 'animatedRandom',\n config: {\n anims: art,\n },\n });\n }\n else if (typeof art !== 'string' && 'framerate' in art) {\n if (art.framerate === 'matchLife') {\n art.framerate = -1;\n }\n out.behaviors.push({\n type: 'animatedSingle',\n config: {\n anim: art,\n },\n });\n }\n // ordered art\n else if (config.orderedArt && Array.isArray(art)) {\n out.behaviors.push({\n type: 'textureOrdered',\n config: {\n textures: art,\n },\n });\n }\n // random texture\n else if (Array.isArray(art)) {\n out.behaviors.push({\n type: 'textureRandom',\n config: {\n textures: art,\n },\n });\n }\n // single texture\n else {\n out.behaviors.push({\n type: 'textureSingle',\n config: {\n texture: art,\n },\n });\n }\n\n // spawn burst\n if (config.spawnType === 'burst') {\n out.behaviors.push({\n type: 'spawnBurst',\n config: {\n start: config.angleStart || 0,\n spacing: config.particleSpacing,\n // older formats bursted from a single point\n distance: 0,\n },\n });\n }\n // spawn point\n else if (config.spawnType === 'point') {\n out.behaviors.push({\n type: 'spawnPoint',\n config: {},\n });\n }\n // spawn shape\n else {\n let shape: any;\n\n if (config.spawnType === 'ring') {\n shape = {\n type: 'torus',\n data: {\n x: (config as any).spawnCircle.x,\n y: (config as any).spawnCircle.y,\n radius: (config as any).spawnCircle.r,\n innerRadius: (config as any).spawnCircle.minR,\n affectRotation: true,\n },\n };\n }\n else if (config.spawnType === 'circle') {\n shape = {\n type: 'torus',\n data: {\n x: (config as any).spawnCircle.x,\n y: (config as any).spawnCircle.y,\n radius: (config as any).spawnCircle.r,\n innerRadius: 0,\n affectRotation: false,\n },\n };\n }\n else if (config.spawnType === 'rect') {\n shape = {\n type: 'rect',\n data: config.spawnRect,\n };\n }\n else if (config.spawnType === 'polygonalChain') {\n shape = {\n type: 'polygonalChain',\n data: config.spawnPolygon,\n };\n }\n\n if (shape) {\n out.behaviors.push({\n type: 'spawnShape',\n config: shape,\n });\n }\n }\n\n return out;\n}\n\n/**\n * The obsolete emitter configuration format from version 3.0.0 of the library.\n * This type information is kept to make it easy to upgrade, but otherwise\n * configuration should be made as {@link EmitterConfigV3}.\n */\nexport interface EmitterConfigV2 {\n alpha?: ValueList<number>;\n speed?: ValueList<number>;\n minimumSpeedMultiplier?: number;\n maxSpeed?: number;\n acceleration?: { x: number; y: number };\n scale?: ValueList<number>;\n minimumScaleMultiplier?: number;\n color?: ValueList<string>;\n startRotation?: RandNumber;\n noRotation?: boolean;\n rotationSpeed?: RandNumber;\n rotationAcceleration?: number;\n lifetime: RandNumber;\n blendMode?: string;\n ease?: SimpleEase | EaseSegment[];\n extraData?: any;\n particlesPerWave?: number;\n /**\n * Really \"rect\"|\"circle\"|\"ring\"|\"burst\"|\"point\"|\"polygonalChain\", but that\n * tends to be too strict for random object creation.\n */\n spawnType?: string;\n spawnRect?: { x: number; y: number; w: number; h: number };\n spawnCircle?: { x: number; y: number; r: number; minR?: number };\n particleSpacing?: number;\n angleStart?: number;\n spawnPolygon?: PointData[] | PointData[][];\n frequency: number;\n spawnChance?: number;\n emitterLifetime?: number;\n maxParticles?: number;\n addAtBack?: boolean;\n pos: { x: number; y: number };\n emit?: boolean;\n autoUpdate?: boolean;\n orderedArt?: boolean;\n}\n\nexport interface BasicTweenable<T> {\n start: T;\n end: T;\n}\n\n/**\n * The obsolete emitter configuration format of the initial library release.\n * This type information is kept to maintain compatibility with the older particle tool, but otherwise\n * configuration should be made as {@link EmitterConfigV3}.\n */\nexport interface EmitterConfigV1 {\n alpha?: BasicTweenable<number>;\n speed?: BasicTweenable<number> & { minimumSpeedMultiplier?: number };\n maxSpeed?: number;\n acceleration?: { x: number; y: number };\n scale?: BasicTweenable<number> & { minimumScaleMultiplier?: number };\n color?: BasicTweenable<string>;\n startRotation?: RandNumber;\n noRotation?: boolean;\n rotationSpeed?: RandNumber;\n rotationAcceleration?: number;\n lifetime: RandNumber;\n blendMode?: string;\n ease?: SimpleEase | EaseSegment[];\n extraData?: any;\n particlesPerWave?: number;\n /**\n * Really \"rect\"|\"circle\"|\"ring\"|\"burst\"|\"point\"|\"polygonalChain\", but that\n * tends to be too strict for random object creation.\n */\n spawnType?: string;\n spawnRect?: { x: number; y: number; w: number; h: number };\n spawnCircle?: { x: number; y: number; r: number; minR?: number };\n particleSpacing?: number;\n angleStart?: number;\n spawnPolygon?: PointData[] | PointData[][];\n frequency: number;\n spawnChance?: number;\n emitterLifetime?: number;\n maxParticles?: number;\n addAtBack?: boolean;\n pos: { x: number; y: number };\n emit?: boolean;\n autoUpdate?: boolean;\n orderedArt?: boolean;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Container } from 'pixi.js';\nimport { Spine } from '@esotericsoftware/spine-pixi-v8';\nimport { LinkedListChild } from './LinkedListContainer';\n\n/**\n * A Spine-based particle. Uses a Spine animation instead of a Sprite texture.\n * Extends Container to hold the Spine instance.\n */\nexport class SpineParticle extends Container implements LinkedListChild {\n /**\n * The Spine instance for this particle.\n */\n public spine!: Spine;\n\n /**\n * The emitter that controls this particle.\n * Using any to avoid circular dependency with SpineEmitter.\n */\n public emitter: any;\n\n /**\n * The maximum lifetime of this particle, in seconds.\n */\n public maxLife: number;\n\n /**\n * The current age of the particle, in seconds.\n */\n public age: number;\n\n /**\n * The current age of the particle as a normalized value between 0 and 1.\n */\n public agePercent: number;\n\n /**\n * One divided by the max life of the particle, saved for slightly faster math.\n */\n public oneOverLife: number;\n\n /**\n * Reference to the next particle in the list.\n */\n public next: SpineParticle;\n\n /**\n * Reference to the previous particle in the list.\n */\n public prev: SpineParticle;\n\n public prevChild: LinkedListChild;\n public nextChild: LinkedListChild;\n\n /**\n * Static per-particle configuration for behaviors to use. Is not cleared when recycling.\n */\n public config: { [key: string]: any };\n\n /**\n * @param emitter The emitter that controls this particle.\n */\n constructor(emitter: any) {\n super();\n // Initialize LinkedListChild props\n this.prevChild = this.nextChild = null as any;\n\n this.emitter = emitter;\n this.config = {};\n this.maxLife = 0;\n this.age = 0;\n this.agePercent = 0;\n this.oneOverLife = 0;\n this.next = null as any;\n this.prev = null as any;\n\n // Save often used functions on the instance for better speed\n this.init = this.init as any;\n this.kill = this.kill as any;\n }\n\n /**\n * Sets the Spine instance for this particle.\n * Called by SpineEmitter when creating the particle.\n */\n public setSpine(spine: Spine): void {\n this.spine = spine;\n this.addChild(spine);\n }\n\n /**\n * Initializes the particle for use, based on the properties that have to\n * have been set already on the particle.\n */\n public init(maxLife: number): void {\n this.maxLife = maxLife;\n // Reset the age\n this.age = this.agePercent = 0;\n // Reset transform\n this.rotation = 0;\n this.position.x = this.position.y = 0;\n this.scale.x = this.scale.y = 1;\n this.alpha = 1;\n // Save our lerp helper\n this.oneOverLife = 1 / this.maxLife;\n\n // Ensure visibility\n this.visible = true;\n\n // Reset spine state if exists\n if (this.spine) {\n this.spine.state.clearTracks();\n this.spine.skeleton.setToSetupPose();\n }\n }\n\n /**\n * Kills the particle, removing it from the display list\n * and telling the emitter to recycle it.\n */\n public kill(): void {\n this.emitter.recycle(this as any);\n }\n\n /**\n * Destroys the particle, removing references and preventing future use.\n */\n public destroy(): void {\n if (this.parent) {\n this.parent.removeChild(this);\n }\n if (this.spine) {\n this.spine.destroy();\n }\n this.emitter = this.next = this.prev = null as any;\n super.destroy();\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Spine } from '@esotericsoftware/spine-pixi-v8';\nimport { Container } from 'pixi.js';\nimport { Emitter } from './Emitter';\nimport { EmitterConfigV3 } from './EmitterConfig';\nimport { SpineParticle } from './SpineParticle';\n\n/**\n * Configuration for SpineEmitter, extends standard EmitterConfigV3\n * Makes 'pos' optional since SpineEmitter can default to {x: 0, y: 0}\n */\nexport interface SpineEmitterConfig extends Omit<EmitterConfigV3, 'pos'> {\n /**\n * Spine data configuration\n */\n spineData: {\n /**\n * Skeleton asset key (without extension)\n */\n skeleton: string;\n /**\n * Atlas asset key (without extension)\n */\n atlas: string;\n };\n /**\n * Default position to spawn particles from inside the parent container.\n * Defaults to {x: 0, y: 0} if not provided.\n */\n pos?: { x: number; y: number };\n}\n\n/**\n * A particle emitter that uses Spine animations instead of sprite textures.\n * Each particle is a SpineParticle containing a Spine instance.\n * \n * Overrides createParticle() to create SpineParticle instances instead of\n * regular Particle (Sprite) instances.\n */\nexport class SpineEmitter extends Emitter {\n /**\n * Skeleton asset key for creating Spine instances\n */\n protected skeletonKey: string;\n\n /**\n * Atlas asset key for creating Spine instances\n */\n protected atlasKey: string;\n\n constructor(particleParent: Container, config: SpineEmitterConfig) {\n // Pass config to parent with default pos if not provided\n const fullConfig = {\n ...config,\n pos: config.pos ?? { x: 0, y: 0 },\n };\n super(particleParent, fullConfig as any);\n\n this.skeletonKey = '';\n this.atlasKey = '';\n\n // Store spine data\n if (config.spineData) {\n this.skeletonKey = config.spineData.skeleton;\n this.atlasKey = config.spineData.atlas;\n }\n }\n\n /**\n * Override createParticle to return SpineParticle instead of Particle.\n * This is called by the base Emitter when spawning new particles.\n * Returns any to satisfy base class signature while actually returning SpineParticle.\n */\n protected override createParticle(): any {\n const particle = new SpineParticle(this);\n const spine = Spine.from({\n skeleton: this.skeletonKey,\n atlas: this.atlasKey,\n });\n particle.setSpine(spine);\n return particle;\n }\n}\n","import { Emitter } from './Emitter';\nimport * as behaviors from './behaviors';\n\nEmitter.registerBehavior(behaviors.AccelerationBehavior);\nEmitter.registerBehavior(behaviors.AlphaBehavior);\nEmitter.registerBehavior(behaviors.StaticAlphaBehavior);\nEmitter.registerBehavior(behaviors.RandomAnimatedTextureBehavior);\nEmitter.registerBehavior(behaviors.SingleAnimatedTextureBehavior);\nEmitter.registerBehavior(behaviors.BlendModeBehavior);\nEmitter.registerBehavior(behaviors.BurstSpawnBehavior);\nEmitter.registerBehavior(behaviors.ColorBehavior);\nEmitter.registerBehavior(behaviors.StaticColorBehavior);\nEmitter.registerBehavior(behaviors.OrderedTextureBehavior);\nEmitter.registerBehavior(behaviors.PathBehavior);\nEmitter.registerBehavior(behaviors.PointSpawnBehavior);\nEmitter.registerBehavior(behaviors.RandomTextureBehavior);\nEmitter.registerBehavior(behaviors.RotationBehavior);\nEmitter.registerBehavior(behaviors.StaticRotationBehavior);\nEmitter.registerBehavior(behaviors.NoRotationBehavior);\nEmitter.registerBehavior(behaviors.ScaleBehavior);\nEmitter.registerBehavior(behaviors.StaticScaleBehavior);\nEmitter.registerBehavior(behaviors.ShapeSpawnBehavior);\nEmitter.registerBehavior(behaviors.SingleTextureBehavior);\nEmitter.registerBehavior(behaviors.SpeedBehavior);\nEmitter.registerBehavior(behaviors.StaticSpeedBehavior);\nEmitter.registerBehavior(behaviors.MultiStateAnimatedTextureBehavior);\nEmitter.registerBehavior(behaviors.ZIndexBehavior);\nEmitter.registerBehavior(behaviors.SpineAnimationBehavior);\nEmitter.registerBehavior(behaviors.SpineRandomSkinBehavior);\nEmitter.registerBehavior(behaviors.SpineAnimationSequenceBehavior);\n\nexport * as behaviors from './behaviors';\nexport * as ParticleUtils from './ParticleUtils';\nexport * from './Particle';\nexport * from './Emitter';\nexport * from './EmitterConfig';\nexport * from './PropertyList';\nexport * from './PropertyNode';\nexport * from './LinkedListContainer';\nexport * from './SpineParticle';\nexport * from './SpineEmitter';\n"]}
|