@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.
- package/dist/core/BaseEmitter.d.ts +50 -0
- package/dist/core/BaseEmitter.d.ts.map +1 -0
- package/dist/core/BaseEmitter.js +53 -0
- package/dist/core/BaseEmitter.js.map +1 -0
- package/dist/core/BaseForce.d.ts +21 -0
- package/dist/core/BaseForce.d.ts.map +1 -0
- package/dist/core/BaseForce.js +15 -0
- package/dist/core/BaseForce.js.map +1 -0
- package/dist/core/BaseRenderer.d.ts +96 -0
- package/dist/core/BaseRenderer.d.ts.map +1 -0
- package/dist/core/BaseRenderer.js +190 -0
- package/dist/core/BaseRenderer.js.map +1 -0
- package/dist/core/DeflectorCollider.d.ts +46 -0
- package/dist/core/DeflectorCollider.d.ts.map +1 -0
- package/dist/core/DeflectorCollider.js +113 -0
- package/dist/core/DeflectorCollider.js.map +1 -0
- package/dist/core/Particle.d.ts +29 -0
- package/dist/core/Particle.d.ts.map +1 -0
- package/dist/core/Particle.js +41 -0
- package/dist/core/Particle.js.map +1 -0
- package/dist/core/ParticleCache.d.ts +73 -0
- package/dist/core/ParticleCache.d.ts.map +1 -0
- package/dist/core/ParticleCache.js +206 -0
- package/dist/core/ParticleCache.js.map +1 -0
- package/dist/core/ParticleSystem.d.ts +192 -0
- package/dist/core/ParticleSystem.d.ts.map +1 -0
- package/dist/core/ParticleSystem.js +484 -0
- package/dist/core/ParticleSystem.js.map +1 -0
- package/dist/core/SeededRandom.d.ts +17 -0
- package/dist/core/SeededRandom.d.ts.map +1 -0
- package/dist/core/SeededRandom.js +27 -0
- package/dist/core/SeededRandom.js.map +1 -0
- package/dist/emitters/EdgeEmitter.d.ts +43 -0
- package/dist/emitters/EdgeEmitter.d.ts.map +1 -0
- package/dist/emitters/EdgeEmitter.js +78 -0
- package/dist/emitters/EdgeEmitter.js.map +1 -0
- package/dist/emitters/MeshEmitter.d.ts +83 -0
- package/dist/emitters/MeshEmitter.d.ts.map +1 -0
- package/dist/emitters/MeshEmitter.js +240 -0
- package/dist/emitters/MeshEmitter.js.map +1 -0
- package/dist/emitters/PointEmitter.d.ts +22 -0
- package/dist/emitters/PointEmitter.d.ts.map +1 -0
- package/dist/emitters/PointEmitter.js +26 -0
- package/dist/emitters/PointEmitter.js.map +1 -0
- package/dist/forces/BoidField.d.ts +58 -0
- package/dist/forces/BoidField.d.ts.map +1 -0
- package/dist/forces/BoidField.js +82 -0
- package/dist/forces/BoidField.js.map +1 -0
- package/dist/forces/BoidForce.d.ts +54 -0
- package/dist/forces/BoidForce.d.ts.map +1 -0
- package/dist/forces/BoidForce.js +233 -0
- package/dist/forces/BoidForce.js.map +1 -0
- package/dist/forces/ChargeForce.d.ts +22 -0
- package/dist/forces/ChargeForce.d.ts.map +1 -0
- package/dist/forces/ChargeForce.js +35 -0
- package/dist/forces/ChargeForce.js.map +1 -0
- package/dist/forces/CurveGuideForce.d.ts +43 -0
- package/dist/forces/CurveGuideForce.d.ts.map +1 -0
- package/dist/forces/CurveGuideForce.js +118 -0
- package/dist/forces/CurveGuideForce.js.map +1 -0
- package/dist/forces/DragForce.d.ts +19 -0
- package/dist/forces/DragForce.d.ts.map +1 -0
- package/dist/forces/DragForce.js +31 -0
- package/dist/forces/DragForce.js.map +1 -0
- package/dist/forces/FlowFieldForce.d.ts +72 -0
- package/dist/forces/FlowFieldForce.d.ts.map +1 -0
- package/dist/forces/FlowFieldForce.js +68 -0
- package/dist/forces/FlowFieldForce.js.map +1 -0
- package/dist/forces/ForceField.d.ts +26 -0
- package/dist/forces/ForceField.d.ts.map +1 -0
- package/dist/forces/ForceField.js +41 -0
- package/dist/forces/ForceField.js.map +1 -0
- package/dist/forces/GravityForce.d.ts +9 -0
- package/dist/forces/GravityForce.d.ts.map +1 -0
- package/dist/forces/GravityForce.js +12 -0
- package/dist/forces/GravityForce.js.map +1 -0
- package/dist/forces/HarmonicForce.d.ts +22 -0
- package/dist/forces/HarmonicForce.d.ts.map +1 -0
- package/dist/forces/HarmonicForce.js +31 -0
- package/dist/forces/HarmonicForce.js.map +1 -0
- package/dist/forces/LennardJonesForce.d.ts +23 -0
- package/dist/forces/LennardJonesForce.d.ts.map +1 -0
- package/dist/forces/LennardJonesForce.js +38 -0
- package/dist/forces/LennardJonesForce.js.map +1 -0
- package/dist/forces/MagneticForce.d.ts +21 -0
- package/dist/forces/MagneticForce.d.ts.map +1 -0
- package/dist/forces/MagneticForce.js +30 -0
- package/dist/forces/MagneticForce.js.map +1 -0
- package/dist/forces/TextureForce.d.ts +37 -0
- package/dist/forces/TextureForce.d.ts.map +1 -0
- package/dist/forces/TextureForce.js +56 -0
- package/dist/forces/TextureForce.js.map +1 -0
- package/dist/forces/TurbulenceForce.d.ts +21 -0
- package/dist/forces/TurbulenceForce.d.ts.map +1 -0
- package/dist/forces/TurbulenceForce.js +39 -0
- package/dist/forces/TurbulenceForce.js.map +1 -0
- package/dist/forces/VortexForce.d.ts +21 -0
- package/dist/forces/VortexForce.d.ts.map +1 -0
- package/dist/forces/VortexForce.js +29 -0
- package/dist/forces/VortexForce.js.map +1 -0
- package/dist/forces/WindForce.d.ts +21 -0
- package/dist/forces/WindForce.d.ts.map +1 -0
- package/dist/forces/WindForce.js +29 -0
- package/dist/forces/WindForce.js.map +1 -0
- package/dist/index.d.ts +56 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -0
- package/dist/physics/KeyedPhysics.d.ts +43 -0
- package/dist/physics/KeyedPhysics.d.ts.map +1 -0
- package/dist/physics/KeyedPhysics.js +73 -0
- package/dist/physics/KeyedPhysics.js.map +1 -0
- package/dist/physics/SPHPhysics.d.ts +27 -0
- package/dist/physics/SPHPhysics.d.ts.map +1 -0
- package/dist/physics/SPHPhysics.js +119 -0
- package/dist/physics/SPHPhysics.js.map +1 -0
- package/dist/renderers/BillboardRenderer.d.ts +75 -0
- package/dist/renderers/BillboardRenderer.d.ts.map +1 -0
- package/dist/renderers/BillboardRenderer.js +106 -0
- package/dist/renderers/BillboardRenderer.js.map +1 -0
- package/dist/renderers/CollectionRenderer.d.ts +83 -0
- package/dist/renderers/CollectionRenderer.d.ts.map +1 -0
- package/dist/renderers/CollectionRenderer.js +161 -0
- package/dist/renderers/CollectionRenderer.js.map +1 -0
- package/dist/renderers/HaloRenderer.d.ts +3 -0
- package/dist/renderers/HaloRenderer.d.ts.map +1 -0
- package/dist/renderers/HaloRenderer.js +4 -0
- package/dist/renderers/HaloRenderer.js.map +1 -0
- package/dist/renderers/InstanceRenderer.d.ts +70 -0
- package/dist/renderers/InstanceRenderer.d.ts.map +1 -0
- package/dist/renderers/InstanceRenderer.js +86 -0
- package/dist/renderers/InstanceRenderer.js.map +1 -0
- package/dist/renderers/LineRenderer.d.ts +52 -0
- package/dist/renderers/LineRenderer.d.ts.map +1 -0
- package/dist/renderers/LineRenderer.js +96 -0
- package/dist/renderers/LineRenderer.js.map +1 -0
- package/dist/renderers/NoneRenderer.d.ts +19 -0
- package/dist/renderers/NoneRenderer.d.ts.map +1 -0
- package/dist/renderers/NoneRenderer.js +24 -0
- package/dist/renderers/NoneRenderer.js.map +1 -0
- package/dist/renderers/ObjectRenderer.d.ts +3 -0
- package/dist/renderers/ObjectRenderer.d.ts.map +1 -0
- package/dist/renderers/ObjectRenderer.js +4 -0
- package/dist/renderers/ObjectRenderer.js.map +1 -0
- package/dist/renderers/StrandRenderer.d.ts +169 -0
- package/dist/renderers/StrandRenderer.d.ts.map +1 -0
- package/dist/renderers/StrandRenderer.js +235 -0
- package/dist/renderers/StrandRenderer.js.map +1 -0
- package/dist/renderers/TrailRenderer.d.ts +54 -0
- package/dist/renderers/TrailRenderer.d.ts.map +1 -0
- package/dist/renderers/TrailRenderer.js +114 -0
- package/dist/renderers/TrailRenderer.js.map +1 -0
- 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":"AAAA,OAAO,EACL,YAAY,EAAE,cAAc,EAAE,sBAAsB,EACpD,iBAAiB,GAClB,MAAM,OAAO,CAAA;AACd,OAAO,EAAE,YAAY,EAAE,MAAW,yBAAyB,CAAA;AAwB3D;;;;;;GAMG;AACH,MAAM,OAAO,aAAc,SAAQ,YAAY;IAuB7C,YAAY,OAA6B,EAAE;QACzC,KAAK,EAAE,CAAA;QACP,MAAM,GAAG,GAAM,IAAI,CAAC,QAAQ,IAAO,IAAI,CAAA;QACvC,MAAM,GAAG,GAAM,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,CAAA;QAC/D,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QAEvC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAA;QACpB,IAAI,CAAC,OAAO,GAAK,GAAG,CAAA;QAEpB,IAAI,CAAC,UAAU,GAAG;YAChB,WAAW,EAAE,GAAG;YAChB,OAAO,EAAM,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3C,OAAO,EAAM,MAAM,CAAC,CAAC,CAAC;YACtB,OAAO,EAAM,MAAM,CAAC,CAAC,CAAC;YACtB,OAAO,EAAM,MAAM,CAAC,CAAC,CAAC;SACvB,CAAA;QAED,mDAAmD;QACnD,8DAA8D;QAC9D,MAAM,QAAQ,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA;QAChC,IAAI,CAAC,UAAU,GAAG,IAAI,YAAY,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;QACpD,IAAI,CAAC,OAAO,GAAM,IAAI,YAAY,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;QAEpD,IAAI,CAAC,IAAI,GAAG,IAAI,cAAc,EAAE,CAAA;QAChC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,sBAAsB,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA,CAAC,eAAe;QAClH,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAK,IAAI,sBAAsB,CAAC,IAAI,CAAC,OAAO,EAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;QAClG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAE5B,MAAM,GAAG,GAAG,IAAI,iBAAiB,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAA;QACzD,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QAChD,IAAI,CAAC,QAAQ,CAAC,aAAa,GAAG,KAAK,CAAA;QAEnC,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAA;QAC/C,IAAI,CAAC,KAAK,GAAM,IAAI,UAAU,CAAC,GAAG,CAAC,CAAA;QACnC,IAAI,CAAC,OAAO,GAAI,IAAI,UAAU,CAAC,GAAG,CAAC,CAAA;QAEnC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;IACzB,CAAC;IAED,MAAM,CACJ,SAAyB,EACzB,WAAmB,EACnB,OAAkC,EAClC,SAAwB;QAExB,MAAM,GAAG,GAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;QAClF,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,GAAG,CAAA;QAC9C,MAAM,EAAE,GAAQ,IAAI,CAAC,UAAU,CAAC,OAAO,CAAA;QACvC,MAAM,EAAE,GAAQ,IAAI,CAAC,UAAU,CAAC,OAAO,CAAA;QACvC,MAAM,EAAE,GAAQ,IAAI,CAAC,UAAU,CAAC,OAAO,CAAA;QAEvC,IAAI,QAAQ,GAAG,CAAC,CAAA,CAAE,uCAAuC;QAEzD,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC,MAAM,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC;YACpE,MAAM,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC,CAAA;YAEvB,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;gBACb,2EAA2E;gBAC3E,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;gBACpB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAK,CAAC,CAAA;gBACpB,SAAQ;YACV,CAAC;YAED,qDAAqD;YACrD,MAAM,IAAI,GAAM,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;YAC9B,MAAM,IAAI,GAAM,EAAE,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAA;YACrC,MAAM,KAAK,GAAK,IAAI,GAAG,CAAC,CAAA;YACxB,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,KAAK,CAAC,GAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;YAC9C,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;YAC9C,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;YAE9C,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;YACnC,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC;gBAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;YAExE,sDAAsD;YACtD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAA;YACpD,IAAI,UAAU,GAAG,CAAC;gBAAE,SAAQ;YAC5B,IAAI,QAAQ,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM;gBAAE,MAAK;YAEnE,2DAA2D;YAC3D,2EAA2E;YAC3E,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAEvD,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;gBAC3C,MAAM,EAAE,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC,GAAO,GAAG,CAAA;gBACrC,MAAM,EAAE,GAAG,CAAC,SAAS,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;gBACrC,MAAM,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,CAAC,CAAA;gBACxB,MAAM,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,CAAC,CAAA;gBAExB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;gBACjD,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;gBACrD,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;gBAErD,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;gBACjD,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;gBACrD,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;gBAErD,mDAAmD;gBACnD,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,CAAO,CAAC,CAAC,CAAC,CAAA;gBACpD,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;gBAEpD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAO,EAAE,GAAG,EAAE,CAAA;gBACpC,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAA;gBACpC,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAA;gBACpC,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAA;gBACpC,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAA;gBACpC,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAA;gBAEpC,QAAQ,IAAI,CAAC,CAAA;YACf,CAAC;QACH,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAA;QACvC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,WAAW,GAAG,IAAI,CAAA;QACnD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,WAAW,GAAM,IAAI,CAAA;IACrD,CAAC;IAED,oEAAoE;IACpE,YAAY;QACV,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACrB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAClB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACtB,CAAC;IAED,OAAO;QACL,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAClB;QAAC,IAAI,CAAC,QAAQ,CAAC,QAA8B,CAAC,OAAO,EAAE,CAAA;IAC1D,CAAC;CACF"}
|
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
|
+
}
|