@triforge/particle-core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/dist/core/BaseEmitter.d.ts +50 -0
  2. package/dist/core/BaseEmitter.d.ts.map +1 -0
  3. package/dist/core/BaseEmitter.js +53 -0
  4. package/dist/core/BaseEmitter.js.map +1 -0
  5. package/dist/core/BaseForce.d.ts +21 -0
  6. package/dist/core/BaseForce.d.ts.map +1 -0
  7. package/dist/core/BaseForce.js +15 -0
  8. package/dist/core/BaseForce.js.map +1 -0
  9. package/dist/core/BaseRenderer.d.ts +96 -0
  10. package/dist/core/BaseRenderer.d.ts.map +1 -0
  11. package/dist/core/BaseRenderer.js +190 -0
  12. package/dist/core/BaseRenderer.js.map +1 -0
  13. package/dist/core/DeflectorCollider.d.ts +46 -0
  14. package/dist/core/DeflectorCollider.d.ts.map +1 -0
  15. package/dist/core/DeflectorCollider.js +113 -0
  16. package/dist/core/DeflectorCollider.js.map +1 -0
  17. package/dist/core/Particle.d.ts +29 -0
  18. package/dist/core/Particle.d.ts.map +1 -0
  19. package/dist/core/Particle.js +41 -0
  20. package/dist/core/Particle.js.map +1 -0
  21. package/dist/core/ParticleCache.d.ts +73 -0
  22. package/dist/core/ParticleCache.d.ts.map +1 -0
  23. package/dist/core/ParticleCache.js +206 -0
  24. package/dist/core/ParticleCache.js.map +1 -0
  25. package/dist/core/ParticleSystem.d.ts +192 -0
  26. package/dist/core/ParticleSystem.d.ts.map +1 -0
  27. package/dist/core/ParticleSystem.js +484 -0
  28. package/dist/core/ParticleSystem.js.map +1 -0
  29. package/dist/core/SeededRandom.d.ts +17 -0
  30. package/dist/core/SeededRandom.d.ts.map +1 -0
  31. package/dist/core/SeededRandom.js +27 -0
  32. package/dist/core/SeededRandom.js.map +1 -0
  33. package/dist/emitters/EdgeEmitter.d.ts +43 -0
  34. package/dist/emitters/EdgeEmitter.d.ts.map +1 -0
  35. package/dist/emitters/EdgeEmitter.js +78 -0
  36. package/dist/emitters/EdgeEmitter.js.map +1 -0
  37. package/dist/emitters/MeshEmitter.d.ts +83 -0
  38. package/dist/emitters/MeshEmitter.d.ts.map +1 -0
  39. package/dist/emitters/MeshEmitter.js +240 -0
  40. package/dist/emitters/MeshEmitter.js.map +1 -0
  41. package/dist/emitters/PointEmitter.d.ts +22 -0
  42. package/dist/emitters/PointEmitter.d.ts.map +1 -0
  43. package/dist/emitters/PointEmitter.js +26 -0
  44. package/dist/emitters/PointEmitter.js.map +1 -0
  45. package/dist/forces/BoidField.d.ts +58 -0
  46. package/dist/forces/BoidField.d.ts.map +1 -0
  47. package/dist/forces/BoidField.js +82 -0
  48. package/dist/forces/BoidField.js.map +1 -0
  49. package/dist/forces/BoidForce.d.ts +54 -0
  50. package/dist/forces/BoidForce.d.ts.map +1 -0
  51. package/dist/forces/BoidForce.js +233 -0
  52. package/dist/forces/BoidForce.js.map +1 -0
  53. package/dist/forces/ChargeForce.d.ts +22 -0
  54. package/dist/forces/ChargeForce.d.ts.map +1 -0
  55. package/dist/forces/ChargeForce.js +35 -0
  56. package/dist/forces/ChargeForce.js.map +1 -0
  57. package/dist/forces/CurveGuideForce.d.ts +43 -0
  58. package/dist/forces/CurveGuideForce.d.ts.map +1 -0
  59. package/dist/forces/CurveGuideForce.js +118 -0
  60. package/dist/forces/CurveGuideForce.js.map +1 -0
  61. package/dist/forces/DragForce.d.ts +19 -0
  62. package/dist/forces/DragForce.d.ts.map +1 -0
  63. package/dist/forces/DragForce.js +31 -0
  64. package/dist/forces/DragForce.js.map +1 -0
  65. package/dist/forces/FlowFieldForce.d.ts +72 -0
  66. package/dist/forces/FlowFieldForce.d.ts.map +1 -0
  67. package/dist/forces/FlowFieldForce.js +68 -0
  68. package/dist/forces/FlowFieldForce.js.map +1 -0
  69. package/dist/forces/ForceField.d.ts +26 -0
  70. package/dist/forces/ForceField.d.ts.map +1 -0
  71. package/dist/forces/ForceField.js +41 -0
  72. package/dist/forces/ForceField.js.map +1 -0
  73. package/dist/forces/GravityForce.d.ts +9 -0
  74. package/dist/forces/GravityForce.d.ts.map +1 -0
  75. package/dist/forces/GravityForce.js +12 -0
  76. package/dist/forces/GravityForce.js.map +1 -0
  77. package/dist/forces/HarmonicForce.d.ts +22 -0
  78. package/dist/forces/HarmonicForce.d.ts.map +1 -0
  79. package/dist/forces/HarmonicForce.js +31 -0
  80. package/dist/forces/HarmonicForce.js.map +1 -0
  81. package/dist/forces/LennardJonesForce.d.ts +23 -0
  82. package/dist/forces/LennardJonesForce.d.ts.map +1 -0
  83. package/dist/forces/LennardJonesForce.js +38 -0
  84. package/dist/forces/LennardJonesForce.js.map +1 -0
  85. package/dist/forces/MagneticForce.d.ts +21 -0
  86. package/dist/forces/MagneticForce.d.ts.map +1 -0
  87. package/dist/forces/MagneticForce.js +30 -0
  88. package/dist/forces/MagneticForce.js.map +1 -0
  89. package/dist/forces/TextureForce.d.ts +37 -0
  90. package/dist/forces/TextureForce.d.ts.map +1 -0
  91. package/dist/forces/TextureForce.js +56 -0
  92. package/dist/forces/TextureForce.js.map +1 -0
  93. package/dist/forces/TurbulenceForce.d.ts +21 -0
  94. package/dist/forces/TurbulenceForce.d.ts.map +1 -0
  95. package/dist/forces/TurbulenceForce.js +39 -0
  96. package/dist/forces/TurbulenceForce.js.map +1 -0
  97. package/dist/forces/VortexForce.d.ts +21 -0
  98. package/dist/forces/VortexForce.d.ts.map +1 -0
  99. package/dist/forces/VortexForce.js +29 -0
  100. package/dist/forces/VortexForce.js.map +1 -0
  101. package/dist/forces/WindForce.d.ts +21 -0
  102. package/dist/forces/WindForce.d.ts.map +1 -0
  103. package/dist/forces/WindForce.js +29 -0
  104. package/dist/forces/WindForce.js.map +1 -0
  105. package/dist/index.d.ts +56 -0
  106. package/dist/index.d.ts.map +1 -0
  107. package/dist/index.js +44 -0
  108. package/dist/index.js.map +1 -0
  109. package/dist/physics/KeyedPhysics.d.ts +43 -0
  110. package/dist/physics/KeyedPhysics.d.ts.map +1 -0
  111. package/dist/physics/KeyedPhysics.js +73 -0
  112. package/dist/physics/KeyedPhysics.js.map +1 -0
  113. package/dist/physics/SPHPhysics.d.ts +27 -0
  114. package/dist/physics/SPHPhysics.d.ts.map +1 -0
  115. package/dist/physics/SPHPhysics.js +119 -0
  116. package/dist/physics/SPHPhysics.js.map +1 -0
  117. package/dist/renderers/BillboardRenderer.d.ts +75 -0
  118. package/dist/renderers/BillboardRenderer.d.ts.map +1 -0
  119. package/dist/renderers/BillboardRenderer.js +106 -0
  120. package/dist/renderers/BillboardRenderer.js.map +1 -0
  121. package/dist/renderers/CollectionRenderer.d.ts +83 -0
  122. package/dist/renderers/CollectionRenderer.d.ts.map +1 -0
  123. package/dist/renderers/CollectionRenderer.js +161 -0
  124. package/dist/renderers/CollectionRenderer.js.map +1 -0
  125. package/dist/renderers/HaloRenderer.d.ts +3 -0
  126. package/dist/renderers/HaloRenderer.d.ts.map +1 -0
  127. package/dist/renderers/HaloRenderer.js +4 -0
  128. package/dist/renderers/HaloRenderer.js.map +1 -0
  129. package/dist/renderers/InstanceRenderer.d.ts +70 -0
  130. package/dist/renderers/InstanceRenderer.d.ts.map +1 -0
  131. package/dist/renderers/InstanceRenderer.js +86 -0
  132. package/dist/renderers/InstanceRenderer.js.map +1 -0
  133. package/dist/renderers/LineRenderer.d.ts +52 -0
  134. package/dist/renderers/LineRenderer.d.ts.map +1 -0
  135. package/dist/renderers/LineRenderer.js +96 -0
  136. package/dist/renderers/LineRenderer.js.map +1 -0
  137. package/dist/renderers/NoneRenderer.d.ts +19 -0
  138. package/dist/renderers/NoneRenderer.d.ts.map +1 -0
  139. package/dist/renderers/NoneRenderer.js +24 -0
  140. package/dist/renderers/NoneRenderer.js.map +1 -0
  141. package/dist/renderers/ObjectRenderer.d.ts +3 -0
  142. package/dist/renderers/ObjectRenderer.d.ts.map +1 -0
  143. package/dist/renderers/ObjectRenderer.js +4 -0
  144. package/dist/renderers/ObjectRenderer.js.map +1 -0
  145. package/dist/renderers/StrandRenderer.d.ts +169 -0
  146. package/dist/renderers/StrandRenderer.d.ts.map +1 -0
  147. package/dist/renderers/StrandRenderer.js +235 -0
  148. package/dist/renderers/StrandRenderer.js.map +1 -0
  149. package/dist/renderers/TrailRenderer.d.ts +54 -0
  150. package/dist/renderers/TrailRenderer.d.ts.map +1 -0
  151. package/dist/renderers/TrailRenderer.js +114 -0
  152. package/dist/renderers/TrailRenderer.js.map +1 -0
  153. package/package.json +45 -0
