custom-pixi-particles 4.35.0 → 4.37.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 +113 -72
- package/dist/index.d.ts +4 -3
- package/dist/index.js +30 -33
- package/dist/index.js.map +1 -1
- package/dist/lib/Model.d.ts +46 -28
- package/dist/lib/Model.js +55 -37
- package/dist/lib/Model.js.map +1 -1
- package/dist/lib/Particle.d.ts +19 -28
- package/dist/lib/Particle.js +13 -7
- package/dist/lib/Particle.js.map +1 -1
- package/dist/lib/behaviour/AizawaAttractorBehaviour.d.ts +1 -1
- package/dist/lib/behaviour/AizawaAttractorBehaviour.js +2 -1
- package/dist/lib/behaviour/AizawaAttractorBehaviour.js.map +1 -1
- package/dist/lib/behaviour/AttractionRepulsionBehaviour.d.ts +1 -1
- package/dist/lib/behaviour/AttractionRepulsionBehaviour.js +2 -1
- package/dist/lib/behaviour/AttractionRepulsionBehaviour.js.map +1 -1
- package/dist/lib/behaviour/BehaviourNames.d.ts +8 -1
- package/dist/lib/behaviour/BehaviourNames.js +8 -1
- package/dist/lib/behaviour/BehaviourNames.js.map +1 -1
- package/dist/lib/behaviour/BoidsFlockingBehaviour.d.ts +11 -2
- package/dist/lib/behaviour/BoidsFlockingBehaviour.js +75 -9
- package/dist/lib/behaviour/BoidsFlockingBehaviour.js.map +1 -1
- package/dist/lib/behaviour/BounceBehaviour.d.ts +1 -1
- package/dist/lib/behaviour/BounceBehaviour.js +2 -1
- package/dist/lib/behaviour/BounceBehaviour.js.map +1 -1
- package/dist/lib/behaviour/CollisionBehaviour.d.ts +1 -1
- package/dist/lib/behaviour/CollisionBehaviour.js +2 -1
- package/dist/lib/behaviour/CollisionBehaviour.js.map +1 -1
- package/dist/lib/behaviour/ColorBehaviour.d.ts +51 -5
- package/dist/lib/behaviour/ColorBehaviour.js +239 -47
- package/dist/lib/behaviour/ColorBehaviour.js.map +1 -1
- package/dist/lib/behaviour/ColorCycleBehaviour.d.ts +25 -2
- package/dist/lib/behaviour/ColorCycleBehaviour.js +193 -12
- package/dist/lib/behaviour/ColorCycleBehaviour.js.map +1 -1
- package/dist/lib/behaviour/ConstrainToShapeBehaviour.d.ts +1 -1
- package/dist/lib/behaviour/ConstrainToShapeBehaviour.js +2 -1
- package/dist/lib/behaviour/ConstrainToShapeBehaviour.js.map +1 -1
- package/dist/lib/behaviour/ConversionCascadeBehaviour.d.ts +1 -1
- package/dist/lib/behaviour/ConversionCascadeBehaviour.js +2 -1
- package/dist/lib/behaviour/ConversionCascadeBehaviour.js.map +1 -1
- package/dist/lib/behaviour/CurvatureFlowBehaviour.d.ts +6 -2
- package/dist/lib/behaviour/CurvatureFlowBehaviour.js +27 -8
- package/dist/lib/behaviour/CurvatureFlowBehaviour.js.map +1 -1
- package/dist/lib/behaviour/EmitterBehaviours.d.ts +41 -2
- package/dist/lib/behaviour/EmitterBehaviours.js +404 -23
- package/dist/lib/behaviour/EmitterBehaviours.js.map +1 -1
- package/dist/lib/behaviour/FlickerBehaviour.d.ts +2 -2
- package/dist/lib/behaviour/FlickerBehaviour.js +2 -1
- package/dist/lib/behaviour/FlickerBehaviour.js.map +1 -1
- package/dist/lib/behaviour/FloatUpBehaviour.d.ts +1 -1
- package/dist/lib/behaviour/FloatUpBehaviour.js +2 -1
- package/dist/lib/behaviour/FloatUpBehaviour.js.map +1 -1
- package/dist/lib/behaviour/FlockingBehaviour.d.ts +12 -0
- package/dist/lib/behaviour/FlockingBehaviour.js +19 -0
- package/dist/lib/behaviour/FlockingBehaviour.js.map +1 -0
- package/dist/lib/behaviour/FlowFieldDriftBehaviour.d.ts +18 -0
- package/dist/lib/behaviour/FlowFieldDriftBehaviour.js +49 -0
- package/dist/lib/behaviour/FlowFieldDriftBehaviour.js.map +1 -0
- package/dist/lib/behaviour/ForceFieldsBehaviour.d.ts +1 -1
- package/dist/lib/behaviour/ForceFieldsBehaviour.js +2 -1
- package/dist/lib/behaviour/ForceFieldsBehaviour.js.map +1 -1
- package/dist/lib/behaviour/FormPatternBehaviour.d.ts +10 -1
- package/dist/lib/behaviour/FormPatternBehaviour.js +71 -6
- package/dist/lib/behaviour/FormPatternBehaviour.js.map +1 -1
- package/dist/lib/behaviour/GlitchBehaviour.d.ts +17 -0
- package/dist/lib/behaviour/GlitchBehaviour.js +44 -0
- package/dist/lib/behaviour/GlitchBehaviour.js.map +1 -0
- package/dist/lib/behaviour/GravityWellBehaviour.d.ts +1 -1
- package/dist/lib/behaviour/GravityWellBehaviour.js +2 -1
- package/dist/lib/behaviour/GravityWellBehaviour.js.map +1 -1
- package/dist/lib/behaviour/GroupingBehaviour.d.ts +1 -1
- package/dist/lib/behaviour/GroupingBehaviour.js +2 -1
- package/dist/lib/behaviour/GroupingBehaviour.js.map +1 -1
- package/dist/lib/behaviour/HomingBehaviour.d.ts +1 -1
- package/dist/lib/behaviour/HomingBehaviour.js +2 -1
- package/dist/lib/behaviour/HomingBehaviour.js.map +1 -1
- package/dist/lib/behaviour/IBehaviour.d.ts +1 -1
- package/dist/lib/behaviour/JacobianCurlFieldBehaviour.d.ts +1 -1
- package/dist/lib/behaviour/JacobianCurlFieldBehaviour.js +2 -1
- package/dist/lib/behaviour/JacobianCurlFieldBehaviour.js.map +1 -1
- package/dist/lib/behaviour/LifeBehaviour.d.ts +17 -1
- package/dist/lib/behaviour/LifeBehaviour.js +48 -4
- package/dist/lib/behaviour/LifeBehaviour.js.map +1 -1
- package/dist/lib/behaviour/LightEffectBehaviour.d.ts +1 -1
- package/dist/lib/behaviour/LightEffectBehaviour.js +2 -1
- package/dist/lib/behaviour/LightEffectBehaviour.js.map +1 -1
- package/dist/lib/behaviour/LimitCycleBehaviour.d.ts +1 -1
- package/dist/lib/behaviour/LimitCycleBehaviour.js +2 -1
- package/dist/lib/behaviour/LimitCycleBehaviour.js.map +1 -1
- package/dist/lib/behaviour/LissajousHarmonicLatticeBehaviour.d.ts +1 -1
- package/dist/lib/behaviour/LissajousHarmonicLatticeBehaviour.js +2 -1
- package/dist/lib/behaviour/LissajousHarmonicLatticeBehaviour.js.map +1 -1
- package/dist/lib/behaviour/MagnetBehaviour.d.ts +1 -1
- package/dist/lib/behaviour/MagnetBehaviour.js +2 -1
- package/dist/lib/behaviour/MagnetBehaviour.js.map +1 -1
- package/dist/lib/behaviour/MoveToPointBehaviour.d.ts +1 -1
- package/dist/lib/behaviour/MoveToPointBehaviour.js +2 -1
- package/dist/lib/behaviour/MoveToPointBehaviour.js.map +1 -1
- package/dist/lib/behaviour/NearMissDispersionBehaviour.d.ts +1 -1
- package/dist/lib/behaviour/NearMissDispersionBehaviour.js +2 -1
- package/dist/lib/behaviour/NearMissDispersionBehaviour.js.map +1 -1
- package/dist/lib/behaviour/NoiseBasedMotionBehaviour.d.ts +23 -0
- package/dist/lib/behaviour/NoiseBasedMotionBehaviour.js +85 -4
- package/dist/lib/behaviour/NoiseBasedMotionBehaviour.js.map +1 -1
- package/dist/lib/behaviour/OrbitBehaviour.d.ts +1 -1
- package/dist/lib/behaviour/OrbitBehaviour.js +2 -1
- package/dist/lib/behaviour/OrbitBehaviour.js.map +1 -1
- package/dist/lib/behaviour/PhaseCoherenceBehaviour.d.ts +11 -2
- package/dist/lib/behaviour/PhaseCoherenceBehaviour.js +71 -5
- package/dist/lib/behaviour/PhaseCoherenceBehaviour.js.map +1 -1
- package/dist/lib/behaviour/PhaseFieldFlowBehaviour.d.ts +1 -1
- package/dist/lib/behaviour/PhaseFieldFlowBehaviour.js +2 -1
- package/dist/lib/behaviour/PhaseFieldFlowBehaviour.js.map +1 -1
- package/dist/lib/behaviour/PointToPointBehaviour.d.ts +77 -0
- package/dist/lib/behaviour/PointToPointBehaviour.js +261 -0
- package/dist/lib/behaviour/PointToPointBehaviour.js.map +1 -0
- package/dist/lib/behaviour/PositionBehaviour.d.ts +18 -86
- package/dist/lib/behaviour/PositionBehaviour.js +118 -388
- package/dist/lib/behaviour/PositionBehaviour.js.map +1 -1
- package/dist/lib/behaviour/PredatorPreyBehaviour.d.ts +19 -0
- package/dist/lib/behaviour/PredatorPreyBehaviour.js +69 -0
- package/dist/lib/behaviour/PredatorPreyBehaviour.js.map +1 -0
- package/dist/lib/behaviour/ProximityStateBehaviour.d.ts +1 -1
- package/dist/lib/behaviour/ProximityStateBehaviour.js +2 -1
- package/dist/lib/behaviour/ProximityStateBehaviour.js.map +1 -1
- package/dist/lib/behaviour/ProximityTriggeredPhaseBehaviour.d.ts +1 -1
- package/dist/lib/behaviour/ProximityTriggeredPhaseBehaviour.js +2 -1
- package/dist/lib/behaviour/ProximityTriggeredPhaseBehaviour.js.map +1 -1
- package/dist/lib/behaviour/PulseBehaviour.d.ts +1 -1
- package/dist/lib/behaviour/PulseBehaviour.js +2 -1
- package/dist/lib/behaviour/PulseBehaviour.js.map +1 -1
- package/dist/lib/behaviour/RVOAvoidanceBehaviour.d.ts +11 -0
- package/dist/lib/behaviour/RVOAvoidanceBehaviour.js +71 -5
- package/dist/lib/behaviour/RVOAvoidanceBehaviour.js.map +1 -1
- package/dist/lib/behaviour/RecursiveFireworkBehaviour.d.ts +932 -0
- package/dist/lib/behaviour/RecursiveFireworkBehaviour.js +3034 -0
- package/dist/lib/behaviour/RecursiveFireworkBehaviour.js.map +1 -0
- package/dist/lib/behaviour/RippleBehaviour.d.ts +1 -1
- package/dist/lib/behaviour/RippleBehaviour.js +2 -1
- package/dist/lib/behaviour/RippleBehaviour.js.map +1 -1
- package/dist/lib/behaviour/RotationBehaviour.d.ts +1 -1
- package/dist/lib/behaviour/RotationBehaviour.js +2 -1
- package/dist/lib/behaviour/RotationBehaviour.js.map +1 -1
- package/dist/lib/behaviour/SizeBehaviour.d.ts +1 -1
- package/dist/lib/behaviour/SizeBehaviour.js +4 -1
- package/dist/lib/behaviour/SizeBehaviour.js.map +1 -1
- package/dist/lib/behaviour/SoundReactiveBehaviour.d.ts +6 -3
- package/dist/lib/behaviour/SoundReactiveBehaviour.js +58 -15
- package/dist/lib/behaviour/SoundReactiveBehaviour.js.map +1 -1
- package/dist/lib/behaviour/SpawnBehaviour.d.ts +17 -1
- package/dist/lib/behaviour/SpawnBehaviour.js +257 -69
- package/dist/lib/behaviour/SpawnBehaviour.js.map +1 -1
- package/dist/lib/behaviour/StretchBehaviour.d.ts +1 -1
- package/dist/lib/behaviour/StretchBehaviour.js +2 -1
- package/dist/lib/behaviour/StretchBehaviour.js.map +1 -1
- package/dist/lib/behaviour/SubEmitterBehaviour.js +1 -0
- package/dist/lib/behaviour/TemperatureBehaviour.d.ts +1 -1
- package/dist/lib/behaviour/TemperatureBehaviour.js +1 -1
- package/dist/lib/behaviour/TemperatureBehaviour.js.map +1 -1
- package/dist/lib/behaviour/TemperatureSimulationBehaviour.d.ts +4 -0
- package/dist/lib/behaviour/TemperatureSimulationBehaviour.js +8 -0
- package/dist/lib/behaviour/TemperatureSimulationBehaviour.js.map +1 -0
- package/dist/lib/behaviour/TimelineBehaviour.js +19 -0
- package/dist/lib/behaviour/TimelineBehaviour.js.map +1 -1
- package/dist/lib/behaviour/ToroidalFlowBehaviour.d.ts +1 -1
- package/dist/lib/behaviour/ToroidalFlowBehaviour.js +2 -1
- package/dist/lib/behaviour/ToroidalFlowBehaviour.js.map +1 -1
- package/dist/lib/behaviour/ToroidalWrapBehaviour.d.ts +1 -1
- package/dist/lib/behaviour/ToroidalWrapBehaviour.js +2 -1
- package/dist/lib/behaviour/ToroidalWrapBehaviour.js.map +1 -1
- package/dist/lib/behaviour/TrailBehaviour.d.ts +1 -1
- package/dist/lib/behaviour/TrailBehaviour.js +2 -1
- package/dist/lib/behaviour/TrailBehaviour.js.map +1 -1
- package/dist/lib/behaviour/TurbulenceBehaviour.d.ts +12 -1
- package/dist/lib/behaviour/TurbulenceBehaviour.js +147 -42
- package/dist/lib/behaviour/TurbulenceBehaviour.js.map +1 -1
- package/dist/lib/behaviour/VortexBehaviour.d.ts +1 -1
- package/dist/lib/behaviour/VortexBehaviour.js +2 -1
- package/dist/lib/behaviour/VortexBehaviour.js.map +1 -1
- package/dist/lib/behaviour/WarpBehaviour.d.ts +40 -0
- package/dist/lib/behaviour/WarpBehaviour.js +96 -0
- package/dist/lib/behaviour/WarpBehaviour.js.map +1 -0
- package/dist/lib/behaviour/WobbleBehaviour.d.ts +1 -1
- package/dist/lib/behaviour/WobbleBehaviour.js +2 -1
- package/dist/lib/behaviour/WobbleBehaviour.js.map +1 -1
- package/dist/lib/behaviour/index.d.ts +9 -2
- package/dist/lib/behaviour/index.js +9 -2
- package/dist/lib/behaviour/index.js.map +1 -1
- package/dist/lib/behaviour/spawnTypeCapabilities.d.ts +7 -0
- package/dist/lib/behaviour/spawnTypeCapabilities.js +28 -0
- package/dist/lib/behaviour/spawnTypeCapabilities.js.map +1 -0
- package/dist/lib/customPixiParticlesSettingsInterface.d.ts +1 -0
- package/dist/lib/emission/AbstractEmission.d.ts +5 -0
- package/dist/lib/emission/AbstractEmission.js +7 -0
- package/dist/lib/emission/AbstractEmission.js.map +1 -1
- package/dist/lib/emission/BurstScheduleEmission.d.ts +17 -0
- package/dist/lib/emission/BurstScheduleEmission.js +62 -0
- package/dist/lib/emission/BurstScheduleEmission.js.map +1 -0
- package/dist/lib/emission/CurveEmission.d.ts +21 -0
- package/dist/lib/emission/CurveEmission.js +105 -0
- package/dist/lib/emission/CurveEmission.js.map +1 -0
- package/dist/lib/emission/EmissionRegistry.d.ts +14 -0
- package/dist/lib/emission/EmissionRegistry.js +20 -0
- package/dist/lib/emission/EmissionRegistry.js.map +1 -0
- package/dist/lib/emission/EmissionTypes.d.ts +2 -0
- package/dist/lib/emission/EmissionTypes.js +2 -0
- package/dist/lib/emission/EmissionTypes.js.map +1 -1
- package/dist/lib/emission/PersistentFillEmission.d.ts +1 -0
- package/dist/lib/emission/PersistentFillEmission.js +4 -0
- package/dist/lib/emission/PersistentFillEmission.js.map +1 -1
- package/dist/lib/emission/RandomEmission.d.ts +5 -0
- package/dist/lib/emission/RandomEmission.js +24 -1
- package/dist/lib/emission/RandomEmission.js.map +1 -1
- package/dist/lib/emission/StandardEmission.d.ts +1 -0
- package/dist/lib/emission/StandardEmission.js +5 -0
- package/dist/lib/emission/StandardEmission.js.map +1 -1
- package/dist/lib/emission/UniformEmission.d.ts +1 -0
- package/dist/lib/emission/UniformEmission.js +6 -0
- package/dist/lib/emission/UniformEmission.js.map +1 -1
- package/dist/lib/emission/index.d.ts +4 -1
- package/dist/lib/emission/index.js +4 -1
- package/dist/lib/emission/index.js.map +1 -1
- package/dist/lib/emitter/Emitter.d.ts +17 -1
- package/dist/lib/emitter/Emitter.js +49 -28
- package/dist/lib/emitter/Emitter.js.map +1 -1
- package/dist/lib/inferParticleContainerFeatures.d.ts +26 -0
- package/dist/lib/inferParticleContainerFeatures.js +102 -0
- package/dist/lib/inferParticleContainerFeatures.js.map +1 -0
- package/dist/lib/parser/EmitterParser.d.ts +3 -1
- package/dist/lib/parser/EmitterParser.js +103 -10
- package/dist/lib/parser/EmitterParser.js.map +1 -1
- package/dist/lib/pixi/Renderer.d.ts +9 -2
- package/dist/lib/pixi/Renderer.js +144 -27
- package/dist/lib/pixi/Renderer.js.map +1 -1
- package/dist/lib/pixi/SpriteContainerRenderer.d.ts +161 -0
- package/dist/lib/pixi/SpriteContainerRenderer.js +953 -0
- package/dist/lib/pixi/SpriteContainerRenderer.js.map +1 -0
- package/dist/lib/pixi/TestRenderer.d.ts +13 -8
- package/dist/lib/pixi/TestRenderer.js +155 -53
- package/dist/lib/pixi/TestRenderer.js.map +1 -1
- package/dist/lib/pixi/particleLinkLayer.js +31 -7
- package/dist/lib/pixi/particleLinkLayer.js.map +1 -1
- package/dist/lib/util/spatialCellKey.d.ts +8 -0
- package/dist/lib/util/spatialCellKey.js +11 -0
- package/dist/lib/util/spatialCellKey.js.map +1 -0
- package/package.json +10 -7
- package/dist/lib/behaviour/Wireframe3DBehaviour.d.ts +0 -140
- package/dist/lib/behaviour/Wireframe3DBehaviour.js +0 -572
- package/dist/lib/behaviour/Wireframe3DBehaviour.js.map +0 -1
package/README.md
CHANGED
|
@@ -9,12 +9,15 @@
|
|
|
9
9
|
- [Installation](#️-installation)
|
|
10
10
|
- [Quick Start](#-quick-start)
|
|
11
11
|
- [API Reference](#-api-reference)
|
|
12
|
+
- [Textures: static, animated, and mixed](#textures-static-animated-and-mixed)
|
|
12
13
|
- [Configuration Guide](#-configuration-guide)
|
|
13
14
|
- [Emission Types](#emission-types)
|
|
14
15
|
- [Behaviours](#behaviours)
|
|
15
16
|
- [Examples](#-examples)
|
|
16
17
|
- [Performance Tips](#-performance-tips)
|
|
17
18
|
- [Troubleshooting](#-troubleshooting)
|
|
19
|
+
- [Common Use Cases](#-common-use-cases)
|
|
20
|
+
- [Best Practices](#-best-practices)
|
|
18
21
|
- [Special Effects](#special-effects)
|
|
19
22
|
- [Shatter Effect](#shatter-effect)
|
|
20
23
|
- [Dissolve Effect](#dissolve-effect)
|
|
@@ -30,6 +33,7 @@
|
|
|
30
33
|
- [Liquid Mercury Effect](#liquid-mercury-effect)
|
|
31
34
|
- [Versions Compatibility](#️-versions-compatibility)
|
|
32
35
|
- [Advanced Editor](#️-advanced-editor)
|
|
36
|
+
- [License](#-license)
|
|
33
37
|
- [Contributing](#-contributing)
|
|
34
38
|
|
|
35
39
|
---
|
|
@@ -45,8 +49,9 @@ If you find **custom-pixi-particles** useful and would like to support my work,
|
|
|
45
49
|
- **Simple API**: Effortlessly create particle emitters with minimal code.
|
|
46
50
|
- **Highly Configurable**: Adjust particle behavior, appearance, animation, and more.
|
|
47
51
|
- **Performance Optimized**: Handle thousands of particles with minimal performance overhead.
|
|
48
|
-
- **PIXI.js Compatibility**:
|
|
52
|
+
- **PIXI.js Compatibility**: Current releases target **PIXI.js v8**. For legacy **v5/v6** projects, use `custom-pixi-particles@4.x`.
|
|
49
53
|
- **Real-Time Customization**: Dynamically update textures, positions, configurations, and emitters on the fly.
|
|
54
|
+
- **Static and animated textures**: Use single-frame textures, frame sequences (`prefix00.png`, `prefix01.png`, …), or **mix both** per particle via `textureVariants` and optional `variantWeights`.
|
|
50
55
|
- **Shatter Effect**: Create dramatic sprite shattering effects with realistic physics and automatic cleanup.
|
|
51
56
|
|
|
52
57
|
---
|
|
@@ -64,17 +69,25 @@ Install via npm:
|
|
|
64
69
|
npm install custom-pixi-particles
|
|
65
70
|
```
|
|
66
71
|
|
|
67
|
-
|
|
72
|
+
This package targets modern PixiJS and includes `pixi.js` in its dependencies by default.
|
|
73
|
+
For legacy PixiJS v5/v6 compatibility, use `custom-pixi-particles@4.x` with `pixi.js-legacy`.
|
|
68
74
|
|
|
69
75
|
```bash
|
|
70
|
-
# For PIXI.js v8
|
|
71
|
-
npm install pixi.js
|
|
76
|
+
# For PIXI.js v8 (current)
|
|
77
|
+
npm install custom-pixi-particles pixi.js
|
|
72
78
|
|
|
73
|
-
# For PIXI.js
|
|
74
|
-
npm install pixi.js
|
|
79
|
+
# For PIXI.js v5/v6 (legacy line)
|
|
80
|
+
npm install custom-pixi-particles@4 pixi.js-legacy
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
If you need prebuilt browser bundles from this repo, run:
|
|
75
84
|
|
|
76
|
-
|
|
77
|
-
npm
|
|
85
|
+
```bash
|
|
86
|
+
npm run build
|
|
87
|
+
npm run build:browser:v8
|
|
88
|
+
# optional:
|
|
89
|
+
# npm run build:browser:v7
|
|
90
|
+
# npm run build:browser:v6
|
|
78
91
|
```
|
|
79
92
|
|
|
80
93
|
---
|
|
@@ -83,17 +96,22 @@ npm install pixi.js-legacy
|
|
|
83
96
|
|
|
84
97
|
### Import or Require
|
|
85
98
|
```javascript
|
|
86
|
-
//
|
|
87
|
-
import customPixiParticles from 'custom-pixi-particles'
|
|
99
|
+
// ES modules
|
|
100
|
+
import { customPixiParticles } from 'custom-pixi-particles'
|
|
88
101
|
|
|
89
102
|
// CommonJS
|
|
90
|
-
const customPixiParticles = require('custom-pixi-particles')
|
|
103
|
+
const { customPixiParticles } = require('custom-pixi-particles')
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
You can also import Pixi helpers directly from this package:
|
|
107
|
+
```javascript
|
|
108
|
+
import { Application, Assets } from 'custom-pixi-particles'
|
|
91
109
|
```
|
|
92
110
|
|
|
93
111
|
### Basic Example
|
|
94
112
|
```javascript
|
|
95
113
|
import { Application } from 'pixi.js'
|
|
96
|
-
import customPixiParticles from 'custom-pixi-particles'
|
|
114
|
+
import { customPixiParticles } from 'custom-pixi-particles'
|
|
97
115
|
|
|
98
116
|
// Create PIXI application
|
|
99
117
|
const app = new Application()
|
|
@@ -178,13 +196,10 @@ Initializes a particle emitter with the specified configuration.
|
|
|
178
196
|
|
|
179
197
|
```javascript
|
|
180
198
|
const particles = customPixiParticles.create({
|
|
181
|
-
textures: [String], // Array of particle texture paths
|
|
199
|
+
textures: [String], // Array of particle texture paths
|
|
182
200
|
emitterConfig: Object, // Configuration object for the emitter (see Configuration section)
|
|
183
201
|
animatedSpriteZeroPad: Number, // Zero-padding for animated sprite names (default: 2)
|
|
184
202
|
animatedSpriteIndexToStart: Number, // Initial frame index for animated sprites (default: 0)
|
|
185
|
-
animatedSprite: Boolean, // Enable animated sprite textures (default: false)
|
|
186
|
-
animatedSpriteFrameRate: Number, // Frame rate for animated sprites
|
|
187
|
-
animatedSpriteLoop: Boolean, // Loop animated sprites (default: true)
|
|
188
203
|
finishingTextures: [String], // Textures used for particle finishing animations
|
|
189
204
|
vertices: Boolean, // Use vertex mode for rendering (default: true)
|
|
190
205
|
position: Boolean, // Allow position-based behavior (default: true)
|
|
@@ -195,9 +210,13 @@ const particles = customPixiParticles.create({
|
|
|
195
210
|
maxFPS: Number, // Cap emitter update frequency (default: 60)
|
|
196
211
|
minFPS: Number, // Minimum FPS threshold (default: 30)
|
|
197
212
|
tickerSpeed: Number, // Speed of the PIXI ticker (default: 0.02)
|
|
213
|
+
particleLinks: Object, // Optional proximity-line mesh between particles
|
|
214
|
+
canvasSizeProvider: Function, // Optional callback returning { width, height } for canvas-aware bounds
|
|
198
215
|
})
|
|
199
216
|
```
|
|
200
217
|
|
|
218
|
+
`create(...)` returns a `Renderer`.
|
|
219
|
+
|
|
201
220
|
### Configuration Object Structure
|
|
202
221
|
|
|
203
222
|
The `emitterConfig` object contains all the settings for your particle system:
|
|
@@ -223,9 +242,73 @@ const emitterConfig = {
|
|
|
223
242
|
behaviours: [
|
|
224
243
|
// See Behaviours section for details
|
|
225
244
|
],
|
|
245
|
+
|
|
246
|
+
// Optional — see "Textures: static, animated, and mixed" below
|
|
247
|
+
// animatedSprite: { enabled: true, frameRate: 0.25, loop: true, randomFrameStart: false },
|
|
248
|
+
// textureVariants: [ /* mix static + animated */ ],
|
|
249
|
+
// variantWeights: [0.5, 0.5],
|
|
250
|
+
}
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
### Textures: static, animated, and mixed
|
|
254
|
+
|
|
255
|
+
Particle visuals come from the `textures` array you pass to `customPixiParticles.create({ textures, emitterConfig, ... })` **plus** texture-related fields on **`emitterConfig`**. All asset keys must be loaded with Pixi’s **`Assets`** (or equivalent) before particles spawn.
|
|
256
|
+
|
|
257
|
+
#### 1. Static textures only (default)
|
|
258
|
+
|
|
259
|
+
If animated sprites are **not** enabled, each entry in `textures` is treated as a **full texture id** (e.g. `'spark.png'`). Each new particle picks one at random.
|
|
260
|
+
|
|
261
|
+
```javascript
|
|
262
|
+
const textures = ['a.png', 'b.png', 'c.png']
|
|
263
|
+
// emitterConfig without animatedSprite.enabled / without textureVariants
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
#### 2. Animated sprites (legacy mode, all entries are sequences)
|
|
267
|
+
|
|
268
|
+
Set **`emitterConfig.animatedSprite.enabled: true`**. Then each string in `textures` is a **filename prefix** (no extension). The renderer loads consecutive frames:
|
|
269
|
+
|
|
270
|
+
`{prefix}{index}.png` — e.g. `fire00.png`, `fire01.png`, … until a frame is missing.
|
|
271
|
+
|
|
272
|
+
- **Padding**: use `animatedSpriteZeroPad` / `animatedSpriteIndexToStart` on `create({ ... })` (defaults: pad `2`, start index `0`). Per-sequence overrides exist on each `frames` variant when using `textureVariants` (below).
|
|
273
|
+
- **Playback**: `emitterConfig.animatedSprite` typically includes `frameRate`, `loop`, and optional `randomFrameStart` (see the live editor’s General → Animated sprite for the exact shape your JSON uses).
|
|
274
|
+
|
|
275
|
+
```javascript
|
|
276
|
+
customPixiParticles.create({
|
|
277
|
+
textures: ['explosion_', 'smoke_'], // two different frame sequences
|
|
278
|
+
animatedSpriteZeroPad: 2,
|
|
279
|
+
emitterConfig: {
|
|
280
|
+
animatedSprite: { enabled: true, frameRate: 0.25, loop: true },
|
|
281
|
+
// ...behaviours, emitController, etc.
|
|
282
|
+
},
|
|
283
|
+
})
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
#### 3. Mix static and animated (`textureVariants`)
|
|
287
|
+
|
|
288
|
+
For **some particles static and some animated**, set a non-empty **`emitterConfig.textureVariants`** array. Each item is either:
|
|
289
|
+
|
|
290
|
+
| Type | Meaning |
|
|
291
|
+
|------|--------|
|
|
292
|
+
| `{ type: 'staticRandom', textures: ['x.png', 'y.png'] }` | Pick one static texture at random for that variant. |
|
|
293
|
+
| `{ type: 'frames', prefix: 'boom_', frameRate?, loop?, randomFrameStart?, animatedSpriteZeroPad?, animatedSpriteIndexToStart? }` | Load `boom_00.png`, `boom_01.png`, … (PNG, same rules as legacy animated). |
|
|
294
|
+
|
|
295
|
+
Optional **`emitterConfig.variantWeights`**: same length as `textureVariants`, relative probabilities (normalized internally). If omitted, variants are equally likely.
|
|
296
|
+
|
|
297
|
+
```javascript
|
|
298
|
+
emitterConfig: {
|
|
299
|
+
textureVariants: [
|
|
300
|
+
{ type: 'staticRandom', textures: ['spark.png', 'glow.png'] },
|
|
301
|
+
{ type: 'frames', prefix: 'fire_', frameRate: 0.3, loop: true },
|
|
302
|
+
],
|
|
303
|
+
variantWeights: [0.6, 0.4], // 60% static pool, 40% fire_ sequence
|
|
304
|
+
// ...
|
|
226
305
|
}
|
|
227
306
|
```
|
|
228
307
|
|
|
308
|
+
When `textureVariants` is set, it **replaces** the simple “all static” / “all prefixes” derivation from `textures` alone. You still pass `textures` to `create()` for updates like `setTextures` / defaults where the code falls back to the legacy list.
|
|
309
|
+
|
|
310
|
+
**Note:** `finishingTextures` apply to **static** particles when a particle enters finishing state; animated display uses `AnimatedSprite` and does not swap to finishing textures the same way.
|
|
311
|
+
|
|
229
312
|
### Event Callbacks
|
|
230
313
|
Triggered when the particle animation completes.
|
|
231
314
|
```javascript
|
|
@@ -284,6 +367,10 @@ Refreshes the particle texture (e.g. after changing texture source).
|
|
|
284
367
|
```javascript
|
|
285
368
|
particles.updateTexture()
|
|
286
369
|
```
|
|
370
|
+
Updates particle-link settings at runtime.
|
|
371
|
+
```javascript
|
|
372
|
+
particles.setParticleLinks({ enabled: true, maxDistance: 100 })
|
|
373
|
+
```
|
|
287
374
|
|
|
288
375
|
### Position Updates
|
|
289
376
|
Dynamically adjust the emitter's position.
|
|
@@ -834,7 +921,7 @@ particles.emitter.behaviours.add(myCustomBehaviour)
|
|
|
834
921
|
// New and existing particles will use the new behaviour on the next update
|
|
835
922
|
```
|
|
836
923
|
|
|
837
|
-
**Extending built-in behaviours:**
|
|
924
|
+
**Extending built-in behaviours:** Core behaviour classes are exported directly from the package (for example `SpawnBehaviour`, `LifeBehaviour`, `PositionBehaviour`, `ColorBehaviour`, `SizeBehaviour`, `FormPatternBehaviour`, `ToroidalWrapBehaviour`, plus `Behaviour`, `BehaviourRegistry`, `EmitterBehaviours`, `BehaviourNames`). Advanced behaviours are available by name in emitter configs/editor presets; if you need class-level inheritance for one that is not exported at top-level, import from the package source in this repo.
|
|
838
925
|
|
|
839
926
|
**Replacing a built-in behaviour:** Register your class under the same name as a built-in (e.g. `SpawnBehaviour`) **before** creating the renderer or loading config. The registry is checked first, so your implementation is used instead. Use this for customizations like multiple trails on one shape, different trailing logic (e.g. CCV-style), or any variant of spawn/trail/position without changing the library.
|
|
840
927
|
|
|
@@ -928,7 +1015,7 @@ Defines where and how particles spawn. Supports multiple spawn types.
|
|
|
928
1015
|
- `Path` - Custom path defined by points
|
|
929
1016
|
- `Oval` - Elliptical distributions
|
|
930
1017
|
|
|
931
|
-
**Additional behaviours** (see the [editor](https://okuniewicz.eu/) for full documentation): Aizawa Attractor, Boids Flocking, Bounce, Color Cycle, Constrain To Shape, Conversion Cascade, Curvature Flow, Flicker, Float Up, Gravity Well, Homing, Jacobian Curl-Field, Lissajous Harmonic Lattice, Limit Cycle, Magnet, Near Miss Dispersion, Orbit, Phase Coherence, Phase Field Flow, Proximity State, Proximity Triggered Phase, Pulse, Ripple, Trail, Toroidal Flow, Vortex, Wobble.
|
|
1018
|
+
**Additional behaviours** (see the [editor](https://okuniewicz.eu/) for full documentation): Aizawa Attractor, Beat Phase Lock, Bezier Flow Tube, Boids Flocking, Bounce, Color Cycle, Constrain To Shape, Conversion Cascade, Curvature Flow, Damage Flash Ripple, Emitter Attractor Link, Flicker, Float Up, Form Pattern, Gravity Well, Homing, Jacobian Curl-Field, Kelvin Wake, Lissajous Harmonic Lattice, Limit Cycle, Magnet, Near Miss Dispersion, Obstacle SDF Steer, Orbit, Phase Coherence, Phase Field Flow, Proximity State, Proximity Triggered Phase, Pulse, Ripple, RVO Avoidance, Screen Space Flow Map, Shear Flow, Toroidal Wrap, Trail, Toroidal Flow, Vortex, Wobble.
|
|
932
1019
|
|
|
933
1020
|
#### Size Behaviour
|
|
934
1021
|
Controls particle size over time.
|
|
@@ -1193,60 +1280,6 @@ Moves particles toward specific points.
|
|
|
1193
1280
|
}
|
|
1194
1281
|
```
|
|
1195
1282
|
|
|
1196
|
-
#### Wireframe3D Behaviour
|
|
1197
|
-
Renders 3D wireframe shapes (cube, sphere, pyramid, torus, cylinder, etc.) with optional orbit, pulsate, path motion, dashed lines, and depth styling. When this behaviour is present, the emitter is wrapped in a container that provides a Graphics object for the wireframe; use it for 3D-style particle backdrops or decorative shapes.
|
|
1198
|
-
|
|
1199
|
-
```javascript
|
|
1200
|
-
{
|
|
1201
|
-
priority: 50,
|
|
1202
|
-
enabled: true,
|
|
1203
|
-
shapeType: 'cube', // 'cube' | 'sphere' | 'pyramid' | 'torus' | 'cylinder' | 'tetrahedron' | 'octahedron' | 'grid' | 'lattice' | 'custom'
|
|
1204
|
-
size: 100,
|
|
1205
|
-
rotationSpeedX: 0.5,
|
|
1206
|
-
rotationSpeedY: 0.3,
|
|
1207
|
-
rotationSpeedZ: 0.2,
|
|
1208
|
-
lineColor: 0xffffff,
|
|
1209
|
-
lineWidth: 1,
|
|
1210
|
-
perspective: 400,
|
|
1211
|
-
cameraZ: 500,
|
|
1212
|
-
depthStyle: 'none', // 'none' | 'fade' | 'thickness' | 'both'
|
|
1213
|
-
sortByDepth: false,
|
|
1214
|
-
orbitEnabled: false,
|
|
1215
|
-
orbitRadius: 50,
|
|
1216
|
-
orbitSpeed: 1,
|
|
1217
|
-
pulsateEnabled: false,
|
|
1218
|
-
pulsateMin: 80,
|
|
1219
|
-
pulsateMax: 120,
|
|
1220
|
-
pulsateSpeed: 2,
|
|
1221
|
-
pathType: 'none',
|
|
1222
|
-
pathSpeed: 1,
|
|
1223
|
-
pathScale: 50,
|
|
1224
|
-
dashedEnabled: false,
|
|
1225
|
-
dashLength: 10,
|
|
1226
|
-
gapLength: 5,
|
|
1227
|
-
colorOverTimeEnabled: false,
|
|
1228
|
-
colorOverTimeSpeed: 1,
|
|
1229
|
-
perVertexColor: false,
|
|
1230
|
-
noiseWobbleEnabled: false,
|
|
1231
|
-
noiseWobbleAmount: 10,
|
|
1232
|
-
noiseWobbleSpeed: 1,
|
|
1233
|
-
attractParticlesEnabled: false,
|
|
1234
|
-
attractStrength: 0,
|
|
1235
|
-
latticeSegmentsX: 4,
|
|
1236
|
-
latticeSegmentsY: 4,
|
|
1237
|
-
latticeSegmentsZ: 4,
|
|
1238
|
-
gridSegments: 4,
|
|
1239
|
-
torusInnerRadius: 0.5,
|
|
1240
|
-
cylinderHeight: 1,
|
|
1241
|
-
customVertices: [],
|
|
1242
|
-
customEdges: [],
|
|
1243
|
-
wireframes: [],
|
|
1244
|
-
name: 'Wireframe3DBehaviour',
|
|
1245
|
-
}
|
|
1246
|
-
```
|
|
1247
|
-
|
|
1248
|
-
---
|
|
1249
|
-
|
|
1250
1283
|
## 💡 Examples
|
|
1251
1284
|
|
|
1252
1285
|
### Fire Effect
|
|
@@ -1421,6 +1454,14 @@ const textConfig = {
|
|
|
1421
1454
|
5. **FPS Capping**: Use `maxFPS` and `minFPS` to control update frequency
|
|
1422
1455
|
6. **Batch Updates**: Update multiple emitters in a single frame when possible
|
|
1423
1456
|
7. **Clean Up**: Call `destroy()` and `clearPool()` when done with emitters
|
|
1457
|
+
8. **Runtime `behaviour.enabled` toggles**: If you flip `enabled` on an existing behaviour instance without re-running the emitter parser (add/remove), call `emitter.behaviours.invalidateEnabledApplySnapshot()` before particle simulation runs, or rely on the next full `emitter.update()` after toggling in the same frame as other code paths that only call `apply`/`init` without going through `update()`.
|
|
1458
|
+
|
|
1459
|
+
### Profiling checklist (Chrome / Chromium)
|
|
1460
|
+
|
|
1461
|
+
1. Open **Performance** (or **JavaScript Profiler**), record while your effect runs at target particle count.
|
|
1462
|
+
2. In the flame chart, look for **`Emitter.update`**, **`EmitterBehaviours.apply`**, and behaviour names in hot frames.
|
|
1463
|
+
3. Confirm **GC** time: high allocation rates often come from per-frame object creation outside this library; spatial grids here use numeric cell keys to avoid string churn on neighbor queries.
|
|
1464
|
+
4. Compare **GPU** vs **CPU**: if the bottleneck is upload/draw, reduce `ParticleContainer` feature flags (`rotation`, `tint`, `uvs`) and particle count before micro-optimizing simulation.
|
|
1424
1465
|
|
|
1425
1466
|
---
|
|
1426
1467
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import Renderer from './lib/pixi/Renderer';
|
|
2
|
+
import SpriteContainerRenderer from './lib/pixi/SpriteContainerRenderer';
|
|
2
3
|
import { ICustomPixiParticlesSettings } from './lib/customPixiParticlesSettingsInterface';
|
|
3
4
|
import TestRenderer from './lib/pixi/TestRenderer';
|
|
4
5
|
import { CrystallizeEffect, DissolveEffect, GhostEffect, GlitchEffect, GranularErosionEffect, LiquidMercuryEffect, MagneticAssemblyEffect, MetaballPass, MeltEffect, PixelSortEffect, PrismRefractionEffect, ShatterEffect, SlitScanEffect } from './lib/effects';
|
|
@@ -9,7 +10,7 @@ export type { IShatterEffectOptions, ShatterMode, IDissolveEffectOptions, Dissol
|
|
|
9
10
|
* @param {ICustomPixiParticlesSettings} settings The settings for the renderer
|
|
10
11
|
*/
|
|
11
12
|
declare const customPixiParticles: {
|
|
12
|
-
create(settings: ICustomPixiParticlesSettings):
|
|
13
|
+
create(settings: ICustomPixiParticlesSettings): Renderer | SpriteContainerRenderer;
|
|
13
14
|
};
|
|
14
15
|
declare const _customPixiParticlesEditorOnly: {
|
|
15
16
|
create(settings: ICustomPixiParticlesSettings): TestRenderer;
|
|
@@ -18,10 +19,10 @@ export type { TextureVariant, TextureVariantFrames, TextureVariantStaticRandom }
|
|
|
18
19
|
export type { IParticleLinkSettings } from './lib/pixi/particleLinkLayer';
|
|
19
20
|
export { drawParticleLinks, mergeParticleLinkSettings, PARTICLE_LINK_DEFAULTS, } from './lib/pixi/particleLinkLayer';
|
|
20
21
|
export type { IBehaviour } from './lib/behaviour';
|
|
21
|
-
export { Behaviour, BehaviourRegistry, EmitterBehaviours, SpawnBehaviour, LifeBehaviour, PositionBehaviour, ColorBehaviour, SizeBehaviour, AngularVelocityBehaviour, EmitDirectionBehaviour, RotationBehaviour, TurbulenceBehaviour, CollisionBehaviour, AttractionRepulsionBehaviour, NoiseBasedMotionBehaviour, ForceFieldsBehaviour, TimelineBehaviour, GroupingBehaviour, SoundReactiveBehaviour, LightEffectBehaviour, StretchBehaviour, TemperatureBehaviour, MoveToPointBehaviour, FormPatternBehaviour, type FormPatternMode, type FormPatternProgressMode, type FormPatternAssignmentMode, type FormPatternBakedPolylineMode, type FormPatternPathKind, type FormPatternSinePhaseMode, type FormPatternStaggerOrder, type FormPatternPathVarietySeedMode, type FormPatternVisualModulation,
|
|
22
|
+
export { Behaviour, BehaviourRegistry, EmitterBehaviours, SpawnBehaviour, LifeBehaviour, PositionBehaviour, WarpBehaviour, ColorBehaviour, SizeBehaviour, AngularVelocityBehaviour, EmitDirectionBehaviour, RotationBehaviour, TurbulenceBehaviour, CollisionBehaviour, AttractionRepulsionBehaviour, NoiseBasedMotionBehaviour, ForceFieldsBehaviour, TimelineBehaviour, GroupingBehaviour, SoundReactiveBehaviour, LightEffectBehaviour, StretchBehaviour, TemperatureBehaviour, MoveToPointBehaviour, FormPatternBehaviour, type FormPatternMode, type FormPatternProgressMode, type FormPatternAssignmentMode, type FormPatternBakedPolylineMode, type FormPatternPathKind, type FormPatternSinePhaseMode, type FormPatternStaggerOrder, type FormPatternPathVarietySeedMode, type FormPatternVisualModulation, ToroidalWrapBehaviour, BehaviourNames, } from './lib/behaviour';
|
|
23
|
+
export { EmissionRegistry, RandomEmission, StandardEmission, UniformEmission, PersistentFillEmission, BurstScheduleEmission, CurveEmission, EmissionTypes, } from './lib/emission';
|
|
22
24
|
export { rasterizeTextToPoints, buildPresetShape, matchPointsToCount, resampleToCount, flattenSvgPathToPoints, assignGreedyNearest, assignByPolarAngle, assignHungarian, hungarianMinAssignment, assignHungarianTargetIndices, assignGreedyNearestTargetIndices, assignByPolarAngleTargetIndices, sortTargetIndicesByAngle, blendMorphedPresets, rasterizeOpaquePixelsToPoints, rasterizeOpaquePixelsToPointsWithColors, matchSamplesToCount, sortPointsByAngle, shuffledIndices, seededUnit, extractSvgPathDFromMarkup, parseSvgViewBox, normalizePointsToBounds, replicatePointsByWeights, sampleMorphKeyframes, assignPathOrderTargetIndices, rasterizeOpaquePixelsToPointsWeighted, rasterizeOpaquePixelsToPointsWithColorsWeighted, } from './lib/util/formPatternSampling';
|
|
23
25
|
export type { PresetShapeType, PresetShapeParams, TextRasterMode, RasterizeTextOptions, PointRgb, MorphKeyframe, IParticleXYWithUid, } from './lib/util/formPatternSampling';
|
|
24
|
-
export { PersistentFillEmission } from './lib/emission';
|
|
25
26
|
export { PersistentWrapEmitter } from './lib/emitter';
|
|
26
27
|
export { Application, Loader } from 'pixi.js-legacy';
|
|
27
28
|
export { Renderer, customPixiParticles, _customPixiParticlesEditorOnly, ICustomPixiParticlesSettings, ShatterEffect, DissolveEffect, MagneticAssemblyEffect, GhostEffect, GlitchEffect, MeltEffect, PixelSortEffect, PrismRefractionEffect, CrystallizeEffect, SlitScanEffect, GranularErosionEffect, LiquidMercuryEffect, MetaballPass, };
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import Renderer from './lib/pixi/Renderer';
|
|
2
|
+
import SpriteContainerRenderer from './lib/pixi/SpriteContainerRenderer';
|
|
2
3
|
import TestRenderer from './lib/pixi/TestRenderer';
|
|
4
|
+
import { inferParticleContainerFeatures, preferSpriteParticlePathForTextures } from './lib/inferParticleContainerFeatures';
|
|
3
5
|
import { CrystallizeEffect, DissolveEffect, GhostEffect, GlitchEffect, GranularErosionEffect, LiquidMercuryEffect, MagneticAssemblyEffect, MetaballPass, MeltEffect, PixelSortEffect, PrismRefractionEffect, ShatterEffect, SlitScanEffect, } from './lib/effects';
|
|
4
|
-
import { Container, Graphics } from 'pixi.js-legacy';
|
|
5
6
|
/**
|
|
6
7
|
* Constructs a renderer for custom pixi particles
|
|
7
8
|
* @class Renderer
|
|
@@ -9,10 +10,18 @@ import { Container, Graphics } from 'pixi.js-legacy';
|
|
|
9
10
|
*/
|
|
10
11
|
const customPixiParticles = {
|
|
11
12
|
create(settings) {
|
|
12
|
-
var _a;
|
|
13
|
-
const { textures, emitterConfig, animatedSpriteZeroPad = 2, animatedSpriteIndexToStart = 0, finishingTextures = [],
|
|
14
|
-
const
|
|
15
|
-
const
|
|
13
|
+
var _a, _b, _c, _d, _e;
|
|
14
|
+
const { textures, emitterConfig, animatedSpriteZeroPad = 2, animatedSpriteIndexToStart = 0, finishingTextures = [], maxParticles = 10000, maxFPS = 60, minFPS = 30, tickerSpeed = 0.02, particleLinks, canvasSizeProvider, } = settings;
|
|
15
|
+
const texturesArr = Array.isArray(textures) ? textures : [];
|
|
16
|
+
const useSpritePath = preferSpriteParticlePathForTextures(texturesArr);
|
|
17
|
+
const inferred = inferParticleContainerFeatures(emitterConfig);
|
|
18
|
+
const vertices = (_a = settings.vertices) !== null && _a !== void 0 ? _a : inferred.vertices;
|
|
19
|
+
const position = (_b = settings.position) !== null && _b !== void 0 ? _b : inferred.position;
|
|
20
|
+
const rotation = (_c = settings.rotation) !== null && _c !== void 0 ? _c : inferred.rotation;
|
|
21
|
+
const uvs = (_d = settings.uvs) !== null && _d !== void 0 ? _d : inferred.uvs;
|
|
22
|
+
const tint = (_e = settings.tint) !== null && _e !== void 0 ? _e : inferred.tint;
|
|
23
|
+
const RendererCtor = useSpritePath ? SpriteContainerRenderer : Renderer;
|
|
24
|
+
const renderer = new RendererCtor({
|
|
16
25
|
textures,
|
|
17
26
|
animatedSpriteZeroPad,
|
|
18
27
|
animatedSpriteIndexToStart,
|
|
@@ -30,43 +39,31 @@ const customPixiParticles = {
|
|
|
30
39
|
particleLinks,
|
|
31
40
|
canvasSizeProvider,
|
|
32
41
|
});
|
|
33
|
-
if (hasWireframe) {
|
|
34
|
-
const graphics = new Graphics();
|
|
35
|
-
const container = new Container();
|
|
36
|
-
container.addChild(graphics);
|
|
37
|
-
container.addChild(renderer);
|
|
38
|
-
renderer.wireframeGraphics = graphics;
|
|
39
|
-
Object.defineProperty(container, 'emitter', { get: () => renderer.emitter });
|
|
40
|
-
container.updateConfig = (c) => renderer.updateConfig(c);
|
|
41
|
-
container.updatePosition = (p) => renderer.updatePosition(p);
|
|
42
|
-
container.play = () => renderer.play();
|
|
43
|
-
container.stop = () => renderer.stop();
|
|
44
|
-
container.stopImmediately = () => renderer.stopImmediately();
|
|
45
|
-
container.pause = (p) => renderer.pause(p);
|
|
46
|
-
container.resume = () => renderer.resume();
|
|
47
|
-
container.start = () => renderer.start();
|
|
48
|
-
container.setTickerSpeed = (s) => renderer.setTickerSpeed(s);
|
|
49
|
-
container.updateTexture = () => renderer.updateTexture();
|
|
50
|
-
container.setParticleLinks = (p) => renderer.setParticleLinks(p);
|
|
51
|
-
const origDestroy = container.destroy.bind(container);
|
|
52
|
-
container.destroy = () => {
|
|
53
|
-
renderer.destroy();
|
|
54
|
-
origDestroy();
|
|
55
|
-
};
|
|
56
|
-
return container;
|
|
57
|
-
}
|
|
58
42
|
return renderer;
|
|
59
43
|
},
|
|
60
44
|
};
|
|
61
45
|
const _customPixiParticlesEditorOnly = {
|
|
62
46
|
create(settings) {
|
|
63
|
-
|
|
47
|
+
var _a, _b, _c, _d, _e;
|
|
48
|
+
const { textures, emitterConfig, animatedSpriteZeroPad = 2, animatedSpriteIndexToStart = 0, finishingTextures = [], maxParticles = 10000, maxFPS = 60, minFPS = 60, tickerSpeed = 0.02, particleLinks, canvasSizeProvider, } = settings;
|
|
49
|
+
const inferred = inferParticleContainerFeatures(emitterConfig);
|
|
50
|
+
const vertices = (_a = settings.vertices) !== null && _a !== void 0 ? _a : inferred.vertices;
|
|
51
|
+
const position = (_b = settings.position) !== null && _b !== void 0 ? _b : inferred.position;
|
|
52
|
+
const rotation = (_c = settings.rotation) !== null && _c !== void 0 ? _c : inferred.rotation;
|
|
53
|
+
const uvs = (_d = settings.uvs) !== null && _d !== void 0 ? _d : inferred.uvs;
|
|
54
|
+
const tint = (_e = settings.tint) !== null && _e !== void 0 ? _e : inferred.tint;
|
|
64
55
|
return new TestRenderer({
|
|
65
56
|
textures,
|
|
66
57
|
animatedSpriteZeroPad,
|
|
67
58
|
animatedSpriteIndexToStart,
|
|
68
59
|
emitterConfig,
|
|
69
60
|
finishingTextures,
|
|
61
|
+
vertices,
|
|
62
|
+
position,
|
|
63
|
+
rotation,
|
|
64
|
+
uvs,
|
|
65
|
+
tint,
|
|
66
|
+
maxParticles,
|
|
70
67
|
maxFPS,
|
|
71
68
|
minFPS,
|
|
72
69
|
tickerSpeed,
|
|
@@ -76,9 +73,9 @@ const _customPixiParticlesEditorOnly = {
|
|
|
76
73
|
},
|
|
77
74
|
};
|
|
78
75
|
export { drawParticleLinks, mergeParticleLinkSettings, PARTICLE_LINK_DEFAULTS, } from './lib/pixi/particleLinkLayer';
|
|
79
|
-
export { Behaviour, BehaviourRegistry, EmitterBehaviours, SpawnBehaviour, LifeBehaviour, PositionBehaviour, ColorBehaviour, SizeBehaviour, AngularVelocityBehaviour, EmitDirectionBehaviour, RotationBehaviour, TurbulenceBehaviour, CollisionBehaviour, AttractionRepulsionBehaviour, NoiseBasedMotionBehaviour, ForceFieldsBehaviour, TimelineBehaviour, GroupingBehaviour, SoundReactiveBehaviour, LightEffectBehaviour, StretchBehaviour, TemperatureBehaviour, MoveToPointBehaviour, FormPatternBehaviour,
|
|
76
|
+
export { Behaviour, BehaviourRegistry, EmitterBehaviours, SpawnBehaviour, LifeBehaviour, PositionBehaviour, WarpBehaviour, ColorBehaviour, SizeBehaviour, AngularVelocityBehaviour, EmitDirectionBehaviour, RotationBehaviour, TurbulenceBehaviour, CollisionBehaviour, AttractionRepulsionBehaviour, NoiseBasedMotionBehaviour, ForceFieldsBehaviour, TimelineBehaviour, GroupingBehaviour, SoundReactiveBehaviour, LightEffectBehaviour, StretchBehaviour, TemperatureBehaviour, MoveToPointBehaviour, FormPatternBehaviour, ToroidalWrapBehaviour, BehaviourNames, } from './lib/behaviour';
|
|
77
|
+
export { EmissionRegistry, RandomEmission, StandardEmission, UniformEmission, PersistentFillEmission, BurstScheduleEmission, CurveEmission, EmissionTypes, } from './lib/emission';
|
|
80
78
|
export { rasterizeTextToPoints, buildPresetShape, matchPointsToCount, resampleToCount, flattenSvgPathToPoints, assignGreedyNearest, assignByPolarAngle, assignHungarian, hungarianMinAssignment, assignHungarianTargetIndices, assignGreedyNearestTargetIndices, assignByPolarAngleTargetIndices, sortTargetIndicesByAngle, blendMorphedPresets, rasterizeOpaquePixelsToPoints, rasterizeOpaquePixelsToPointsWithColors, matchSamplesToCount, sortPointsByAngle, shuffledIndices, seededUnit, extractSvgPathDFromMarkup, parseSvgViewBox, normalizePointsToBounds, replicatePointsByWeights, sampleMorphKeyframes, assignPathOrderTargetIndices, rasterizeOpaquePixelsToPointsWeighted, rasterizeOpaquePixelsToPointsWithColorsWeighted, } from './lib/util/formPatternSampling';
|
|
81
|
-
export { PersistentFillEmission } from './lib/emission';
|
|
82
79
|
export { PersistentWrapEmitter } from './lib/emitter';
|
|
83
80
|
// Re-export so demos can use one import (avoids loading Pixi twice)
|
|
84
81
|
export { Application, Loader } from 'pixi.js-legacy';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/Model.d.ts
CHANGED
|
@@ -1,4 +1,43 @@
|
|
|
1
1
|
export default class Model {
|
|
2
|
+
reactiveSignals: {
|
|
3
|
+
beat: number;
|
|
4
|
+
energy: number;
|
|
5
|
+
loudness: number;
|
|
6
|
+
onset: number;
|
|
7
|
+
flux: number;
|
|
8
|
+
lowBand: number;
|
|
9
|
+
midBand: number;
|
|
10
|
+
highBand: number;
|
|
11
|
+
pulsePhase: number;
|
|
12
|
+
beatPhase: number;
|
|
13
|
+
phase1x: number;
|
|
14
|
+
phase2x: number;
|
|
15
|
+
phase4x: number;
|
|
16
|
+
source: 'none' | 'soundReactive' | 'pulse' | 'beatPhaseLock' | 'mixed';
|
|
17
|
+
/** Optional debug info emitted by behaviours for UI/inspector overlays. */
|
|
18
|
+
debug?: any;
|
|
19
|
+
raw: {
|
|
20
|
+
soundReactive: {
|
|
21
|
+
energy: number;
|
|
22
|
+
lowBand: number;
|
|
23
|
+
midBand: number;
|
|
24
|
+
highBand: number;
|
|
25
|
+
beat: number;
|
|
26
|
+
};
|
|
27
|
+
pulse: {
|
|
28
|
+
energy: number;
|
|
29
|
+
pulsePhase: number;
|
|
30
|
+
};
|
|
31
|
+
beatPhaseLock: {
|
|
32
|
+
beat: number;
|
|
33
|
+
beatPhase: number;
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Runtime emitter reference used by advanced behaviours that spawn child particles.
|
|
39
|
+
*/
|
|
40
|
+
emitter: any;
|
|
2
41
|
/**
|
|
3
42
|
* Refreshed each frame by Renderer/TestRenderer when ToroidalWrapBehaviour uses canvas bounds.
|
|
4
43
|
* Particle space origin at emitter center; half-width = width/2 (matches Pixi render buffer).
|
|
@@ -10,36 +49,15 @@ export default class Model {
|
|
|
10
49
|
maxY: number;
|
|
11
50
|
} | null;
|
|
12
51
|
/**
|
|
13
|
-
*
|
|
52
|
+
* Last pointer position in particle space (same coordinates as SpawnBehaviour custom points).
|
|
53
|
+
* Updated by Renderer.updatePosition when the host passes cursor/follow-mouse updates.
|
|
14
54
|
*/
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
cameraZ: number;
|
|
20
|
-
/**
|
|
21
|
-
* The conversion rate for cameraZ
|
|
22
|
-
*/
|
|
23
|
-
cameraZConverter: number;
|
|
24
|
-
/**
|
|
25
|
-
* The speed of warp
|
|
26
|
-
*/
|
|
27
|
-
warpSpeed: number;
|
|
28
|
-
/**
|
|
29
|
-
* The base speed of warp
|
|
30
|
-
*/
|
|
31
|
-
warpBaseSpeed: number;
|
|
32
|
-
/**
|
|
33
|
-
* Update the model with the behaviour object
|
|
34
|
-
* @param {Object} behaviour - The behaviour object
|
|
35
|
-
*/
|
|
36
|
-
update(behaviour: any): void;
|
|
37
|
-
/**
|
|
38
|
-
* Update the camera position based on the delta time
|
|
39
|
-
* @param {number} deltaTime - The delta time
|
|
40
|
-
*/
|
|
41
|
-
updateCamera(deltaTime: number): void;
|
|
55
|
+
pointerWorld: {
|
|
56
|
+
x: number;
|
|
57
|
+
y: number;
|
|
58
|
+
} | null;
|
|
42
59
|
/** Sets {@link toroidalCanvasBounds} from render buffer size (centered rect). */
|
|
43
60
|
setToroidalCanvasBoundsFromSize(width: number, height: number): void;
|
|
44
61
|
clearToroidalCanvasBounds(): void;
|
|
62
|
+
resetReactiveSignals(): void;
|
|
45
63
|
}
|