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.
Files changed (249) hide show
  1. package/README.md +113 -72
  2. package/dist/index.d.ts +4 -3
  3. package/dist/index.js +30 -33
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/Model.d.ts +46 -28
  6. package/dist/lib/Model.js +55 -37
  7. package/dist/lib/Model.js.map +1 -1
  8. package/dist/lib/Particle.d.ts +19 -28
  9. package/dist/lib/Particle.js +13 -7
  10. package/dist/lib/Particle.js.map +1 -1
  11. package/dist/lib/behaviour/AizawaAttractorBehaviour.d.ts +1 -1
  12. package/dist/lib/behaviour/AizawaAttractorBehaviour.js +2 -1
  13. package/dist/lib/behaviour/AizawaAttractorBehaviour.js.map +1 -1
  14. package/dist/lib/behaviour/AttractionRepulsionBehaviour.d.ts +1 -1
  15. package/dist/lib/behaviour/AttractionRepulsionBehaviour.js +2 -1
  16. package/dist/lib/behaviour/AttractionRepulsionBehaviour.js.map +1 -1
  17. package/dist/lib/behaviour/BehaviourNames.d.ts +8 -1
  18. package/dist/lib/behaviour/BehaviourNames.js +8 -1
  19. package/dist/lib/behaviour/BehaviourNames.js.map +1 -1
  20. package/dist/lib/behaviour/BoidsFlockingBehaviour.d.ts +11 -2
  21. package/dist/lib/behaviour/BoidsFlockingBehaviour.js +75 -9
  22. package/dist/lib/behaviour/BoidsFlockingBehaviour.js.map +1 -1
  23. package/dist/lib/behaviour/BounceBehaviour.d.ts +1 -1
  24. package/dist/lib/behaviour/BounceBehaviour.js +2 -1
  25. package/dist/lib/behaviour/BounceBehaviour.js.map +1 -1
  26. package/dist/lib/behaviour/CollisionBehaviour.d.ts +1 -1
  27. package/dist/lib/behaviour/CollisionBehaviour.js +2 -1
  28. package/dist/lib/behaviour/CollisionBehaviour.js.map +1 -1
  29. package/dist/lib/behaviour/ColorBehaviour.d.ts +51 -5
  30. package/dist/lib/behaviour/ColorBehaviour.js +239 -47
  31. package/dist/lib/behaviour/ColorBehaviour.js.map +1 -1
  32. package/dist/lib/behaviour/ColorCycleBehaviour.d.ts +25 -2
  33. package/dist/lib/behaviour/ColorCycleBehaviour.js +193 -12
  34. package/dist/lib/behaviour/ColorCycleBehaviour.js.map +1 -1
  35. package/dist/lib/behaviour/ConstrainToShapeBehaviour.d.ts +1 -1
  36. package/dist/lib/behaviour/ConstrainToShapeBehaviour.js +2 -1
  37. package/dist/lib/behaviour/ConstrainToShapeBehaviour.js.map +1 -1
  38. package/dist/lib/behaviour/ConversionCascadeBehaviour.d.ts +1 -1
  39. package/dist/lib/behaviour/ConversionCascadeBehaviour.js +2 -1
  40. package/dist/lib/behaviour/ConversionCascadeBehaviour.js.map +1 -1
  41. package/dist/lib/behaviour/CurvatureFlowBehaviour.d.ts +6 -2
  42. package/dist/lib/behaviour/CurvatureFlowBehaviour.js +27 -8
  43. package/dist/lib/behaviour/CurvatureFlowBehaviour.js.map +1 -1
  44. package/dist/lib/behaviour/EmitterBehaviours.d.ts +41 -2
  45. package/dist/lib/behaviour/EmitterBehaviours.js +404 -23
  46. package/dist/lib/behaviour/EmitterBehaviours.js.map +1 -1
  47. package/dist/lib/behaviour/FlickerBehaviour.d.ts +2 -2
  48. package/dist/lib/behaviour/FlickerBehaviour.js +2 -1
  49. package/dist/lib/behaviour/FlickerBehaviour.js.map +1 -1
  50. package/dist/lib/behaviour/FloatUpBehaviour.d.ts +1 -1
  51. package/dist/lib/behaviour/FloatUpBehaviour.js +2 -1
  52. package/dist/lib/behaviour/FloatUpBehaviour.js.map +1 -1
  53. package/dist/lib/behaviour/FlockingBehaviour.d.ts +12 -0
  54. package/dist/lib/behaviour/FlockingBehaviour.js +19 -0
  55. package/dist/lib/behaviour/FlockingBehaviour.js.map +1 -0
  56. package/dist/lib/behaviour/FlowFieldDriftBehaviour.d.ts +18 -0
  57. package/dist/lib/behaviour/FlowFieldDriftBehaviour.js +49 -0
  58. package/dist/lib/behaviour/FlowFieldDriftBehaviour.js.map +1 -0
  59. package/dist/lib/behaviour/ForceFieldsBehaviour.d.ts +1 -1
  60. package/dist/lib/behaviour/ForceFieldsBehaviour.js +2 -1
  61. package/dist/lib/behaviour/ForceFieldsBehaviour.js.map +1 -1
  62. package/dist/lib/behaviour/FormPatternBehaviour.d.ts +10 -1
  63. package/dist/lib/behaviour/FormPatternBehaviour.js +71 -6
  64. package/dist/lib/behaviour/FormPatternBehaviour.js.map +1 -1
  65. package/dist/lib/behaviour/GlitchBehaviour.d.ts +17 -0
  66. package/dist/lib/behaviour/GlitchBehaviour.js +44 -0
  67. package/dist/lib/behaviour/GlitchBehaviour.js.map +1 -0
  68. package/dist/lib/behaviour/GravityWellBehaviour.d.ts +1 -1
  69. package/dist/lib/behaviour/GravityWellBehaviour.js +2 -1
  70. package/dist/lib/behaviour/GravityWellBehaviour.js.map +1 -1
  71. package/dist/lib/behaviour/GroupingBehaviour.d.ts +1 -1
  72. package/dist/lib/behaviour/GroupingBehaviour.js +2 -1
  73. package/dist/lib/behaviour/GroupingBehaviour.js.map +1 -1
  74. package/dist/lib/behaviour/HomingBehaviour.d.ts +1 -1
  75. package/dist/lib/behaviour/HomingBehaviour.js +2 -1
  76. package/dist/lib/behaviour/HomingBehaviour.js.map +1 -1
  77. package/dist/lib/behaviour/IBehaviour.d.ts +1 -1
  78. package/dist/lib/behaviour/JacobianCurlFieldBehaviour.d.ts +1 -1
  79. package/dist/lib/behaviour/JacobianCurlFieldBehaviour.js +2 -1
  80. package/dist/lib/behaviour/JacobianCurlFieldBehaviour.js.map +1 -1
  81. package/dist/lib/behaviour/LifeBehaviour.d.ts +17 -1
  82. package/dist/lib/behaviour/LifeBehaviour.js +48 -4
  83. package/dist/lib/behaviour/LifeBehaviour.js.map +1 -1
  84. package/dist/lib/behaviour/LightEffectBehaviour.d.ts +1 -1
  85. package/dist/lib/behaviour/LightEffectBehaviour.js +2 -1
  86. package/dist/lib/behaviour/LightEffectBehaviour.js.map +1 -1
  87. package/dist/lib/behaviour/LimitCycleBehaviour.d.ts +1 -1
  88. package/dist/lib/behaviour/LimitCycleBehaviour.js +2 -1
  89. package/dist/lib/behaviour/LimitCycleBehaviour.js.map +1 -1
  90. package/dist/lib/behaviour/LissajousHarmonicLatticeBehaviour.d.ts +1 -1
  91. package/dist/lib/behaviour/LissajousHarmonicLatticeBehaviour.js +2 -1
  92. package/dist/lib/behaviour/LissajousHarmonicLatticeBehaviour.js.map +1 -1
  93. package/dist/lib/behaviour/MagnetBehaviour.d.ts +1 -1
  94. package/dist/lib/behaviour/MagnetBehaviour.js +2 -1
  95. package/dist/lib/behaviour/MagnetBehaviour.js.map +1 -1
  96. package/dist/lib/behaviour/MoveToPointBehaviour.d.ts +1 -1
  97. package/dist/lib/behaviour/MoveToPointBehaviour.js +2 -1
  98. package/dist/lib/behaviour/MoveToPointBehaviour.js.map +1 -1
  99. package/dist/lib/behaviour/NearMissDispersionBehaviour.d.ts +1 -1
  100. package/dist/lib/behaviour/NearMissDispersionBehaviour.js +2 -1
  101. package/dist/lib/behaviour/NearMissDispersionBehaviour.js.map +1 -1
  102. package/dist/lib/behaviour/NoiseBasedMotionBehaviour.d.ts +23 -0
  103. package/dist/lib/behaviour/NoiseBasedMotionBehaviour.js +85 -4
  104. package/dist/lib/behaviour/NoiseBasedMotionBehaviour.js.map +1 -1
  105. package/dist/lib/behaviour/OrbitBehaviour.d.ts +1 -1
  106. package/dist/lib/behaviour/OrbitBehaviour.js +2 -1
  107. package/dist/lib/behaviour/OrbitBehaviour.js.map +1 -1
  108. package/dist/lib/behaviour/PhaseCoherenceBehaviour.d.ts +11 -2
  109. package/dist/lib/behaviour/PhaseCoherenceBehaviour.js +71 -5
  110. package/dist/lib/behaviour/PhaseCoherenceBehaviour.js.map +1 -1
  111. package/dist/lib/behaviour/PhaseFieldFlowBehaviour.d.ts +1 -1
  112. package/dist/lib/behaviour/PhaseFieldFlowBehaviour.js +2 -1
  113. package/dist/lib/behaviour/PhaseFieldFlowBehaviour.js.map +1 -1
  114. package/dist/lib/behaviour/PointToPointBehaviour.d.ts +77 -0
  115. package/dist/lib/behaviour/PointToPointBehaviour.js +261 -0
  116. package/dist/lib/behaviour/PointToPointBehaviour.js.map +1 -0
  117. package/dist/lib/behaviour/PositionBehaviour.d.ts +18 -86
  118. package/dist/lib/behaviour/PositionBehaviour.js +118 -388
  119. package/dist/lib/behaviour/PositionBehaviour.js.map +1 -1
  120. package/dist/lib/behaviour/PredatorPreyBehaviour.d.ts +19 -0
  121. package/dist/lib/behaviour/PredatorPreyBehaviour.js +69 -0
  122. package/dist/lib/behaviour/PredatorPreyBehaviour.js.map +1 -0
  123. package/dist/lib/behaviour/ProximityStateBehaviour.d.ts +1 -1
  124. package/dist/lib/behaviour/ProximityStateBehaviour.js +2 -1
  125. package/dist/lib/behaviour/ProximityStateBehaviour.js.map +1 -1
  126. package/dist/lib/behaviour/ProximityTriggeredPhaseBehaviour.d.ts +1 -1
  127. package/dist/lib/behaviour/ProximityTriggeredPhaseBehaviour.js +2 -1
  128. package/dist/lib/behaviour/ProximityTriggeredPhaseBehaviour.js.map +1 -1
  129. package/dist/lib/behaviour/PulseBehaviour.d.ts +1 -1
  130. package/dist/lib/behaviour/PulseBehaviour.js +2 -1
  131. package/dist/lib/behaviour/PulseBehaviour.js.map +1 -1
  132. package/dist/lib/behaviour/RVOAvoidanceBehaviour.d.ts +11 -0
  133. package/dist/lib/behaviour/RVOAvoidanceBehaviour.js +71 -5
  134. package/dist/lib/behaviour/RVOAvoidanceBehaviour.js.map +1 -1
  135. package/dist/lib/behaviour/RecursiveFireworkBehaviour.d.ts +932 -0
  136. package/dist/lib/behaviour/RecursiveFireworkBehaviour.js +3034 -0
  137. package/dist/lib/behaviour/RecursiveFireworkBehaviour.js.map +1 -0
  138. package/dist/lib/behaviour/RippleBehaviour.d.ts +1 -1
  139. package/dist/lib/behaviour/RippleBehaviour.js +2 -1
  140. package/dist/lib/behaviour/RippleBehaviour.js.map +1 -1
  141. package/dist/lib/behaviour/RotationBehaviour.d.ts +1 -1
  142. package/dist/lib/behaviour/RotationBehaviour.js +2 -1
  143. package/dist/lib/behaviour/RotationBehaviour.js.map +1 -1
  144. package/dist/lib/behaviour/SizeBehaviour.d.ts +1 -1
  145. package/dist/lib/behaviour/SizeBehaviour.js +4 -1
  146. package/dist/lib/behaviour/SizeBehaviour.js.map +1 -1
  147. package/dist/lib/behaviour/SoundReactiveBehaviour.d.ts +6 -3
  148. package/dist/lib/behaviour/SoundReactiveBehaviour.js +58 -15
  149. package/dist/lib/behaviour/SoundReactiveBehaviour.js.map +1 -1
  150. package/dist/lib/behaviour/SpawnBehaviour.d.ts +17 -1
  151. package/dist/lib/behaviour/SpawnBehaviour.js +257 -69
  152. package/dist/lib/behaviour/SpawnBehaviour.js.map +1 -1
  153. package/dist/lib/behaviour/StretchBehaviour.d.ts +1 -1
  154. package/dist/lib/behaviour/StretchBehaviour.js +2 -1
  155. package/dist/lib/behaviour/StretchBehaviour.js.map +1 -1
  156. package/dist/lib/behaviour/SubEmitterBehaviour.js +1 -0
  157. package/dist/lib/behaviour/TemperatureBehaviour.d.ts +1 -1
  158. package/dist/lib/behaviour/TemperatureBehaviour.js +1 -1
  159. package/dist/lib/behaviour/TemperatureBehaviour.js.map +1 -1
  160. package/dist/lib/behaviour/TemperatureSimulationBehaviour.d.ts +4 -0
  161. package/dist/lib/behaviour/TemperatureSimulationBehaviour.js +8 -0
  162. package/dist/lib/behaviour/TemperatureSimulationBehaviour.js.map +1 -0
  163. package/dist/lib/behaviour/TimelineBehaviour.js +19 -0
  164. package/dist/lib/behaviour/TimelineBehaviour.js.map +1 -1
  165. package/dist/lib/behaviour/ToroidalFlowBehaviour.d.ts +1 -1
  166. package/dist/lib/behaviour/ToroidalFlowBehaviour.js +2 -1
  167. package/dist/lib/behaviour/ToroidalFlowBehaviour.js.map +1 -1
  168. package/dist/lib/behaviour/ToroidalWrapBehaviour.d.ts +1 -1
  169. package/dist/lib/behaviour/ToroidalWrapBehaviour.js +2 -1
  170. package/dist/lib/behaviour/ToroidalWrapBehaviour.js.map +1 -1
  171. package/dist/lib/behaviour/TrailBehaviour.d.ts +1 -1
  172. package/dist/lib/behaviour/TrailBehaviour.js +2 -1
  173. package/dist/lib/behaviour/TrailBehaviour.js.map +1 -1
  174. package/dist/lib/behaviour/TurbulenceBehaviour.d.ts +12 -1
  175. package/dist/lib/behaviour/TurbulenceBehaviour.js +147 -42
  176. package/dist/lib/behaviour/TurbulenceBehaviour.js.map +1 -1
  177. package/dist/lib/behaviour/VortexBehaviour.d.ts +1 -1
  178. package/dist/lib/behaviour/VortexBehaviour.js +2 -1
  179. package/dist/lib/behaviour/VortexBehaviour.js.map +1 -1
  180. package/dist/lib/behaviour/WarpBehaviour.d.ts +40 -0
  181. package/dist/lib/behaviour/WarpBehaviour.js +96 -0
  182. package/dist/lib/behaviour/WarpBehaviour.js.map +1 -0
  183. package/dist/lib/behaviour/WobbleBehaviour.d.ts +1 -1
  184. package/dist/lib/behaviour/WobbleBehaviour.js +2 -1
  185. package/dist/lib/behaviour/WobbleBehaviour.js.map +1 -1
  186. package/dist/lib/behaviour/index.d.ts +9 -2
  187. package/dist/lib/behaviour/index.js +9 -2
  188. package/dist/lib/behaviour/index.js.map +1 -1
  189. package/dist/lib/behaviour/spawnTypeCapabilities.d.ts +7 -0
  190. package/dist/lib/behaviour/spawnTypeCapabilities.js +28 -0
  191. package/dist/lib/behaviour/spawnTypeCapabilities.js.map +1 -0
  192. package/dist/lib/customPixiParticlesSettingsInterface.d.ts +1 -0
  193. package/dist/lib/emission/AbstractEmission.d.ts +5 -0
  194. package/dist/lib/emission/AbstractEmission.js +7 -0
  195. package/dist/lib/emission/AbstractEmission.js.map +1 -1
  196. package/dist/lib/emission/BurstScheduleEmission.d.ts +17 -0
  197. package/dist/lib/emission/BurstScheduleEmission.js +62 -0
  198. package/dist/lib/emission/BurstScheduleEmission.js.map +1 -0
  199. package/dist/lib/emission/CurveEmission.d.ts +21 -0
  200. package/dist/lib/emission/CurveEmission.js +105 -0
  201. package/dist/lib/emission/CurveEmission.js.map +1 -0
  202. package/dist/lib/emission/EmissionRegistry.d.ts +14 -0
  203. package/dist/lib/emission/EmissionRegistry.js +20 -0
  204. package/dist/lib/emission/EmissionRegistry.js.map +1 -0
  205. package/dist/lib/emission/EmissionTypes.d.ts +2 -0
  206. package/dist/lib/emission/EmissionTypes.js +2 -0
  207. package/dist/lib/emission/EmissionTypes.js.map +1 -1
  208. package/dist/lib/emission/PersistentFillEmission.d.ts +1 -0
  209. package/dist/lib/emission/PersistentFillEmission.js +4 -0
  210. package/dist/lib/emission/PersistentFillEmission.js.map +1 -1
  211. package/dist/lib/emission/RandomEmission.d.ts +5 -0
  212. package/dist/lib/emission/RandomEmission.js +24 -1
  213. package/dist/lib/emission/RandomEmission.js.map +1 -1
  214. package/dist/lib/emission/StandardEmission.d.ts +1 -0
  215. package/dist/lib/emission/StandardEmission.js +5 -0
  216. package/dist/lib/emission/StandardEmission.js.map +1 -1
  217. package/dist/lib/emission/UniformEmission.d.ts +1 -0
  218. package/dist/lib/emission/UniformEmission.js +6 -0
  219. package/dist/lib/emission/UniformEmission.js.map +1 -1
  220. package/dist/lib/emission/index.d.ts +4 -1
  221. package/dist/lib/emission/index.js +4 -1
  222. package/dist/lib/emission/index.js.map +1 -1
  223. package/dist/lib/emitter/Emitter.d.ts +17 -1
  224. package/dist/lib/emitter/Emitter.js +49 -28
  225. package/dist/lib/emitter/Emitter.js.map +1 -1
  226. package/dist/lib/inferParticleContainerFeatures.d.ts +26 -0
  227. package/dist/lib/inferParticleContainerFeatures.js +102 -0
  228. package/dist/lib/inferParticleContainerFeatures.js.map +1 -0
  229. package/dist/lib/parser/EmitterParser.d.ts +3 -1
  230. package/dist/lib/parser/EmitterParser.js +103 -10
  231. package/dist/lib/parser/EmitterParser.js.map +1 -1
  232. package/dist/lib/pixi/Renderer.d.ts +9 -2
  233. package/dist/lib/pixi/Renderer.js +144 -27
  234. package/dist/lib/pixi/Renderer.js.map +1 -1
  235. package/dist/lib/pixi/SpriteContainerRenderer.d.ts +161 -0
  236. package/dist/lib/pixi/SpriteContainerRenderer.js +953 -0
  237. package/dist/lib/pixi/SpriteContainerRenderer.js.map +1 -0
  238. package/dist/lib/pixi/TestRenderer.d.ts +13 -8
  239. package/dist/lib/pixi/TestRenderer.js +155 -53
  240. package/dist/lib/pixi/TestRenderer.js.map +1 -1
  241. package/dist/lib/pixi/particleLinkLayer.js +31 -7
  242. package/dist/lib/pixi/particleLinkLayer.js.map +1 -1
  243. package/dist/lib/util/spatialCellKey.d.ts +8 -0
  244. package/dist/lib/util/spatialCellKey.js +11 -0
  245. package/dist/lib/util/spatialCellKey.js.map +1 -0
  246. package/package.json +10 -7
  247. package/dist/lib/behaviour/Wireframe3DBehaviour.d.ts +0 -140
  248. package/dist/lib/behaviour/Wireframe3DBehaviour.js +0 -572
  249. 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**: Fully compatible with **PIXI.js v8**, **PIXI.js v7**, with legacy support for v5.x and v6.x.
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
- **Peer dependency:** This library requires **PIXI.js** (or **pixi.js-legacy**). Install the version compatible with your project:
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 v7
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
- # For PIXI.js v5/v6 (legacy)
77
- npm install pixi.js-legacy
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
- // ES6 Modules
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 or PIXI.Texture objects
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:** All built-in behaviour classes are exported from the package so you can extend any of them: `SpawnBehaviour`, `LifeBehaviour`, `PositionBehaviour`, `ColorBehaviour`, `SizeBehaviour`, `AngularVelocityBehaviour`, `EmitDirectionBehaviour`, `RotationBehaviour`, `TurbulenceBehaviour`, `CollisionBehaviour`, `AttractionRepulsionBehaviour`, `NoiseBasedMotionBehaviour`, `ForceFieldsBehaviour`, `TimelineBehaviour`, `GroupingBehaviour`, `SoundReactiveBehaviour`, `LightEffectBehaviour`, `StretchBehaviour`, `TemperatureBehaviour`, `MoveToPointBehaviour`, `Wireframe3DBehaviour`, `VortexBehaviour`, `PulseBehaviour`, `RippleBehaviour`, `OrbitBehaviour`, `FlickerBehaviour`, `WobbleBehaviour`, `ColorCycleBehaviour`, `ConstrainToShapeBehaviour`, `GravityWellBehaviour`, `TrailBehaviour`, `BounceBehaviour`, `HomingBehaviour`, `FloatUpBehaviour`, `MagnetBehaviour`, `NearMissDispersionBehaviour`, `ConversionCascadeBehaviour`, `BoidsFlockingBehaviour`, `ProximityStateBehaviour`, `PhaseFieldFlowBehaviour`, `PhaseCoherenceBehaviour`, `CurvatureFlowBehaviour`, `LimitCycleBehaviour`, `AizawaAttractorBehaviour`, `ToroidalFlowBehaviour`, `ProximityTriggeredPhaseBehaviour`, `LissajousHarmonicLatticeBehaviour`, `JacobianCurlFieldBehaviour`. Also exported: `Behaviour`, `BehaviourRegistry`, `EmitterBehaviours`, `BehaviourNames`.
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): any;
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, Wireframe3DBehaviour, ToroidalWrapBehaviour, BehaviourNames, } from './lib/behaviour';
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 = [], vertices = true, position = true, rotation = true, uvs = true, tint = true, maxParticles = 10000, maxFPS = 60, minFPS = 30, tickerSpeed = 0.02, particleLinks, canvasSizeProvider, } = settings;
14
- const hasWireframe = (_a = emitterConfig === null || emitterConfig === void 0 ? void 0 : emitterConfig.behaviours) === null || _a === void 0 ? void 0 : _a.some((b) => b.name === 'Wireframe3DBehaviour');
15
- const renderer = new Renderer({
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
- const { textures, emitterConfig, animatedSpriteZeroPad = 2, animatedSpriteIndexToStart = 0, finishingTextures = [], maxFPS = 60, minFPS = 60, tickerSpeed = 0.02, particleLinks, canvasSizeProvider, } = settings;
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, Wireframe3DBehaviour, ToroidalWrapBehaviour, BehaviourNames, } from './lib/behaviour';
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":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -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
- * Boolean value indicating whether warping is enabled
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
- warp: boolean;
16
- /**
17
- * The Z position of the camera
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
  }