custom-pixi-particles 8.12.0 → 8.13.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 (110) hide show
  1. package/dist/index.d.ts +10 -4
  2. package/dist/index.js +14 -5
  3. package/dist/index.js.map +1 -1
  4. package/dist/lib/Model.d.ts +13 -0
  5. package/dist/lib/Model.js +14 -0
  6. package/dist/lib/Model.js.map +1 -1
  7. package/dist/lib/Particle.d.ts +60 -0
  8. package/dist/lib/Particle.js +80 -0
  9. package/dist/lib/Particle.js.map +1 -1
  10. package/dist/lib/behaviour/BeatPhaseLockBehaviour.d.ts +26 -0
  11. package/dist/lib/behaviour/BeatPhaseLockBehaviour.js +68 -0
  12. package/dist/lib/behaviour/BeatPhaseLockBehaviour.js.map +1 -0
  13. package/dist/lib/behaviour/BehaviourNames.d.ts +11 -0
  14. package/dist/lib/behaviour/BehaviourNames.js +11 -0
  15. package/dist/lib/behaviour/BehaviourNames.js.map +1 -1
  16. package/dist/lib/behaviour/BezierFlowTubeBehaviour.d.ts +33 -0
  17. package/dist/lib/behaviour/BezierFlowTubeBehaviour.js +90 -0
  18. package/dist/lib/behaviour/BezierFlowTubeBehaviour.js.map +1 -0
  19. package/dist/lib/behaviour/DamageFlashRippleBehaviour.d.ts +27 -0
  20. package/dist/lib/behaviour/DamageFlashRippleBehaviour.js +77 -0
  21. package/dist/lib/behaviour/DamageFlashRippleBehaviour.js.map +1 -0
  22. package/dist/lib/behaviour/EmitterAttractorLinkBehaviour.d.ts +23 -0
  23. package/dist/lib/behaviour/EmitterAttractorLinkBehaviour.js +58 -0
  24. package/dist/lib/behaviour/EmitterAttractorLinkBehaviour.js.map +1 -0
  25. package/dist/lib/behaviour/EmitterBehaviours.js +11 -9
  26. package/dist/lib/behaviour/EmitterBehaviours.js.map +1 -1
  27. package/dist/lib/behaviour/FormPatternBehaviour.d.ts +488 -0
  28. package/dist/lib/behaviour/FormPatternBehaviour.js +2081 -0
  29. package/dist/lib/behaviour/FormPatternBehaviour.js.map +1 -0
  30. package/dist/lib/behaviour/KelvinWakeBehaviour.d.ts +27 -0
  31. package/dist/lib/behaviour/KelvinWakeBehaviour.js +76 -0
  32. package/dist/lib/behaviour/KelvinWakeBehaviour.js.map +1 -0
  33. package/dist/lib/behaviour/LifeBehaviour.d.ts +7 -0
  34. package/dist/lib/behaviour/LifeBehaviour.js +22 -2
  35. package/dist/lib/behaviour/LifeBehaviour.js.map +1 -1
  36. package/dist/lib/behaviour/LissajousHarmonicLatticeBehaviour.d.ts +2 -2
  37. package/dist/lib/behaviour/LissajousHarmonicLatticeBehaviour.js +4 -4
  38. package/dist/lib/behaviour/LissajousHarmonicLatticeBehaviour.js.map +1 -1
  39. package/dist/lib/behaviour/ObstacleSDFSteerBehaviour.d.ts +35 -0
  40. package/dist/lib/behaviour/ObstacleSDFSteerBehaviour.js +90 -0
  41. package/dist/lib/behaviour/ObstacleSDFSteerBehaviour.js.map +1 -0
  42. package/dist/lib/behaviour/PositionBehaviour.d.ts +1 -0
  43. package/dist/lib/behaviour/PositionBehaviour.js +3 -2
  44. package/dist/lib/behaviour/PositionBehaviour.js.map +1 -1
  45. package/dist/lib/behaviour/RVOAvoidanceBehaviour.d.ts +23 -0
  46. package/dist/lib/behaviour/RVOAvoidanceBehaviour.js +94 -0
  47. package/dist/lib/behaviour/RVOAvoidanceBehaviour.js.map +1 -0
  48. package/dist/lib/behaviour/ScreenSpaceFlowMapBehaviour.d.ts +27 -0
  49. package/dist/lib/behaviour/ScreenSpaceFlowMapBehaviour.js +90 -0
  50. package/dist/lib/behaviour/ScreenSpaceFlowMapBehaviour.js.map +1 -0
  51. package/dist/lib/behaviour/ShearFlowBehaviour.d.ts +28 -0
  52. package/dist/lib/behaviour/ShearFlowBehaviour.js +69 -0
  53. package/dist/lib/behaviour/ShearFlowBehaviour.js.map +1 -0
  54. package/dist/lib/behaviour/SizeBehaviour.d.ts +3 -0
  55. package/dist/lib/behaviour/SizeBehaviour.js +19 -7
  56. package/dist/lib/behaviour/SizeBehaviour.js.map +1 -1
  57. package/dist/lib/behaviour/ToroidalWrapBehaviour.d.ts +43 -0
  58. package/dist/lib/behaviour/ToroidalWrapBehaviour.js +93 -0
  59. package/dist/lib/behaviour/ToroidalWrapBehaviour.js.map +1 -0
  60. package/dist/lib/behaviour/index.d.ts +14 -1
  61. package/dist/lib/behaviour/index.js +12 -1
  62. package/dist/lib/behaviour/index.js.map +1 -1
  63. package/dist/lib/customPixiParticlesSettingsInterface.d.ts +11 -0
  64. package/dist/lib/effects/MetaballPass.d.ts +66 -0
  65. package/dist/lib/effects/MetaballPass.js +170 -0
  66. package/dist/lib/effects/MetaballPass.js.map +1 -0
  67. package/dist/lib/effects/index.d.ts +2 -0
  68. package/dist/lib/effects/index.js +2 -0
  69. package/dist/lib/effects/index.js.map +1 -1
  70. package/dist/lib/emission/EmissionTypes.d.ts +2 -0
  71. package/dist/lib/emission/EmissionTypes.js +2 -0
  72. package/dist/lib/emission/EmissionTypes.js.map +1 -1
  73. package/dist/lib/emission/PersistentFillEmission.d.ts +20 -0
  74. package/dist/lib/emission/PersistentFillEmission.js +43 -0
  75. package/dist/lib/emission/PersistentFillEmission.js.map +1 -0
  76. package/dist/lib/emission/index.d.ts +2 -1
  77. package/dist/lib/emission/index.js +2 -1
  78. package/dist/lib/emission/index.js.map +1 -1
  79. package/dist/lib/emitter/Emitter.d.ts +9 -1
  80. package/dist/lib/emitter/Emitter.js +6 -0
  81. package/dist/lib/emitter/Emitter.js.map +1 -1
  82. package/dist/lib/emitter/PersistentWrapEmitter.d.ts +13 -0
  83. package/dist/lib/emitter/PersistentWrapEmitter.js +21 -0
  84. package/dist/lib/emitter/PersistentWrapEmitter.js.map +1 -0
  85. package/dist/lib/emitter/index.d.ts +2 -1
  86. package/dist/lib/emitter/index.js +2 -1
  87. package/dist/lib/emitter/index.js.map +1 -1
  88. package/dist/lib/index.d.ts +2 -1
  89. package/dist/lib/index.js +2 -1
  90. package/dist/lib/index.js.map +1 -1
  91. package/dist/lib/parser/CompatibilityHelper.js +1 -1
  92. package/dist/lib/parser/CompatibilityHelper.js.map +1 -1
  93. package/dist/lib/parser/EmitControllerParser.d.ts +5 -0
  94. package/dist/lib/parser/EmitControllerParser.js +15 -2
  95. package/dist/lib/parser/EmitControllerParser.js.map +1 -1
  96. package/dist/lib/parser/EmitterParser.js +14 -0
  97. package/dist/lib/parser/EmitterParser.js.map +1 -1
  98. package/dist/lib/pixi/Renderer.d.ts +21 -1
  99. package/dist/lib/pixi/Renderer.js +129 -3
  100. package/dist/lib/pixi/Renderer.js.map +1 -1
  101. package/dist/lib/pixi/TestRenderer.d.ts +16 -0
  102. package/dist/lib/pixi/TestRenderer.js +135 -4
  103. package/dist/lib/pixi/TestRenderer.js.map +1 -1
  104. package/dist/lib/pixi/particleLinkLayer.d.ts +31 -0
  105. package/dist/lib/pixi/particleLinkLayer.js +111 -0
  106. package/dist/lib/pixi/particleLinkLayer.js.map +1 -0
  107. package/dist/lib/util/formPatternSampling.d.ts +171 -0
  108. package/dist/lib/util/formPatternSampling.js +1165 -0
  109. package/dist/lib/util/formPatternSampling.js.map +1 -0
  110. package/package.json +1 -1
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import Renderer from './lib/pixi/Renderer';
2
2
  import { ICustomPixiParticlesSettings } from './lib/customPixiParticlesSettingsInterface';