@@ -0,0 +1,54 @@
1
+ import { LineSegments } from 'three';
2
+ import { BaseRenderer } from '../core/BaseRenderer.js';
3
+ import type { ParticleLike } from '../core/BaseRenderer.js';
4
+ import type { SeededRandom } from '../core/SeededRandom.js';
5
+ export interface TrailRendererOptions {
6
+ /**
7
+ * Maximum number of particles supported. Default 1000.
8
+ * Must match or exceed ParticleSystem.count.
9
+ */
10
+ maxCount?: number;
11
+ /**
12
+ * Number of trail segments per particle (2–64). Default 8.
13
+ * (Blender: Render → Path → B-Spline / Steps)
14
+ */
15
+ trailLength?: number;
16
+ /**
17
+ * Fade trail opacity from head to tail. Default true.
18
+ * (Blender: Render → Path → Fade)
19
+ */
20
+ fadeOut?: boolean;
21
+ /** Trail colour. Default white. */
22
+ colour?: [number, number, number];
23
+ }
24
+ /**
25
+ * TrailRenderer — each alive particle leaves a visible history trail.
26
+ * (Blender: Render → Path)
27
+ *
28
+ * Maintains a circular position buffer per particle.
29
+ * Renders as a single THREE.LineSegments object — no allocations inside update().
30
+ */
31
+ export declare class TrailRenderer extends BaseRenderer {
32
+ readonly object3D: LineSegments;
33
+ /**
34
+ * Scalar inputs — GSAP / keyframe compatible.
35
+ * trailLength: segment count per particle (2–64).
36
+ * fadeOut: 1 = fade head→tail, 0 = uniform opacity.
37
+ * colourR/G/B: trail colour components.
38
+ */
39
+ parameters: Record<string, number>;
40
+ private readonly _geo;
41
+ private readonly _positions;
42
+ private readonly _colors;
43
+ private readonly _history;
44
+ private readonly _head;
45
+ private readonly _filled;
46
+ private _maxCount;
47
+ private _maxSeg;
48
+ constructor(opts?: TrailRendererOptions);
49
+ update(particles: ParticleLike[], _aliveCount: number, _params?: Record<string, number>, _childRng?: SeededRandom): void;
50
+ /** Clear all trail history — call when resetting the simulation. */
51
+ clearHistory(): void;
52
+ dispose(): void;
53
+ }
54
+ //# sourceMappingURL=TrailRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TrailRenderer.d.ts","sourceRoot":"","sources":["../../src/renderers/TrailRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EAEb,MAAM,OAAO,CAAA;AACd,OAAO,EAAE,YAAY,EAAE,MAAW,yBAAyB,CAAA;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAE3D,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,QAAQ,CAAC,EAAK,MAAM,CAAA;IACpB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;OAGG;IACH,OAAO,CAAC,EAAM,OAAO,CAAA;IACrB,mCAAmC;IACnC,MAAM,CAAC,EAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CACvC;AAED;;;;;;GAMG;AACH,qBAAa,aAAc,SAAQ,YAAY;IAC7C,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAA;IAE/B;;;;;OAKG;IACH,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAElC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAqB;IAC1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAc;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IAGzC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;IAEtC,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,OAAO,CAAU;gBAEb,IAAI,GAAE,oBAAyB;IAuC3C,MAAM,CACJ,SAAS,EAAE,YAAY,EAAE,EACzB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAClC,SAAS,CAAC,EAAE,YAAY,GACvB,IAAI;IAyEP,oEAAoE;IACpE,YAAY,IAAI,IAAI;IAMpB,OAAO,IAAI,IAAI;CAIhB"}
@@ -0,0 +1,114 @@
1
+ import { LineSegments, BufferGeometry, Float32BufferAttribute, LineBasicMaterial, } from 'three';
2
+ import { BaseRenderer } from '../core/BaseRenderer.js';
3
+ /**
4
+ * TrailRenderer — each alive particle leaves a visible history trail.
5
+ * (Blender: Render → Path)
6
+ *
7
+ * Maintains a circular position buffer per particle.
8
+ * Renders as a single THREE.LineSegments object — no allocations inside update().
9
+ */
10
+ export class TrailRenderer extends BaseRenderer {
11
+ constructor(opts = {}) {
12
+ super();
13
+ const max = opts.maxCount ?? 1000;
14
+ const seg = Math.max(2, Math.min(64, opts.trailLength ?? 8));
15
+ const colour = opts.colour ?? [1, 1, 1];
16
+ this._maxCount = max;
17
+ this._maxSeg = seg;
18
+ this.parameters = {
19
+ trailLength: seg,
20
+ fadeOut: (opts.fadeOut ?? true) ? 1 : 0,
21
+ colourR: colour[0],
22
+ colourG: colour[1],
23
+ colourB: colour[2],
24
+ };
25
+ // Each trail segment is a line: 2 verts × 3 floats
26
+ // Worst case: maxCount particles × (seg-1) segments × 2 verts
27
+ const maxLines = max * (seg - 1);
28
+ this._positions = new Float32Array(maxLines * 2 * 3);
29
+ this._colors = new Float32Array(maxLines * 2 * 3);
30
+ this._geo = new BufferGeometry();
31
+ this._geo.setAttribute('position', new Float32BufferAttribute(this._positions, 3).setUsage(35048)); // DYNAMIC_DRAW
32
+ this._geo.setAttribute('color', new Float32BufferAttribute(this._colors, 3).setUsage(35048));
33
+ this._geo.setDrawRange(0, 0);
34
+ const mat = new LineBasicMaterial({ vertexColors: true });
35
+ this.object3D = new LineSegments(this._geo, mat);
36
+ this.object3D.frustumCulled = false;
37
+ this._history = new Float32Array(max * seg * 3);
38
+ this._head = new Int32Array(max);
39
+ this._filled = new Uint8Array(max);
40
+ this._allocDrawBuf(max);
41
+ }
42
+ update(particles, _aliveCount, _params, _childRng) {
43
+ const seg = Math.max(2, Math.min(64, Math.round(this.parameters.trailLength)));
44
+ const fadeOut = this.parameters.fadeOut >= 0.5;
45
+ const cr = this.parameters.colourR;
46
+ const cg = this.parameters.colourG;
47
+ const cb = this.parameters.colourB;
48
+ let lineVert = 0; // write cursor into _positions/_colors
49
+ for (let pi = 0; pi < particles.length && pi < this._maxCount; pi++) {
50
+ const p = particles[pi];
51
+ if (!p.alive) {
52
+ // Always clear history when dead so the trail doesn't linger after revival
53
+ this._filled[pi] = 0;
54
+ this._head[pi] = 0;
55
+ continue;
56
+ }
57
+ // Push current position into circular history buffer
58
+ const head = this._head[pi];
59
+ const base = pi * this._maxSeg * 3;
60
+ const hBase = head * 3;
61
+ this._history[base + hBase] = p.position.x;
62
+ this._history[base + hBase + 1] = p.position.y;
63
+ this._history[base + hBase + 2] = p.position.z;
64
+ this._head[pi] = (head + 1) % seg;
65
+ if (this._filled[pi] === 0 && this._head[pi] === 0)
66
+ this._filled[pi] = 1;
67
+ // Determine how many history slots are actually valid
68
+ const validSlots = this._filled[pi] ? seg : head + 1;
69
+ if (validSlots < 2)
70
+ continue;
71
+ if (lineVert + (validSlots - 1) * 6 > this._positions.length)
72
+ break;
73
+ // Write (validSlots-1) line segments from oldest to newest
74
+ // Oldest slot: if filled, it's _head[pi] (the slot we just overwrote next)
75
+ const startSlot = this._filled[pi] ? this._head[pi] : 0;
76
+ for (let si = 0; si < validSlots - 1; si++) {
77
+ const s0 = (startSlot + si) % seg;
78
+ const s1 = (startSlot + si + 1) % seg;
79
+ const b0 = base + s0 * 3;
80
+ const b1 = base + s1 * 3;
81
+ this._positions[lineVert] = this._history[b0];
82
+ this._positions[lineVert + 1] = this._history[b0 + 1];
83
+ this._positions[lineVert + 2] = this._history[b0 + 2];
84
+ this._positions[lineVert + 3] = this._history[b1];
85
+ this._positions[lineVert + 4] = this._history[b1 + 1];
86
+ this._positions[lineVert + 5] = this._history[b1 + 2];
87
+ // Fade: t=0 at tail (oldest), t=1 at head (newest)
88
+ const t0 = fadeOut ? si / (validSlots - 1) : 1;
89
+ const t1 = fadeOut ? (si + 1) / (validSlots - 1) : 1;
90
+ this._colors[lineVert] = cr * t0;
91
+ this._colors[lineVert + 1] = cg * t0;
92
+ this._colors[lineVert + 2] = cb * t0;
93
+ this._colors[lineVert + 3] = cr * t1;
94
+ this._colors[lineVert + 4] = cg * t1;
95
+ this._colors[lineVert + 5] = cb * t1;
96
+ lineVert += 6;
97
+ }
98
+ }
99
+ this._geo.setDrawRange(0, lineVert / 3);
100
+ this._geo.attributes['position'].needsUpdate = true;
101
+ this._geo.attributes['color'].needsUpdate = true;
102
+ }
103
+ /** Clear all trail history — call when resetting the simulation. */
104
+ clearHistory() {
105
+ this._history.fill(0);
106
+ this._head.fill(0);
107
+ this._filled.fill(0);
108
+ }
109
+ dispose() {
110
+ this._geo.dispose();
111
+ this.object3D.material.dispose();
112
+ }
113
+ }
114
+ //# sourceMappingURL=TrailRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TrailRenderer.js","sourceRoot":"","sources":["../../src/renderers/TrailRenderer.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "@triforge/particle-core",
3
+ "version": "0.1.0",
4
+ "description": "Blender-matched particle system for Three.js — Newtonian physics, force fields, emitters, render modes",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "files": [
9
+ "dist",
10
+ "package.json"
11
+ ],
12
+ "scripts": {
13
+ "build": "tsc",
14
+ "dev": "tsc --watch",
15
+ "test": "node test/run-tests.js",
16
+ "bench": "node bench/run-bench.js"
17
+ },
18
+ "keywords": [
19
+ "particles",
20
+ "three.js",
21
+ "blender",
22
+ "physics",
23
+ "emitter",
24
+ "force-field"
25
+ ],
26
+ "license": "MIT",
27
+ "peerDependencies": {
28
+ "three": ">=0.128.0"
29
+ },
30
+ "devDependencies": {
31
+ "@types/three": "^0.156.0",
32
+ "three": "^0.156.0",
33
+ "typescript": "^5.3.0"
34
+ },
35
+ "author": "Aftab Ibrahim Kazi",
36
+ "repository": {
37
+ "type": "git",
38
+ "url": "https://github.com/AftabIbrahimKazi/triforge.git",
39
+ "directory": "st-particle-core"
40
+ },
41
+ "homepage": "https://github.com/AftabIbrahimKazi/triforge#readme",
42
+ "publishConfig": {
43
+ "access": "public"
44
+ }
45
+ }