3
3
  import TestRenderer from './lib/pixi/TestRenderer';
4
- import { CrystallizeEffect, DissolveEffect, GhostEffect, GlitchEffect, GranularErosionEffect, LiquidMercuryEffect, MagneticAssemblyEffect, MeltEffect, PixelSortEffect, PrismRefractionEffect, ShatterEffect, SlitScanEffect } from './lib/effects';
5
- export type { IShatterEffectOptions, ShatterMode, IDissolveEffectOptions, DissolveDirection, IMagneticAssemblyOptions, AssemblyMode, IGhostEffectOptions, IGlitchEffectOptions, IMeltEffectOptions, IPixelSortEffectOptions, PixelSortDirection, PixelSortMode, PixelSortOrder, IPrismRefractionEffectOptions, ICrystallizeEffectOptions, ISlitScanEffectOptions, SlitScanMode, IGranularErosionEffectOptions, ILiquidMercuryEffectOptions, } from './lib/effects';
4
+ import { CrystallizeEffect, DissolveEffect, GhostEffect, GlitchEffect, GranularErosionEffect, LiquidMercuryEffect, MagneticAssemblyEffect, MetaballPass, MeltEffect, PixelSortEffect, PrismRefractionEffect, ShatterEffect, SlitScanEffect } from './lib/effects';
5
+ export type { IShatterEffectOptions, ShatterMode, IDissolveEffectOptions, DissolveDirection, IMagneticAssemblyOptions, AssemblyMode, IGhostEffectOptions, IGlitchEffectOptions, IMeltEffectOptions, IPixelSortEffectOptions, PixelSortDirection, PixelSortMode, PixelSortOrder, IPrismRefractionEffectOptions, ICrystallizeEffectOptions, ISlitScanEffectOptions, SlitScanMode, IGranularErosionEffectOptions, ILiquidMercuryEffectOptions, IMetaballPassOptions, } from './lib/effects';
6
6
  /**
7
7
  * Constructs a renderer for custom pixi particles
8
8
  * @class Renderer
@@ -15,7 +15,13 @@ declare const _customPixiParticlesEditorOnly: {
15
15
  create(settings: ICustomPixiParticlesSettings): TestRenderer;
16
16
  };
17
17
  export type { TextureVariant, TextureVariantFrames, TextureVariantStaticRandom } from './lib/textureVariants';
18
+ export type { IParticleLinkSettings } from './lib/pixi/particleLinkLayer';
19
+ export { drawParticleLinks, mergeParticleLinkSettings, PARTICLE_LINK_DEFAULTS, } from './lib/pixi/particleLinkLayer';
18
20
  export type { IBehaviour } from './lib/behaviour';
19
- export { Behaviour, BehaviourRegistry, EmitterBehaviours, SpawnBehaviour, LifeBehaviour, PositionBehaviour, ColorBehaviour, SizeBehaviour, AngularVelocityBehaviour, EmitDirectionBehaviour, RotationBehaviour, TurbulenceBehaviour, CollisionBehaviour, AttractionRepulsionBehaviour, NoiseBasedMotionBehaviour, ForceFieldsBehaviour, TimelineBehaviour, GroupingBehaviour, SoundReactiveBehaviour, LightEffectBehaviour, StretchBehaviour, TemperatureBehaviour, MoveToPointBehaviour, Wireframe3DBehaviour, BehaviourNames, } 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 { 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
+ export type { PresetShapeType, PresetShapeParams, TextRasterMode, RasterizeTextOptions, PointRgb, MorphKeyframe, IParticleXYWithUid, } from './lib/util/formPatternSampling';
24
+ export { PersistentFillEmission } from './lib/emission';
25
+ export { PersistentWrapEmitter } from './lib/emitter';
20
26
  export { Application, Assets } from 'pixi.js';
21
- export { Renderer, customPixiParticles, _customPixiParticlesEditorOnly, ICustomPixiParticlesSettings, ShatterEffect, DissolveEffect, MagneticAssemblyEffect, GhostEffect, GlitchEffect, MeltEffect, PixelSortEffect, PrismRefractionEffect, CrystallizeEffect, SlitScanEffect, GranularErosionEffect, LiquidMercuryEffect, };
27
+ export { Renderer, customPixiParticles, _customPixiParticlesEditorOnly, ICustomPixiParticlesSettings, ShatterEffect, DissolveEffect, MagneticAssemblyEffect, GhostEffect, GlitchEffect, MeltEffect, PixelSortEffect, PrismRefractionEffect, CrystallizeEffect, SlitScanEffect, GranularErosionEffect, LiquidMercuryEffect, MetaballPass, };
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import Renderer from './lib/pixi/Renderer';
2
2
  import TestRenderer from './lib/pixi/TestRenderer';
3
- import { CrystallizeEffect, DissolveEffect, GhostEffect, GlitchEffect, GranularErosionEffect, LiquidMercuryEffect, MagneticAssemblyEffect, MeltEffect, PixelSortEffect, PrismRefractionEffect, ShatterEffect, SlitScanEffect, } from './lib/effects';
3
+ import { CrystallizeEffect, DissolveEffect, GhostEffect, GlitchEffect, GranularErosionEffect, LiquidMercuryEffect, MagneticAssemblyEffect, MetaballPass, MeltEffect, PixelSortEffect, PrismRefractionEffect, ShatterEffect, SlitScanEffect, } from './lib/effects';
4
4
  import { Container, extensions, FederatedContainer, Graphics } from 'pixi.js';
5
5
  // Pixi applies FederatedContainer in events/init after async browser extension load; creating
6
6
  // particle containers before that runs leaves isInteractive() missing on Container.prototype.
@@ -13,7 +13,7 @@ extensions.mixin(Container, FederatedContainer);
13
13
  const customPixiParticles = {
14
14
  create(settings) {
15
15
  var _a;
16
- 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, } = settings;
16
+ 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;
17
17
  const hasWireframe = (_a = emitterConfig === null || emitterConfig === void 0 ? void 0 : emitterConfig.behaviours) === null || _a === void 0 ? void 0 : _a.some((b) => b.name === 'Wireframe3DBehaviour');
18
18
  const renderer = new Renderer({
19
19
  textures,
@@ -30,6 +30,8 @@ const customPixiParticles = {
30
30
  maxFPS,
31
31
  minFPS,
32
32
  tickerSpeed,
33
+ particleLinks,
34
+ canvasSizeProvider,
33
35
  });
34
36
  if (hasWireframe) {
35
37
  const graphics = new Graphics();
@@ -48,6 +50,7 @@ const customPixiParticles = {
48
50
  container.start = () => renderer.start();
49
51
  container.setTickerSpeed = (s) => renderer.setTickerSpeed(s);
50
52
  container.updateTexture = () => renderer.updateTexture();
53
+ container.setParticleLinks = (p) => renderer.setParticleLinks(p);
51
54
  const origDestroy = container.destroy.bind(container);
52
55
  container.destroy = () => {
53
56
  renderer.destroy();
@@ -60,7 +63,7 @@ const customPixiParticles = {
60
63
  };
61
64
  const _customPixiParticlesEditorOnly = {
62
65
  create(settings) {
63
- const { textures, emitterConfig, animatedSpriteZeroPad = 2, animatedSpriteIndexToStart = 0, finishingTextures = [], maxFPS = 60, minFPS = 60, tickerSpeed = 0.02, } = settings;
66
+ const { textures, emitterConfig, animatedSpriteZeroPad = 2, animatedSpriteIndexToStart = 0, finishingTextures = [], maxFPS = 60, minFPS = 60, tickerSpeed = 0.02, particleLinks, canvasSizeProvider, } = settings;
64
67
  return new TestRenderer({
65
68
  textures,
66
69
  animatedSpriteZeroPad,
@@ -70,11 +73,17 @@ const _customPixiParticlesEditorOnly = {
70
73
  maxFPS,
71
74
  minFPS,
72
75
  tickerSpeed,
76
+ particleLinks,
77
+ canvasSizeProvider,
73
78
  });
74
79
  },
75
80
  };
76
- export { Behaviour, BehaviourRegistry, EmitterBehaviours, SpawnBehaviour, LifeBehaviour, PositionBehaviour, ColorBehaviour, SizeBehaviour, AngularVelocityBehaviour, EmitDirectionBehaviour, RotationBehaviour, TurbulenceBehaviour, CollisionBehaviour, AttractionRepulsionBehaviour, NoiseBasedMotionBehaviour, ForceFieldsBehaviour, TimelineBehaviour, GroupingBehaviour, SoundReactiveBehaviour, LightEffectBehaviour, StretchBehaviour, TemperatureBehaviour, MoveToPointBehaviour, Wireframe3DBehaviour, BehaviourNames, } from './lib/behaviour';
81
+ export { drawParticleLinks, mergeParticleLinkSettings, PARTICLE_LINK_DEFAULTS, } from './lib/pixi/particleLinkLayer';
82
+ 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';
83
+ 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';
84
+ export { PersistentFillEmission } from './lib/emission';
85
+ export { PersistentWrapEmitter } from './lib/emitter';
77
86
  // Re-export so demos can use one import (avoids loading Pixi twice)
78
87
  export { Application, Assets } from 'pixi.js';
79
- export { Renderer, customPixiParticles, _customPixiParticlesEditorOnly, ShatterEffect, DissolveEffect, MagneticAssemblyEffect, GhostEffect, GlitchEffect, MeltEffect, PixelSortEffect, PrismRefractionEffect, CrystallizeEffect, SlitScanEffect, GranularErosionEffect, LiquidMercuryEffect, };
88
+ export { Renderer, customPixiParticles, _customPixiParticlesEditorOnly, ShatterEffect, DissolveEffect, MagneticAssemblyEffect, GhostEffect, GlitchEffect, MeltEffect, PixelSortEffect, PrismRefractionEffect, CrystallizeEffect, SlitScanEffect, GranularErosionEffect, LiquidMercuryEffect, MetaballPass, };
80
89
  //# sourceMappingURL=index.js.map
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,14 @@
1
1
  export default class Model {
2
+ /**
3
+ * Refreshed each frame by Renderer/TestRenderer when ToroidalWrapBehaviour uses canvas bounds.
4
+ * Particle space origin at emitter center; half-width = width/2 (matches Pixi render buffer).
5
+ */
6
+ toroidalCanvasBounds: {
7
+ minX: number;
8
+ maxX: number;
9
+ minY: number;
10
+ maxY: number;
11
+ } | null;
2
12
  /**
3
13
  * Boolean value indicating whether warping is enabled
4
14
  */
@@ -29,4 +39,7 @@ export default class Model {
29
39
  * @param {number} deltaTime - The delta time
30
40
  */
31
41
  updateCamera(deltaTime: number): void;
42
+ /** Sets {@link toroidalCanvasBounds} from render buffer size (centered rect). */
43
+ setToroidalCanvasBoundsFromSize(width: number, height: number): void;
44
+ clearToroidalCanvasBounds(): void;
32
45
  }
package/dist/lib/Model.js CHANGED
@@ -1,5 +1,10 @@
1
1
  export default class Model {
2
2
  constructor() {
3
+ /**
4
+ * Refreshed each frame by Renderer/TestRenderer when ToroidalWrapBehaviour uses canvas bounds.
5
+ * Particle space origin at emitter center; half-width = width/2 (matches Pixi render buffer).
6
+ */
7
+ this.toroidalCanvasBounds = null;
3
8
  /**
4
9
  * Boolean value indicating whether warping is enabled
5
10
  */
@@ -40,5 +45,14 @@ export default class Model {
40
45
  return;
41
46
  this.cameraZ += deltaTime * this.cameraZConverter * this.warpSpeed * this.warpBaseSpeed;
42
47
  }
48
+ /** Sets {@link toroidalCanvasBounds} from render buffer size (centered rect). */
49
+ setToroidalCanvasBoundsFromSize(width, height) {
50
+ const hw = width / 2;
51
+ const hh = height / 2;
52
+ this.toroidalCanvasBounds = { minX: -hw, maxX: hw, minY: -hh, maxY: hh };
53
+ }
54
+ clearToroidalCanvasBounds() {
55
+ this.toroidalCanvasBounds = null;
56
+ }
43
57
  }
44
58
  //# sourceMappingURL=Model.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Model.js","sourceRoot":"","sources":["../../src/lib/Model.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,KAAK;IAA1B;QACE;;WAEG;QACH,SAAI,GAAY,KAAK,CAAA;QAErB;;WAEG;QACH,YAAO,GAAW,CAAC,CAAA;QAEnB;;WAEG;QACH,qBAAgB,GAAW,CAAC,CAAA;QAE5B;;WAEG;QACH,cAAS,GAAW,CAAC,CAAA;QAErB;;WAEG;QACH,kBAAa,GAAW,CAAC,CAAA;IAqB3B,CAAC;IAnBC;;;OAGG;IACH,MAAM,CAAC,SAAc;QACnB,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,IAAI,KAAK,CAAA;QACnC,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC,gBAAgB,CAAA;QAClD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS,CAAA;QACpC,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,aAAa,CAAA;IAC9C,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,SAAiB;QAC5B,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAM;QACtB,IAAI,CAAC,OAAO,IAAI,SAAS,GAAG,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAA;IACzF,CAAC;CACF"}
1
+ {"version":3,"file":"Model.js","sourceRoot":"","sources":["../../src/lib/Model.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,KAAK;IAA1B;QACE;;;WAGG;QACH,yBAAoB,GAKT,IAAI,CAAA;QAEf;;WAEG;QACH,SAAI,GAAY,KAAK,CAAA;QAErB;;WAEG;QACH,YAAO,GAAW,CAAC,CAAA;QAEnB;;WAEG;QACH,qBAAgB,GAAW,CAAC,CAAA;QAE5B;;WAEG;QACH,cAAS,GAAW,CAAC,CAAA;QAErB;;WAEG;QACH,kBAAa,GAAW,CAAC,CAAA;IAgC3B,CAAC;IA9BC;;;OAGG;IACH,MAAM,CAAC,SAAc;QACnB,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,IAAI,KAAK,CAAA;QACnC,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC,gBAAgB,CAAA;QAClD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS,CAAA;QACpC,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,aAAa,CAAA;IAC9C,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,SAAiB;QAC5B,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAM;QACtB,IAAI,CAAC,OAAO,IAAI,SAAS,GAAG,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAA;IACzF,CAAC;IAED,iFAAiF;IACjF,+BAA+B,CAAC,KAAa,EAAE,MAAc;QAC3D,MAAM,EAAE,GAAG,KAAK,GAAG,CAAC,CAAA;QACpB,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,CAAA;QACrB,IAAI,CAAC,oBAAoB,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAA;IAC1E,CAAC;IAED,yBAAyB;QACvB,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAA;IAClC,CAAC;CACF"}
@@ -216,6 +216,66 @@ export default class Particle {
216
216
  moveToPointInitialY: number;
217
217
  moveToPointTotalDistance: number;
218
218
  moveToPointAccumulatedLinearDistance: number;
219
+ /** FormPatternBehaviour: mutually exclusive with MoveToPointBehaviour for predictable motion */
220
+ formPatternTargetX: number;
221
+ formPatternTargetY: number;
222
+ formPatternInitialX: number;
223
+ formPatternInitialY: number;
224
+ formPatternTotalDistance: number;
225
+ formPatternAccumulatedLinearDistance: number;
226
+ formPatternPathTime: number;
227
+ formPatternAssigned: boolean;
228
+ /** Delay before motion along the chord starts (seconds remaining) */
229
+ formPatternStaggerRemaining: number;
230
+ /** Per-particle speed multiplier (Form Pattern) */
231
+ formPatternSpeedMul: number;
232
+ /** Sine path phase offset (radians) */
233
+ formPatternSinPhase: number;
234
+ /** Hold at target after arrival (seconds remaining) */
235
+ formPatternLingerRemaining: number;
236
+ /** Local-space pattern target (for liveFormationTransform) */
237
+ formPatternLocalX: number;
238
+ formPatternLocalY: number;
239
+ /** Scales path deviations (arc, spiral, sine, noise) */
240
+ formPatternPathMul: number;
241
+ /** springSeek integration */
242
+ formPatternSpringVx: number;
243
+ formPatternSpringVy: number;
244
+ /**
245
+ * Snapshot before FormPattern image tint (for imageRestoreOriginalColorOnDeactivate).
246
+ */
247
+ formPatternColorBackup: {
248
+ cr: number;
249
+ cg: number;
250
+ cb: number;
251
+ ca: number;
252
+ sr: number;
253
+ sg: number;
254
+ sb: number;
255
+ sa: number;
256
+ er: number;
257
+ eg: number;
258
+ eb: number;
259
+ ea: number;
260
+ } | null;
261
+ /** imageBitmap: lerp color from→to when imageColorBlendDurationMs > 0 */
262
+ formPatternImageColorBlendActive: boolean;
263
+ formPatternImageColorBlendElapsed: number;
264
+ formPatternImageBlendFr: number;
265
+ formPatternImageBlendFg: number;
266
+ formPatternImageBlendFb: number;
267
+ formPatternImageBlendTr: number;
268
+ formPatternImageBlendTg: number;
269
+ formPatternImageBlendTb: number;
270
+ /** Unit chord initial→target for overshoot */
271
+ formPatternChordUx: number;
272
+ formPatternChordUy: number;
273
+ /** -1 = not overshooting; 0–1 = overshoot phase progress */
274
+ formPatternOvershootT: number;
275
+ formPatternVisBaseAlpha: number;
276
+ formPatternVisBaseSizeX: number;
277
+ formPatternVisBaseSizeY: number;
278
+ formPatternVisualActive: boolean;
219
279
  /**
220
280
  * Constructs a particle object
221
281
  */
@@ -99,6 +99,53 @@ class Particle {
99
99
  this.moveToPointInitialY = 0;
100
100
  this.moveToPointTotalDistance = 0;
101
101
  this.moveToPointAccumulatedLinearDistance = 0;
102
+ /** FormPatternBehaviour: mutually exclusive with MoveToPointBehaviour for predictable motion */
103
+ this.formPatternTargetX = 0;
104
+ this.formPatternTargetY = 0;
105
+ this.formPatternInitialX = 0;
106
+ this.formPatternInitialY = 0;
107
+ this.formPatternTotalDistance = 0;
108
+ this.formPatternAccumulatedLinearDistance = 0;
109
+ this.formPatternPathTime = 0;
110
+ this.formPatternAssigned = false;
111
+ /** Delay before motion along the chord starts (seconds remaining) */
112
+ this.formPatternStaggerRemaining = 0;
113
+ /** Per-particle speed multiplier (Form Pattern) */
114
+ this.formPatternSpeedMul = 1;
115
+ /** Sine path phase offset (radians) */
116
+ this.formPatternSinPhase = 0;
117
+ /** Hold at target after arrival (seconds remaining) */
118
+ this.formPatternLingerRemaining = 0;
119
+ /** Local-space pattern target (for liveFormationTransform) */
120
+ this.formPatternLocalX = 0;
121
+ this.formPatternLocalY = 0;
122
+ /** Scales path deviations (arc, spiral, sine, noise) */
123
+ this.formPatternPathMul = 1;
124
+ /** springSeek integration */
125
+ this.formPatternSpringVx = 0;
126
+ this.formPatternSpringVy = 0;
127
+ /**
128
+ * Snapshot before FormPattern image tint (for imageRestoreOriginalColorOnDeactivate).
129
+ */
130
+ this.formPatternColorBackup = null;
131
+ /** imageBitmap: lerp color from→to when imageColorBlendDurationMs > 0 */
132
+ this.formPatternImageColorBlendActive = false;
133
+ this.formPatternImageColorBlendElapsed = 0;
134
+ this.formPatternImageBlendFr = 0;
135
+ this.formPatternImageBlendFg = 0;
136
+ this.formPatternImageBlendFb = 0;
137
+ this.formPatternImageBlendTr = 0;
138
+ this.formPatternImageBlendTg = 0;
139
+ this.formPatternImageBlendTb = 0;
140
+ /** Unit chord initial→target for overshoot */
141
+ this.formPatternChordUx = 1;
142
+ this.formPatternChordUy = 0;
143
+ /** -1 = not overshooting; 0–1 = overshoot phase progress */
144
+ this.formPatternOvershootT = -1;
145
+ this.formPatternVisBaseAlpha = 1;
146
+ this.formPatternVisBaseSizeX = 1;
147
+ this.formPatternVisBaseSizeY = 1;
148
+ this.formPatternVisualActive = false;
102
149
  this.reset();
103
150
  }
104
151
  /**
@@ -181,6 +228,39 @@ class Particle {
181
228
  this.moveToPointInitialY = 0;
182
229
  this.moveToPointTotalDistance = 0;
183
230
  this.moveToPointAccumulatedLinearDistance = 0;
231
+ this.formPatternTargetX = 0;
232
+ this.formPatternTargetY = 0;
233
+ this.formPatternInitialX = 0;
234
+ this.formPatternInitialY = 0;
235
+ this.formPatternTotalDistance = 0;
236
+ this.formPatternAccumulatedLinearDistance = 0;
237
+ this.formPatternPathTime = 0;
238
+ this.formPatternAssigned = false;
239
+ this.formPatternStaggerRemaining = 0;
240
+ this.formPatternSpeedMul = 1;
241
+ this.formPatternSinPhase = 0;
242
+ this.formPatternLingerRemaining = 0;
243
+ this.formPatternLocalX = 0;
244
+ this.formPatternLocalY = 0;
245
+ this.formPatternPathMul = 1;
246
+ this.formPatternSpringVx = 0;
247
+ this.formPatternSpringVy = 0;
248
+ this.formPatternColorBackup = null;
249
+ this.formPatternImageColorBlendActive = false;
250
+ this.formPatternImageColorBlendElapsed = 0;
251
+ this.formPatternImageBlendFr = 0;
252
+ this.formPatternImageBlendFg = 0;
253
+ this.formPatternImageBlendFb = 0;
254
+ this.formPatternImageBlendTr = 0;
255
+ this.formPatternImageBlendTg = 0;
256
+ this.formPatternImageBlendTb = 0;
257
+ this.formPatternChordUx = 1;
258
+ this.formPatternChordUy = 0;
259
+ this.formPatternOvershootT = -1;
260
+ this.formPatternVisBaseAlpha = 1;
261
+ this.formPatternVisBaseSizeX = 1;
262
+ this.formPatternVisBaseSizeY = 1;
263
+ this.formPatternVisualActive = false;
184
264
  }
185
265
  /**
186
266
  * Checks if the particle is almost dead
@@ -1 +1 @@
1
- {"version":3,"file":"Particle.js","sourceRoot":"","sources":["../../src/lib/Particle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Particle.js","sourceRoot":"","sources":["../../src/lib/Particle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import Behaviour from './Behaviour';
2
+ import Particle from '../Particle';
3
+ import type Model from '../Model';
4
+ import type TurbulencePool from '../util/turbulencePool';
5
+ /**
6
+ * Lock phase to BPM; writes beatPhase01 for visuals and optional scale pulse.
7
+ */
8
+ export default class BeatPhaseLockBehaviour extends Behaviour {
9
+ enabled: boolean;
10
+ /** After SizeBehaviour (0) so scale pulse is not overwritten each frame */
11
+ priority: number;
12
+ bpm: number;
13
+ phaseOffset: number;
14
+ lockStrength: number;
15
+ jitter: number;
16
+ harmonic: number;
17
+ writePhaseForVisual: boolean;
18
+ applyScalePulse: boolean;
19
+ scalePulseAmount: number;
20
+ private _time;
21
+ update: (deltaTime: number) => void;
22
+ init(particle: Particle, _model: Model, _turbulencePool: TurbulencePool): void;
23
+ apply(particle: Particle, _deltaTime: number, _model: Model): void;
24
+ getName(): string;
25
+ getProps(): Record<string, unknown>;
26
+ }
@@ -0,0 +1,68 @@
1
+ import Behaviour from './Behaviour';
2
+ import BehaviourNames from './BehaviourNames';
3
+ /**
4
+ * Lock phase to BPM; writes beatPhase01 for visuals and optional scale pulse.
5
+ */
6
+ export default class BeatPhaseLockBehaviour extends Behaviour {
7
+ constructor() {
8
+ super(...arguments);
9
+ this.enabled = true;
10
+ /** After SizeBehaviour (0) so scale pulse is not overwritten each frame */
11
+ this.priority = -35;
12
+ this.bpm = 120;
13
+ this.phaseOffset = 0;
14
+ this.lockStrength = 0.85;
15
+ this.jitter = 0.1;
16
+ this.harmonic = 1;
17
+ this.writePhaseForVisual = true;
18
+ this.applyScalePulse = false;
19
+ this.scalePulseAmount = 0.15;
20
+ this._time = 0;
21
+ this.update = (deltaTime) => {
22
+ this._time += deltaTime;
23
+ };
24
+ }
25
+ init(particle, _model, _turbulencePool) {
26
+ const p = particle;
27
+ p.beatPhaseOffset = (particle.uid % 97) * 0.01 * this.jitter;
28
+ }
29
+ apply(particle, _deltaTime, _model) {
30
+ if (!this.enabled)
31
+ return;
32
+ const p = particle;
33
+ const omega = ((Math.PI * 2 * this.bpm) / 60) * Math.max(1, this.harmonic);
34
+ const phase = omega * this._time + this.phaseOffset + (p.beatPhaseOffset || 0);
35
+ const base = Math.cos(phase);
36
+ const locked = base * this.lockStrength + (1 - this.lockStrength) * Math.sin(phase * 0.5 + p.beatPhaseOffset);
37
+ if (this.writePhaseForVisual) {
38
+ p.beatPhase01 = 0.5 + 0.5 * locked;
39
+ }
40
+ if (this.applyScalePulse) {
41
+ const m = 1 + this.scalePulseAmount * locked;
42
+ const lp = particle.lifeProgress;
43
+ const bx = particle.sizeStart.x + (particle.sizeEnd.x - particle.sizeStart.x) * lp;
44
+ const by = particle.sizeStart.y + (particle.sizeEnd.y - particle.sizeStart.y) * lp;
45
+ particle.size.x = bx * m;
46
+ particle.size.y = by * m;
47
+ }
48
+ }
49
+ getName() {
50
+ return BehaviourNames.BEAT_PHASE_LOCK_BEHAVIOUR;
51
+ }
52
+ getProps() {
53
+ return {
54
+ enabled: this.enabled,
55
+ priority: this.priority,
56
+ bpm: this.bpm,
57
+ phaseOffset: this.phaseOffset,
58
+ lockStrength: this.lockStrength,
59
+ jitter: this.jitter,
60
+ harmonic: this.harmonic,
61
+ writePhaseForVisual: this.writePhaseForVisual,
62
+ applyScalePulse: this.applyScalePulse,
63
+ scalePulseAmount: this.scalePulseAmount,
64
+ name: this.getName(),
65
+ };
66
+ }
67
+ }
68
+ //# sourceMappingURL=BeatPhaseLockBehaviour.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BeatPhaseLockBehaviour.js","sourceRoot":"","sources":["../../../src/lib/behaviour/BeatPhaseLockBehaviour.ts"],"names":[],"mappings":"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"}
@@ -31,6 +31,7 @@ declare const behaviourNames: {
31
31
  GRAVITY_WELL_BEHAVIOUR: string;
32
32
  TRAIL_BEHAVIOUR: string;
33
33
  BOUNCE_BEHAVIOUR: string;
34
+ TOROIDAL_WRAP_BEHAVIOUR: string;
34
35
  HOMING_BEHAVIOUR: string;
35
36
  FLOAT_UP_BEHAVIOUR: string;
36
37
  MAGNET_BEHAVIOUR: string;
@@ -47,5 +48,15 @@ declare const behaviourNames: {
47
48
  PROXIMITY_TRIGGERED_PHASE_BEHAVIOUR: string;
48
49
  LISSAJOUS_HARMONIC_LATTICE_BEHAVIOUR: string;
49
50
  JACOBIAN_CURL_FIELD_BEHAVIOUR: string;
51
+ SHEAR_FLOW_BEHAVIOUR: string;
52
+ OBSTACLE_SDF_STEER_BEHAVIOUR: string;
53
+ RVO_AVOIDANCE_BEHAVIOUR: string;
54
+ EMITTER_ATTRACTOR_LINK_BEHAVIOUR: string;
55
+ KELVIN_WAKE_BEHAVIOUR: string;
56
+ BEZIER_FLOW_TUBE_BEHAVIOUR: string;
57
+ SCREEN_SPACE_FLOW_MAP_BEHAVIOUR: string;
58
+ BEAT_PHASE_LOCK_BEHAVIOUR: string;
59
+ DAMAGE_FLASH_RIPPLE_BEHAVIOUR: string;
60
+ FORM_PATTERN_BEHAVIOUR: string;
50
61
  };
51
62
  export default behaviourNames;
@@ -31,6 +31,7 @@ const behaviourNames = {
31
31
  GRAVITY_WELL_BEHAVIOUR: 'GravityWellBehaviour',
32
32
  TRAIL_BEHAVIOUR: 'TrailBehaviour',
33
33
  BOUNCE_BEHAVIOUR: 'BounceBehaviour',
34
+ TOROIDAL_WRAP_BEHAVIOUR: 'ToroidalWrapBehaviour',
34
35
  HOMING_BEHAVIOUR: 'HomingBehaviour',
35
36
  FLOAT_UP_BEHAVIOUR: 'FloatUpBehaviour',
36
37
  MAGNET_BEHAVIOUR: 'MagnetBehaviour',
@@ -47,6 +48,16 @@ const behaviourNames = {
47
48
  PROXIMITY_TRIGGERED_PHASE_BEHAVIOUR: 'ProximityTriggeredPhaseBehaviour',
48
49
  LISSAJOUS_HARMONIC_LATTICE_BEHAVIOUR: 'LissajousHarmonicLatticeBehaviour',
49
50
  JACOBIAN_CURL_FIELD_BEHAVIOUR: 'JacobianCurlFieldBehaviour',
51
+ SHEAR_FLOW_BEHAVIOUR: 'ShearFlowBehaviour',
52
+ OBSTACLE_SDF_STEER_BEHAVIOUR: 'ObstacleSDFSteerBehaviour',
53
+ RVO_AVOIDANCE_BEHAVIOUR: 'RVOAvoidanceBehaviour',
54
+ EMITTER_ATTRACTOR_LINK_BEHAVIOUR: 'EmitterAttractorLinkBehaviour',
55
+ KELVIN_WAKE_BEHAVIOUR: 'KelvinWakeBehaviour',
56
+ BEZIER_FLOW_TUBE_BEHAVIOUR: 'BezierFlowTubeBehaviour',
57
+ SCREEN_SPACE_FLOW_MAP_BEHAVIOUR: 'ScreenSpaceFlowMapBehaviour',
58
+ BEAT_PHASE_LOCK_BEHAVIOUR: 'BeatPhaseLockBehaviour',
59
+ DAMAGE_FLASH_RIPPLE_BEHAVIOUR: 'DamageFlashRippleBehaviour',
60
+ FORM_PATTERN_BEHAVIOUR: 'FormPatternBehaviour',
50
61
  };
51
62
  export default behaviourNames;
52
63
  //# sourceMappingURL=BehaviourNames.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BehaviourNames.js","sourceRoot":"","sources":["../../../src/lib/behaviour/BehaviourNames.ts"],"names":[],"mappings":"AAAA,MAAM,cAAc,GAAG;IACrB,iBAAiB,EAAE,0BAA0B;IAC7C,cAAc,EAAE,eAAe;IAC/B,eAAe,EAAE,gBAAgB;IACjC,kBAAkB,EAAE,mBAAmB;IACvC,cAAc,EAAE,eAAe;IAC/B,cAAc,EAAE,wBAAwB;IACxC,kBAAkB,EAAE,mBAAmB;IACvC,oBAAoB,EAAE,qBAAqB;IAC3C,mBAAmB,EAAE,oBAAoB;IACzC,8BAA8B,EAAE,8BAA8B;IAC9D,4BAA4B,EAAE,2BAA2B;IACzD,sBAAsB,EAAE,sBAAsB;IAC9C,eAAe,EAAE,gBAAgB;IACjC,kBAAkB,EAAE,mBAAmB;IACvC,kBAAkB,EAAE,mBAAmB;IACvC,wBAAwB,EAAE,wBAAwB;IAClD,sBAAsB,EAAE,sBAAsB;IAC9C,iBAAiB,EAAE,kBAAkB;IACrC,qBAAqB,EAAE,sBAAsB;IAC7C,uBAAuB,EAAE,sBAAsB;IAC/C,sBAAsB,EAAE,sBAAsB;IAC9C,gBAAgB,EAAE,iBAAiB;IACnC,eAAe,EAAE,gBAAgB;IACjC,gBAAgB,EAAE,iBAAiB;IACnC,eAAe,EAAE,gBAAgB;IACjC,iBAAiB,EAAE,kBAAkB;IACrC,gBAAgB,EAAE,iBAAiB;IACnC,qBAAqB,EAAE,qBAAqB;IAC5C,4BAA4B,EAAE,2BAA2B;IACzD,sBAAsB,EAAE,sBAAsB;IAC9C,eAAe,EAAE,gBAAgB;IACjC,gBAAgB,EAAE,iBAAiB;IACnC,gBAAgB,EAAE,iBAAiB;IACnC,kBAAkB,EAAE,kBAAkB;IACtC,gBAAgB,EAAE,iBAAiB;IACnC,8BAA8B,EAAE,6BAA6B;IAC7D,4BAA4B,EAAE,4BAA4B;IAC1D,wBAAwB,EAAE,wBAAwB;IAClD,yBAAyB,EAAE,yBAAyB;IACpD,0BAA0B,EAAE,yBAAyB;IACrD,yBAAyB,EAAE,yBAAyB;IACpD,wBAAwB,EAAE,wBAAwB;IAClD,qBAAqB,EAAE,qBAAqB;IAC5C,0BAA0B,EAAE,0BAA0B;IACtD,uBAAuB,EAAE,uBAAuB;IAChD,mCAAmC,EAAE,kCAAkC;IACvE,oCAAoC,EAAE,mCAAmC;IACzE,6BAA6B,EAAE,4BAA4B;CAC5D,CAAA;AAED,eAAe,cAAc,CAAA"}
1
+ {"version":3,"file":"BehaviourNames.js","sourceRoot":"","sources":["../../../src/lib/behaviour/BehaviourNames.ts"],"names":[],"mappings":"AAAA,MAAM,cAAc,GAAG;IACrB,iBAAiB,EAAE,0BAA0B;IAC7C,cAAc,EAAE,eAAe;IAC/B,eAAe,EAAE,gBAAgB;IACjC,kBAAkB,EAAE,mBAAmB;IACvC,cAAc,EAAE,eAAe;IAC/B,cAAc,EAAE,wBAAwB;IACxC,kBAAkB,EAAE,mBAAmB;IACvC,oBAAoB,EAAE,qBAAqB;IAC3C,mBAAmB,EAAE,oBAAoB;IACzC,8BAA8B,EAAE,8BAA8B;IAC9D,4BAA4B,EAAE,2BAA2B;IACzD,sBAAsB,EAAE,sBAAsB;IAC9C,eAAe,EAAE,gBAAgB;IACjC,kBAAkB,EAAE,mBAAmB;IACvC,kBAAkB,EAAE,mBAAmB;IACvC,wBAAwB,EAAE,wBAAwB;IAClD,sBAAsB,EAAE,sBAAsB;IAC9C,iBAAiB,EAAE,kBAAkB;IACrC,qBAAqB,EAAE,sBAAsB;IAC7C,uBAAuB,EAAE,sBAAsB;IAC/C,sBAAsB,EAAE,sBAAsB;IAC9C,gBAAgB,EAAE,iBAAiB;IACnC,eAAe,EAAE,gBAAgB;IACjC,gBAAgB,EAAE,iBAAiB;IACnC,eAAe,EAAE,gBAAgB;IACjC,iBAAiB,EAAE,kBAAkB;IACrC,gBAAgB,EAAE,iBAAiB;IACnC,qBAAqB,EAAE,qBAAqB;IAC5C,4BAA4B,EAAE,2BAA2B;IACzD,sBAAsB,EAAE,sBAAsB;IAC9C,eAAe,EAAE,gBAAgB;IACjC,gBAAgB,EAAE,iBAAiB;IACnC,uBAAuB,EAAE,uBAAuB;IAChD,gBAAgB,EAAE,iBAAiB;IACnC,kBAAkB,EAAE,kBAAkB;IACtC,gBAAgB,EAAE,iBAAiB;IACnC,8BAA8B,EAAE,6BAA6B;IAC7D,4BAA4B,EAAE,4BAA4B;IAC1D,wBAAwB,EAAE,wBAAwB;IAClD,yBAAyB,EAAE,yBAAyB;IACpD,0BAA0B,EAAE,yBAAyB;IACrD,yBAAyB,EAAE,yBAAyB;IACpD,wBAAwB,EAAE,wBAAwB;IAClD,qBAAqB,EAAE,qBAAqB;IAC5C,0BAA0B,EAAE,0BAA0B;IACtD,uBAAuB,EAAE,uBAAuB;IAChD,mCAAmC,EAAE,kCAAkC;IACvE,oCAAoC,EAAE,mCAAmC;IACzE,6BAA6B,EAAE,4BAA4B;IAC3D,oBAAoB,EAAE,oBAAoB;IAC1C,4BAA4B,EAAE,2BAA2B;IACzD,uBAAuB,EAAE,uBAAuB;IAChD,gCAAgC,EAAE,+BAA+B;IACjE,qBAAqB,EAAE,qBAAqB;IAC5C,0BAA0B,EAAE,yBAAyB;IACrD,+BAA+B,EAAE,6BAA6B;IAC9D,yBAAyB,EAAE,wBAAwB;IACnD,6BAA6B,EAAE,4BAA4B;IAC3D,sBAAsB,EAAE,sBAAsB;CAC/C,CAAA;AAED,eAAe,cAAc,CAAA"}
@@ -0,0 +1,33 @@
1
+ import Behaviour from './Behaviour';
2
+ import Particle from '../Particle';
3
+ import type Model from '../Model';
4
+ import type TurbulencePool from '../util/turbulencePool';
5
+ type Pt = {
6
+ x: number;
7
+ y: number;
8
+ };
9
+ /**
10
+ * Drift along a cubic Bezier tube with lateral noise; arc-length parameter stored per particle.
11
+ */
12
+ export default class BezierFlowTubeBehaviour extends Behaviour {
13
+ enabled: boolean;
14
+ /** After PositionBehaviour integration so curve position wins (same idea as Jacobian curl). */
15
+ priority: number;
16
+ /** Four control points P0..P3 */
17
+ p0: Pt;
18
+ p1: Pt;
19
+ p2: Pt;
20
+ p3: Pt;
21
+ speed: number;
22
+ noiseAmp: number;
23
+ loop: boolean;
24
+ alignRotation: boolean;
25
+ private _noise2D;
26
+ constructor();
27
+ init(particle: Particle, _model: Model, _turbulencePool: TurbulencePool): void;
28
+ private bezier;
29
+ apply(particle: Particle, deltaTime: number, _model: Model): void;
30
+ getName(): string;
31
+ getProps(): Record<string, unknown>;
32
+ }
33
+ export {};