@fundamental-engine/three 0.4.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -47,7 +47,7 @@ onto your page's global `THREE`:
47
47
  ```sh
48
48
  echo "module.exports = window.THREE" > three-shim.cjs
49
49
  npx esbuild node_modules/@fundamental-engine/three/dist/index.js --bundle --format=iife \
50
- --global-name=FieldUI --alias:three=./three-shim.cjs --outfile=vendor/field-ui-three.js
50
+ --global-name=FieldUI --alias:three=./three-shim.cjs --outfile=vendor/Fundamental-three.js
51
51
  ```
52
52
 
53
53
  ## The particle bridge
@@ -120,11 +120,49 @@ const field = createThreeField({
120
120
 
121
121
  The line overlays render fully; numeric label sprites (the `data` reading) are a tracked follow-up.
122
122
 
123
+ ## Bodies — meshes that bend the field
124
+
125
+ A scene object can *be* a body (a force source). `layer.addBody(object3d, spec)` registers it: it
126
+ bends the field and the swarm responds, while `density`/`load`/`lit` feedback flows back to the mesh
127
+ (drive a uniform from `onFeedback`). A body **carries a `data` record** (a genome, an inventory), so a
128
+ mesh can be a meaningful agent, not just a force — and it can be **tagged** (`species`) and **selective**
129
+ (`affects`) so several ecologies share one field.
130
+
131
+ ```ts
132
+ const bloom = layer.addBody(blossomMesh, {
133
+ tokens: 'attract', strength: 0.8, range: 260, // field px
134
+ species: 1, // this is "pollen-1" matter…
135
+ data: genome, // …carrying its genome
136
+ onFeedback: (ch) => glow.material.opacity = ch.density ?? 0,
137
+ });
138
+ bloom.set({ strength: 0.3 }); // live — no re-create
139
+ ```
140
+
141
+ ## Agents — creatures the engine moves
142
+
143
+ `layer.addAgent(object3d, opts)` makes a mesh a **field agent**: the engine *steps it* (it lives in the
144
+ particle pool, so it feels every force the swarm feels — body forces and the particle-level
145
+ `hunt`/`align`/`cohesion`) and drives the object's position each frame. This is the engine-stepped
146
+ successor to `FieldAgent` (which samples + integrates itself).
147
+
148
+ ```ts
149
+ const bee = layer.addAgent(beeMesh, {
150
+ maxSpeed: 95, // field px/frame
151
+ species: 1, // tagged bodies (affects) steer it selectively
152
+ faceVelocity: true,
153
+ hover: { amp: 0.12, freq: 3 },
154
+ });
155
+ // layer.tick() now also advances the engine that moves the bee — no hand-rolled motion loop.
156
+ bee.remove();
157
+ ```
158
+
123
159
  ## Building your own field visuals
124
160
 
125
161
  The package re-exports the engine's field samplers — `forceAt` and `netField` — so you can drive
126
162
  your own 3D visuals (streamline tubes, vector grids, density volumes) from the live field without a
127
- second import.
163
+ second import. For **forage-by-gradient**, `layer.sampleScalar(x, y)` returns the smooth diffused
164
+ density ∈ [0,1] (enable it with `createFieldLayer({ heatmap: true })`); its gradient — unlike a
165
+ nearest-body readout — stays meaningful right at a source.
128
166
 
129
167
  ## License
130
168
 
@@ -1 +1 @@
1
- {"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../src/backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAIL,KAAK,EAMN,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,aAAa,EAAU,MAAM,0BAA0B,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAIpD,MAAM,WAAW,mBAAmB;IAClC,2FAA2F;IAC3F,UAAU,EAAE,eAAe,CAAC;IAC5B,kGAAkG;IAClG,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,YAAa,SAAQ,aAAa;IACjD,2DAA2D;IAC3D,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;IACvB,6BAA6B;IAC7B,OAAO,IAAI,IAAI,CAAC;CACjB;AAQD,wBAAgB,YAAY,CAAC,IAAI,EAAE,mBAAmB,GAAG,YAAY,CA2GpE"}
1
+ {"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../src/backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAKL,KAAK,EAMN,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,aAAa,EAAU,MAAM,0BAA0B,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAIpD,MAAM,WAAW,mBAAmB;IAClC,2FAA2F;IAC3F,UAAU,EAAE,eAAe,CAAC;IAC5B,kGAAkG;IAClG,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,YAAa,SAAQ,aAAa;IACjD,2DAA2D;IAC3D,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;IACvB,6BAA6B;IAC7B,OAAO,IAAI,IAAI,CAAC;CACjB;AAQD,wBAAgB,YAAY,CAAC,IAAI,EAAE,mBAAmB,GAAG,YAAY,CA2IpE"}
package/dist/backend.js CHANGED
@@ -14,7 +14,7 @@
14
14
  * labels (the `data` reading's numeric chips) are not yet drawn; `measureText` is honored so the
15
15
  * plates size correctly, and label sprites are a tracked follow-up. The line overlays need no text.
16
16
  */
17
- import { AdditiveBlending, BufferGeometry, Float32BufferAttribute, Group, LineBasicMaterial, LineSegments, Mesh, MeshBasicMaterial, Vector3, } from 'three';
17
+ import { AdditiveBlending, BufferGeometry, DynamicDrawUsage, Float32BufferAttribute, Group, LineBasicMaterial, LineSegments, Mesh, MeshBasicMaterial, Vector3, } from 'three';
18
18
  const _v = new Vector3();
19
19
  /** A lazily-created 2D context purely for text metrics — never rendered to. */
20
20
  function metricsContext() {
@@ -38,6 +38,35 @@ export function threeBackend(opts) {
38
38
  const object = new Group();
39
39
  object.add(lines, rects);
40
40
  const metrics = metricsContext();
41
+ // persistent, growable GPU buffers — written in place each frame (DynamicDrawUsage) rather than
42
+ // reallocating four Float32Arrays + four Float32BufferAttributes per overlay frame, which orphaned
43
+ // the prior GPU buffers for the GC and forced a fresh upload every frame. Mirrors ParticlePool's
44
+ // growth model: grow with headroom only when a frame needs more room, reuse otherwise.
45
+ let linePosData = new Float32Array(0);
46
+ let lineColData = new Float32Array(0);
47
+ let rectPosData = new Float32Array(0);
48
+ let rectColData = new Float32Array(0);
49
+ function dynAttr(data) {
50
+ const attr = new Float32BufferAttribute(data, 3);
51
+ attr.setUsage(DynamicDrawUsage);
52
+ return attr;
53
+ }
54
+ lineGeom.setAttribute('position', dynAttr(linePosData));
55
+ lineGeom.setAttribute('color', dynAttr(lineColData));
56
+ rectGeom.setAttribute('position', dynAttr(rectPosData));
57
+ rectGeom.setAttribute('color', dynAttr(rectColData));
58
+ /** copy a frame's accumulator into its persistent GPU buffer, growing (with headroom) only when
59
+ * the frame needs more room than the buffer holds. Returns the buffer to keep (the same one in
60
+ * steady state). The stale tail beyond `src.length` is never drawn — setDrawRange bounds it. */
61
+ function sync(geom, name, src, data) {
62
+ if (src.length > data.length) {
63
+ data = new Float32Array(Math.ceil(src.length * 1.5)); // amortized grow; rare after warm-up
64
+ geom.setAttribute(name, dynAttr(data));
65
+ }
66
+ data.set(src);
67
+ geom.getAttribute(name).needsUpdate = true;
68
+ return data;
69
+ }
41
70
  /** map a CSS-pixel point to the overlay plane and push xyz onto `arr` (overlay owns its own z). */
42
71
  function pushPoint(arr, x, y) {
43
72
  projection.toWorld(x, y, 0, 0, 0, _v); // z/heat/size irrelevant — the overlay draws at a fixed plane
@@ -48,11 +77,11 @@ export function threeBackend(opts) {
48
77
  arr.push((r / 255) * a, (g / 255) * a, (b / 255) * a);
49
78
  }
50
79
  function flush() {
51
- lineGeom.setAttribute('position', new Float32BufferAttribute(Float32Array.from(linePos), 3));
52
- lineGeom.setAttribute('color', new Float32BufferAttribute(Float32Array.from(lineCol), 3));
80
+ linePosData = sync(lineGeom, 'position', linePos, linePosData);
81
+ lineColData = sync(lineGeom, 'color', lineCol, lineColData);
53
82
  lineGeom.setDrawRange(0, linePos.length / 3);
54
- rectGeom.setAttribute('position', new Float32BufferAttribute(Float32Array.from(rectPos), 3));
55
- rectGeom.setAttribute('color', new Float32BufferAttribute(Float32Array.from(rectCol), 3));
83
+ rectPosData = sync(rectGeom, 'position', rectPos, rectPosData);
84
+ rectColData = sync(rectGeom, 'color', rectCol, rectColData);
56
85
  rectGeom.setDrawRange(0, rectPos.length / 3);
57
86
  }
58
87
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"backend.js","sourceRoot":"","sources":["../src/backend.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"backend.js","sourceRoot":"","sources":["../src/backend.ts"],"names":[],"mappings":"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"}
package/dist/bodies.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Meshes as bodies — the 3D form of field-ui's core idea ("every element is a body"). A
2
+ * Meshes as bodies — the 3D form of Fundamental's core idea ("every element is a body"). A
3
3
  * `THREE.Object3D` registers as a field body: it bends the field (bodies are force sources), the
4
4
  * swarm responds to it, and the field's local density bends *it* back through feedback. And because
5
5
  * a body **carries a data record**, a mesh can be a meaningful agent — a bloom carrying its genome,
@@ -28,6 +28,10 @@ export interface FieldBodySpec {
28
28
  /** the body's tint (`data-color`) — the `pigment` force dyes passing matter with it, so the
29
29
  * swarm visibly carries this body's color to wherever it drifts next (conserved color transport). */
30
30
  color?: string;
31
+ /** species tag this body stamps on matter it emits (a `spawn` source) — for multi-ecology fields. */
32
+ species?: number;
33
+ /** restrict this body's forces to these species (a selective body); omit to act on all matter. */
34
+ affects?: readonly number[];
31
35
  /** opt into density/load feedback back onto the mesh (default `true`). */
32
36
  feedback?: boolean;
33
37
  /** the body's box half-size in field pixels — its footprint, not its range (default 20). */
@@ -46,6 +50,14 @@ export interface FieldBody {
46
50
  data: unknown;
47
51
  /** the body's most recent feedback (density/load/lit/…); `{}` until the field writes. */
48
52
  readonly channels: Readonly<FeedbackChannels>;
53
+ /** update force params live — applied within a frame on the measure cadence, no re-scan
54
+ * (a fox getting hungrier, a lure fading). `angle` in degrees, for directional forces. */
55
+ set(params: {
56
+ strength?: number;
57
+ range?: number;
58
+ angle?: number;
59
+ spin?: number;
60
+ }): void;
49
61
  /** unregister this body from the field. */
50
62
  remove(): void;
51
63
  }
@@ -75,5 +87,10 @@ export declare class FieldBodyRegistry {
75
87
  remove(body: FieldBody): void;
76
88
  /** every registered body (read-only). */
77
89
  all(): readonly FieldBody[];
90
+ /** Drop every body and break the body↔element reference cycle (`el.__body`). Without this a
91
+ * retained `FieldBody` handle keeps the whole registry — and every body's `Object3D` — alive
92
+ * after the layer is destroyed. Also silences `onChange` so a late `remove()` can't re-scan a
93
+ * torn-down field. Called from `FieldLayer.destroy()`. */
94
+ clear(): void;
78
95
  }
79
96
  //# sourceMappingURL=bodies.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bodies.d.ts","sourceRoot":"","sources":["../src/bodies.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAIpD,MAAM,WAAW,aAAa;IAC5B,+FAA+F;IAC/F,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IACnC,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;0GACsG;IACtG,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4FAA4F;IAC5F,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iGAAiG;IACjG,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,gGAAgG;IAChG,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,mGAAmG;IACnG,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;CACpE;AAED,MAAM,WAAW,SAAS;IACxB,mCAAmC;IACnC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,2FAA2F;IAC3F,IAAI,EAAE,OAAO,CAAC;IACd,yFAAyF;IACzF,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC9C,2CAA2C;IAC3C,MAAM,IAAI,IAAI,CAAC;CAChB;AAsFD;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,QAAQ,CAAwB;gBAE5B,UAAU,EAAE,eAAe;IAIvC,mFAAmF;IACnF,cAAc,CAAC,MAAM,EAAE,QAAQ,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE;IAK1D,0EAA0E;IAC1E,aAAa,CAAC,UAAU,EAAE,eAAe,GAAG,IAAI;IAIhD,0FAA0F;IAC1F,WAAW,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI;IAIjC,kGAAkG;IAClG,IAAI,IAAI,IAAI,UAAU,CAMrB;IAED,8FAA8F;IAC9F,IAAI,IAAI,IAAI,YAAY,CAIvB;IAED,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,GAAG,SAAS;IAOrD,MAAM,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAQ7B,yCAAyC;IACzC,GAAG,IAAI,SAAS,SAAS,EAAE;CAG5B"}
1
+ {"version":3,"file":"bodies.d.ts","sourceRoot":"","sources":["../src/bodies.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAIpD,MAAM,WAAW,aAAa;IAC5B,+FAA+F;IAC/F,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IACnC,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;0GACsG;IACtG,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qGAAqG;IACrG,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kGAAkG;IAClG,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4FAA4F;IAC5F,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iGAAiG;IACjG,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,gGAAgG;IAChG,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,mGAAmG;IACnG,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;CACpE;AAED,MAAM,WAAW,SAAS;IACxB,mCAAmC;IACnC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,2FAA2F;IAC3F,IAAI,EAAE,OAAO,CAAC;IACd,yFAAyF;IACzF,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC9C;+FAC2F;IAC3F,GAAG,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACxF,2CAA2C;IAC3C,MAAM,IAAI,IAAI,CAAC;CAChB;AAmGD;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,QAAQ,CAAwB;gBAE5B,UAAU,EAAE,eAAe;IAIvC,mFAAmF;IACnF,cAAc,CAAC,MAAM,EAAE,QAAQ,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE;IAK1D,0EAA0E;IAC1E,aAAa,CAAC,UAAU,EAAE,eAAe,GAAG,IAAI;IAIhD,0FAA0F;IAC1F,WAAW,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI;IAIjC,kGAAkG;IAClG,IAAI,IAAI,IAAI,UAAU,CAMrB;IAED,8FAA8F;IAC9F,IAAI,IAAI,IAAI,YAAY,CAIvB;IAED,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,GAAG,SAAS;IAOrD,MAAM,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAQ7B,yCAAyC;IACzC,GAAG,IAAI,SAAS,SAAS,EAAE;IAI3B;;;+DAG2D;IAC3D,KAAK,IAAI,IAAI;CAKd"}
package/dist/bodies.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Meshes as bodies — the 3D form of field-ui's core idea ("every element is a body"). A
2
+ * Meshes as bodies — the 3D form of Fundamental's core idea ("every element is a body"). A
3
3
  * `THREE.Object3D` registers as a field body: it bends the field (bodies are force sources), the
4
4
  * swarm responds to it, and the field's local density bends *it* back through feedback. And because
5
5
  * a body **carries a data record**, a mesh can be a meaningful agent — a bloom carrying its genome,
@@ -18,6 +18,8 @@ class BodyImpl {
18
18
  data;
19
19
  channels = {};
20
20
  el;
21
+ /** the live attr map the virtual element reads — mutating it makes params reactive (see set). */
22
+ attrs;
21
23
  onFeedback;
22
24
  registry;
23
25
  constructor(registry, object, spec) {
@@ -35,8 +37,13 @@ class BodyImpl {
35
37
  attrs['data-spin'] = String(spec.spin);
36
38
  if (spec.angle != null)
37
39
  attrs['data-angle'] = String(spec.angle);
40
+ if (spec.species != null)
41
+ attrs['data-species'] = String(spec.species);
42
+ if (spec.affects != null && spec.affects.length)
43
+ attrs['data-affects'] = spec.affects.join(',');
38
44
  if (spec.feedback ?? true)
39
45
  attrs['data-feedback'] = '';
46
+ this.attrs = attrs; // the virtual element's getAttribute closes over this same object
40
47
  const half = (spec.sizePx ?? 20) / 2;
41
48
  const self = this;
42
49
  this.el = {
@@ -66,6 +73,17 @@ class BodyImpl {
66
73
  this.channels = channels;
67
74
  this.onFeedback?.(channels, this);
68
75
  }
76
+ set(params) {
77
+ if (params.strength != null)
78
+ this.attrs['data-strength'] = String(params.strength);
79
+ if (params.range != null)
80
+ this.attrs['data-range'] = String(params.range);
81
+ if (params.angle != null)
82
+ this.attrs['data-angle'] = String(params.angle);
83
+ if (params.spin != null)
84
+ this.attrs['data-spin'] = String(params.spin);
85
+ // no re-scan: the engine re-reads these on the next measure cycle (reactive params)
86
+ }
69
87
  remove() {
70
88
  this.registry.remove(this);
71
89
  }
@@ -133,5 +151,15 @@ export class FieldBodyRegistry {
133
151
  all() {
134
152
  return this.bodies;
135
153
  }
154
+ /** Drop every body and break the body↔element reference cycle (`el.__body`). Without this a
155
+ * retained `FieldBody` handle keeps the whole registry — and every body's `Object3D` — alive
156
+ * after the layer is destroyed. Also silences `onChange` so a late `remove()` can't re-scan a
157
+ * torn-down field. Called from `FieldLayer.destroy()`. */
158
+ clear() {
159
+ for (const b of this.bodies)
160
+ b.el.__body = undefined;
161
+ this.bodies.length = 0;
162
+ this.onChange = () => { };
163
+ }
136
164
  }
137
165
  //# sourceMappingURL=bodies.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bodies.js","sourceRoot":"","sources":["../src/bodies.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bodies.js","sourceRoot":"","sources":["../src/bodies.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -21,7 +21,8 @@
21
21
  * ```
22
22
  */
23
23
  export { FieldLayer, createFieldLayer, createThreeField } from './layer.ts';
24
- export type { FieldLayerOptions, ThreeFieldOptions } from './layer.ts';
24
+ export type { FieldLayerOptions, ThreeFieldOptions, MeshAgentOptions, MeshAgentHandle } from './layer.ts';
25
+ export type { AgentSpec, AgentHandle } from '@fundamental-engine/core';
25
26
  export { threeHost } from './host.ts';
26
27
  export type { ThreeHostOptions } from './host.ts';
27
28
  export { threeBackend } from './backend.ts';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC5E,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,YAAY,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACjE,YAAY,EAAE,eAAe,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAErG,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5D,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC9E,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAE3G,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAIrD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAC7D,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC5E,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE1G,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,YAAY,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACjE,YAAY,EAAE,eAAe,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAErG,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5D,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC9E,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAE3G,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAIrD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAC7D,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC"}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE5E,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEjE,kFAAkF;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,uFAAuF;AACvF,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAE9E,+FAA+F;AAC/F,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,+FAA+F;AAC/F,iFAAiF;AACjF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAI5E,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEjE,kFAAkF;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,uFAAuF;AACvF,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAE9E,+FAA+F;AAC/F,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,+FAA+F;AAC/F,iFAAiF;AACjF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC"}
package/dist/layer.d.ts CHANGED
@@ -16,12 +16,37 @@
16
16
  * The engine self-advances on the host's animation frame; `tick()` only reads the current state into
17
17
  * the geometry, so it is safe to call from any render loop at any cadence.
18
18
  */
19
- import type { AtomPayload, FieldHandle, FieldOptions, FlowOptions, HostViewport, ThreadLink } from '@fundamental-engine/core';
19
+ import type { AgentHandle, AgentSpec, AtomPayload, FieldHandle, FieldOptions, FlowOptions, HostViewport, ScalarGrid, ThreadLink, FieldEventType, FieldEventMap, BodySpec, BodyHandle, SurfacePlan } from '@fundamental-engine/core';
20
20
  import { Group } from 'three';
21
21
  import type { Object3D, WebGLRenderer } from 'three';
22
22
  import { type FieldProjection } from './project.ts';
23
23
  import { ParticlePool, type ParticleStyle } from './particles.ts';
24
24
  import { FieldBodyRegistry, type FieldBody, type FieldBodySpec } from './bodies.ts';
25
+ /** Options for `FieldLayer.addAgent(object3d, opts)` — an engine-stepped, mesh-bound agent. */
26
+ export interface MeshAgentOptions {
27
+ /** top speed in field px/frame (default 80). */
28
+ maxSpeed?: number;
29
+ /** inertial mass — heavier agents accelerate less (default 1). */
30
+ mass?: number;
31
+ /** species tag, so tagged bodies (`affects`) and `hunt` act on it selectively. */
32
+ species?: number;
33
+ /** aim the object along its travel direction each frame (default true). */
34
+ faceVelocity?: boolean;
35
+ /** an optional world-y hover bob layered on the projected position. */
36
+ hover?: {
37
+ amp: number;
38
+ freq: number;
39
+ };
40
+ }
41
+ /** Handle for a mesh agent added via `FieldLayer.addAgent(object3d, …)`. */
42
+ export interface MeshAgentHandle {
43
+ /** the scene object the engine drives. */
44
+ readonly object: Object3D;
45
+ /** the underlying core agent (`particle`, `remove()`). */
46
+ readonly agent: AgentHandle;
47
+ /** retire the agent and stop driving the object. */
48
+ remove(): void;
49
+ }
25
50
  export interface FieldLayerOptions extends Omit<FieldOptions, 'host' | 'render'> {
26
51
  /** the 2D↔3D mapping; defaults to a centered `PlaneProjection`. */
27
52
  projection?: FieldProjection;
@@ -45,6 +70,8 @@ export declare class FieldLayer implements FieldHandle {
45
70
  readonly pool: ParticlePool;
46
71
  /** the active 2D↔3D mapping. */
47
72
  readonly projection: FieldProjection;
73
+ /** the engine-stepped mesh agents — `layer.addAgent(...)`; all retired on `destroy()`. */
74
+ private readonly agents;
48
75
  /** the mesh-bodies registered on this field — `layer.addBody(...)` is the ergonomic entry. */
49
76
  readonly bodies: FieldBodyRegistry;
50
77
  private readonly field;
@@ -56,6 +83,18 @@ export declare class FieldLayer implements FieldHandle {
56
83
  * `.data`, `.channels`, and `.remove()` you use; the body tracks the mesh as it moves.
57
84
  */
58
85
  addBody(object: Object3D, spec: FieldBodySpec): FieldBody;
86
+ addBody(spec: BodySpec): BodyHandle;
87
+ /**
88
+ * Add an **agent**: a scene object the engine *moves*. The integrator steps it (it feels every
89
+ * force the swarm feels — body forces and the particle-level `hunt`/`align`/`cohesion`) and drives
90
+ * the object's position through the projection each frame; `maxSpeed` caps it, `faceVelocity` aims
91
+ * it, `hover` adds a bob. Returns a handle (`object`, the core `agent`, `remove()`). The aligned,
92
+ * engine-stepped successor to the self-integrating `FieldAgent` — the creatures primitive.
93
+ *
94
+ * The raw `addAgent(spec)` (the `FieldHandle` form) is also accepted for full-control callers.
95
+ */
96
+ addAgent(object: Object3D, opts?: MeshAgentOptions): MeshAgentHandle;
97
+ addAgent(spec: AgentSpec): AgentHandle;
59
98
  /** sync the swarm geometry from the engine's current particle state; returns the live count. */
60
99
  tick(): number;
61
100
  scan(): void;
@@ -66,6 +105,12 @@ export declare class FieldLayer implements FieldHandle {
66
105
  setAttention(on: boolean): void;
67
106
  setCausality(on: boolean): void;
68
107
  setHeatmap(on: boolean): void;
108
+ /** lower/raise the backing-store DPR ceiling at runtime (the dominant fill-rate lever). */
109
+ setDprCap(cap: number): void;
110
+ /** set the whole surface state (underlay/overlay/heatmap) in one declarative call. */
111
+ setSurfaces(plan: SurfacePlan): void;
112
+ /** the current surface state; the inverse of setSurfaces. */
113
+ getSurfaces(): Required<SurfacePlan>;
69
114
  setRender(mode: Parameters<FieldHandle['setRender']>[0]): void;
70
115
  setOverlay(mode: Parameters<FieldHandle['setOverlay']>[0]): void;
71
116
  setVisible(on: boolean): void;
@@ -79,6 +124,10 @@ export declare class FieldLayer implements FieldHandle {
79
124
  clearFocus(): void;
80
125
  particleCount(): number;
81
126
  readParticles(out: Float32Array): number;
127
+ /** copy each live particle's stable id into a Uint32Array, parallel to readParticles. */
128
+ readParticleIds(out: Uint32Array): number;
129
+ /** copy each live particle's tint into a Uint8Array as [r,g,b], parallel to readParticles. */
130
+ readParticleColors(out: Uint8Array): number;
82
131
  energy(): {
83
132
  kinetic: number;
84
133
  thermal: number;
@@ -89,9 +138,20 @@ export declare class FieldLayer implements FieldHandle {
89
138
  x: number;
90
139
  y: number;
91
140
  };
141
+ /** smooth density scalar ∈ [0,1] at `(x, y)` — pass `createFieldLayer({ heatmap: true })` to enable. */
142
+ sampleScalar(x: number, y: number): number;
143
+ /** density gradient ∇ at `(x, y)` — up-density direction in field px; needs `{ heatmap: true }`, `{0,0}` when off. */
144
+ sampleGradient(x: number, y: number): {
145
+ x: number;
146
+ y: number;
147
+ };
148
+ /** open a named host-authorable scalar grid (deposit/sample/gradient/decay) in field px — a scent/wear/goal field. */
149
+ grid(name: string): ScalarGrid;
150
+ /** subscribe to a discrete field event (absorb/release/settle); returns an unsubscribe fn. */
151
+ on<K extends FieldEventType>(type: K, cb: (e: FieldEventMap[K]) => void): () => void;
92
152
  scrollV(): number;
93
153
  setBackground(mode: Parameters<FieldHandle['setBackground']>[0]): void;
94
- /** stop the engine, release host listeners, and free the swarm's GPU resources. */
154
+ /** stop the engine, release host listeners, retire agents, and free the swarm's GPU resources. */
95
155
  destroy(): void;
96
156
  }
97
157
  /** Construct a `FieldLayer`. The ergonomic entry point — mirrors `mountField()` for Three.js. */
@@ -1 +1 @@
1
- {"version":3,"file":"layer.d.ts","sourceRoot":"","sources":["../src/layer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"layer.d.ts","sourceRoot":"","sources":["../src/layer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACpO,OAAO,EAAE,KAAK,EAAW,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAErD,OAAO,EAAqC,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAUpF,+FAA+F;AAC/F,MAAM,WAAW,gBAAgB;IAC/B,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kFAAkF;IAClF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,uEAAuE;IACvE,KAAK,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACvC;AAED,4EAA4E;AAC5E,MAAM,WAAW,eAAe;IAC9B,0CAA0C;IAC1C,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,0DAA0D;IAC1D,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,oDAAoD;IACpD,MAAM,IAAI,IAAI,CAAC;CAChB;AAED,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC9E,mEAAmE;IACnE,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,qFAAqF;IACrF,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,4CAA4C;IAC5C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,qFAAqF;IACrF,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wBAAwB;IACxB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED,qBAAa,UAAW,YAAW,WAAW;IAC5C,wFAAwF;IACxF,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;IACvB,qEAAqE;IACrE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,gCAAgC;IAChC,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IACrC,0FAA0F;IAC1F,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAChD,8FAA8F;IAC9F,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;gBAExB,IAAI,GAAE,iBAAsB;IA0BxC;;;;;OAKG;IACH,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,GAAG,SAAS;IACzD,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU;IAOnC;;;;;;;;OAQG;IACH,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,gBAAgB,GAAG,eAAe;IACpE,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,WAAW;IAuCtC,gGAAgG;IAChG,IAAI,IAAI,MAAM;IAKd,IAAI,IAAI,IAAI;IAGZ,MAAM,IAAI,IAAI;IAGd,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAG5B,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,IAAI;IAGrD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAGhC,YAAY,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI;IAG/B,YAAY,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI;IAG/B,UAAU,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI;IAG7B,2FAA2F;IAC3F,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAG5B,sFAAsF;IACtF,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAGpC,6DAA6D;IAC7D,WAAW,IAAI,QAAQ,CAAC,WAAW,CAAC;IAGpC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAG9D,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAGhE,UAAU,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI;IAG7B,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,IAAI,GAAG,IAAI;IAGxC,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAG/C,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,WAAW,GAAG,IAAI;IAG1D,SAAS,IAAI,IAAI;IAGjB,IAAI,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,IAAI;IAGzC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAGhD,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAGjD,UAAU,IAAI,IAAI;IAGlB,aAAa,IAAI,MAAM;IAGvB,aAAa,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM;IAGxC,yFAAyF;IACzF,eAAe,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM;IAGzC,8FAA8F;IAC9F,kBAAkB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM;IAG3C,MAAM,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;IAG5E,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE;IAGtD,wGAAwG;IACxG,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAG1C,sHAAsH;IACtH,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE;IAG9D,sHAAsH;IACtH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU;IAG9B,8FAA8F;IAC9F,EAAE,CAAC,CAAC,SAAS,cAAc,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI;IAGpF,OAAO,IAAI,MAAM;IAGjB,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAItE,kGAAkG;IAClG,OAAO,IAAI,IAAI;CAMhB;AAED,iGAAiG;AACjG,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,iBAAsB,GAAG,UAAU,CAEzE;AAED,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC;IACnE,gFAAgF;IAChF,QAAQ,EAAE,MAAM,YAAY,CAAC;IAC7B,oEAAoE;IACpE,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,qFAAqF;IACrF,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,GAAG,WAAW,CAIrE"}
package/dist/layer.js CHANGED
@@ -17,7 +17,7 @@
17
17
  * the geometry, so it is safe to call from any render loop at any cadence.
18
18
  */
19
19
  import { createField } from '@fundamental-engine/core';
20
- import { Group } from 'three';
20
+ import { Group, Vector3 } from 'three';
21
21
  import { threeHost } from "./host.js";
22
22
  import { PlaneProjection, VolumeProjection } from "./project.js";
23
23
  import { ParticlePool } from "./particles.js";
@@ -27,6 +27,7 @@ import { FieldBodyRegistry } from "./bodies.js";
27
27
  function stubCanvas() {
28
28
  return typeof document !== 'undefined' ? document.createElement('canvas') : {};
29
29
  }
30
+ const _v = new Vector3();
30
31
  export class FieldLayer {
31
32
  /** add this to your scene; it holds the swarm `Points` (and future overlay objects). */
32
33
  object;
@@ -34,6 +35,8 @@ export class FieldLayer {
34
35
  pool;
35
36
  /** the active 2D↔3D mapping. */
36
37
  projection;
38
+ /** the engine-stepped mesh agents — `layer.addAgent(...)`; all retired on `destroy()`. */
39
+ agents = [];
37
40
  /** the mesh-bodies registered on this field — `layer.addBody(...)` is the ergonomic entry. */
38
41
  bodies;
39
42
  field;
@@ -59,14 +62,51 @@ export class FieldLayer {
59
62
  this.object = new Group();
60
63
  this.object.add(this.pool.points);
61
64
  }
62
- /**
63
- * Register a scene object as a field body it bends the field, the swarm responds, and feedback
64
- * (density/load/lit) flows back to it. The body carries `spec.data`, so a mesh can be a meaningful
65
- * agent (a bloom with its genome, a hive accruing honey), not just a force. Returns a handle whose
66
- * `.data`, `.channels`, and `.remove()` you use; the body tracks the mesh as it moves.
67
- */
68
- addBody(object, spec) {
69
- return this.bodies.add(object, spec);
65
+ addBody(a, spec) {
66
+ // the core FieldHandle form (a plain spec, no mesh): delegate straight to the engine.
67
+ if (spec === undefined)
68
+ return this.field.addBody(a);
69
+ return this.bodies.add(a, spec);
70
+ }
71
+ addAgent(a, opts = {}) {
72
+ if (!a.isObject3D)
73
+ return this.field.addAgent(a);
74
+ const object = a;
75
+ object.getWorldPosition(_v);
76
+ const start = this.projection.toField(_v);
77
+ const face = opts.faceVelocity ?? true;
78
+ const hover = opts.hover;
79
+ const look = new Vector3();
80
+ let n = 0;
81
+ const agent = this.field.addAgent({
82
+ x: start.x,
83
+ y: start.y,
84
+ species: opts.species,
85
+ mass: opts.mass,
86
+ maxSpeed: opts.maxSpeed ?? 80,
87
+ report: (p) => {
88
+ this.projection.toWorld(p.x, p.y, p.z ?? 0, 0, 0, object.position);
89
+ if (hover)
90
+ object.position.y += Math.sin(n++ * 0.1 * hover.freq) * hover.amp;
91
+ if (face && p.vx * p.vx + p.vy * p.vy > 1e-3) {
92
+ this.projection.toWorld(p.x + p.vx * 0.1, p.y + p.vy * 0.1, p.z ?? 0, 0, 0, look);
93
+ look.y = object.position.y;
94
+ object.lookAt(look);
95
+ }
96
+ },
97
+ });
98
+ const handle = {
99
+ object,
100
+ agent,
101
+ remove: () => {
102
+ agent.remove();
103
+ const i = this.agents.indexOf(handle);
104
+ if (i >= 0)
105
+ this.agents.splice(i, 1);
106
+ },
107
+ };
108
+ this.agents.push(handle);
109
+ return handle;
70
110
  }
71
111
  /** sync the swarm geometry from the engine's current particle state; returns the live count. */
72
112
  tick() {
@@ -97,6 +137,18 @@ export class FieldLayer {
97
137
  setHeatmap(on) {
98
138
  this.field.setHeatmap(on);
99
139
  }
140
+ /** lower/raise the backing-store DPR ceiling at runtime (the dominant fill-rate lever). */
141
+ setDprCap(cap) {
142
+ this.field.setDprCap(cap);
143
+ }
144
+ /** set the whole surface state (underlay/overlay/heatmap) in one declarative call. */
145
+ setSurfaces(plan) {
146
+ this.field.setSurfaces(plan);
147
+ }
148
+ /** the current surface state; the inverse of setSurfaces. */
149
+ getSurfaces() {
150
+ return this.field.getSurfaces();
151
+ }
100
152
  setRender(mode) {
101
153
  this.field.setRender(mode);
102
154
  }
@@ -136,22 +188,49 @@ export class FieldLayer {
136
188
  readParticles(out) {
137
189
  return this.field.readParticles(out);
138
190
  }
191
+ /** copy each live particle's stable id into a Uint32Array, parallel to readParticles. */
192
+ readParticleIds(out) {
193
+ return this.field.readParticleIds(out);
194
+ }
195
+ /** copy each live particle's tint into a Uint8Array as [r,g,b], parallel to readParticles. */
196
+ readParticleColors(out) {
197
+ return this.field.readParticleColors(out);
198
+ }
139
199
  energy() {
140
200
  return this.field.energy();
141
201
  }
142
202
  sample(x, y) {
143
203
  return this.field.sample(x, y);
144
204
  }
205
+ /** smooth density scalar ∈ [0,1] at `(x, y)` — pass `createFieldLayer({ heatmap: true })` to enable. */
206
+ sampleScalar(x, y) {
207
+ return this.field.sampleScalar(x, y);
208
+ }
209
+ /** density gradient ∇ at `(x, y)` — up-density direction in field px; needs `{ heatmap: true }`, `{0,0}` when off. */
210
+ sampleGradient(x, y) {
211
+ return this.field.sampleGradient(x, y);
212
+ }
213
+ /** open a named host-authorable scalar grid (deposit/sample/gradient/decay) in field px — a scent/wear/goal field. */
214
+ grid(name) {
215
+ return this.field.grid(name);
216
+ }
217
+ /** subscribe to a discrete field event (absorb/release/settle); returns an unsubscribe fn. */
218
+ on(type, cb) {
219
+ return this.field.on(type, cb);
220
+ }
145
221
  scrollV() {
146
222
  return this.field.scrollV();
147
223
  }
148
224
  setBackground(mode) {
149
225
  this.field.setBackground(mode);
150
226
  }
151
- /** stop the engine, release host listeners, and free the swarm's GPU resources. */
227
+ /** stop the engine, release host listeners, retire agents, and free the swarm's GPU resources. */
152
228
  destroy() {
229
+ for (const a of this.agents.slice())
230
+ a.remove();
153
231
  this.field.destroy();
154
232
  this.pool.dispose();
233
+ this.bodies.clear(); // drop body↔mesh refs so a retained handle can't pin the registry
155
234
  }
156
235
  }
157
236
  /** Construct a `FieldLayer`. The ergonomic entry point — mirrors `mountField()` for Three.js. */
package/dist/layer.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"layer.js","sourceRoot":"","sources":["../src/layer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"layer.js","sourceRoot":"","sources":["../src/layer.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"samplers.d.ts","sourceRoot":"","sources":["../src/samplers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAIL,KAAK,EAQN,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,6FAA6F;AAC7F,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACxD;AAQD;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EAC9B,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5F;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,CAe5B;AAED,MAAM,WAAW,kBAAkB;IACjC,6CAA6C;IAC7C,UAAU,EAAE,eAAe,CAAC;IAC5B,iDAAiD;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oEAAoE;IACpE,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,WAAW;IAC1B,8BAA8B;IAC9B,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;IACvB,uFAAuF;IACvF,MAAM,IAAI,IAAI,CAAC;IACf,6BAA6B;IAC7B,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,4FAA4F;AAC5F,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,kBAAkB,GAAG,WAAW,CA6DtF;AAED,MAAM,WAAW,sBAAsB;IACrC,6CAA6C;IAC7C,UAAU,EAAE,eAAe,CAAC;IAC5B,4EAA4E;IAC5E,KAAK,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACnC,oFAAoF;IACpF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uFAAuF;IACvF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ;AAED,kGAAkG;AAClG,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,sBAAsB,GAAG,WAAW,CAuC9F"}
1
+ {"version":3,"file":"samplers.d.ts","sourceRoot":"","sources":["../src/samplers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAIL,KAAK,EAQN,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,6FAA6F;AAC7F,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACxD;AAQD;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EAC9B,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5F;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,CAU5B;AAED,MAAM,WAAW,kBAAkB;IACjC,6CAA6C;IAC7C,UAAU,EAAE,eAAe,CAAC;IAC5B,iDAAiD;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oEAAoE;IACpE,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,WAAW;IAC1B,8BAA8B;IAC9B,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;IACvB,uFAAuF;IACvF,MAAM,IAAI,IAAI,CAAC;IACf,6BAA6B;IAC7B,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,4FAA4F;AAC5F,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,kBAAkB,GAAG,WAAW,CAoEtF;AAED,MAAM,WAAW,sBAAsB;IACrC,6CAA6C;IAC7C,UAAU,EAAE,eAAe,CAAC;IAC5B,4EAA4E;IAC5E,KAAK,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACnC,oFAAoF;IACpF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uFAAuF;IACvF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ;AAED,kGAAkG;AAClG,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,sBAAsB,GAAG,WAAW,CAuC9F"}
package/dist/samplers.js CHANGED
@@ -8,6 +8,7 @@
8
8
  * The tracing/sampling core is pure (no WebGL) and unit-tested; only the geometry needs a renderer.
9
9
  */
10
10
  import { CatmullRomCurve3, Color, ConeGeometry, Group, InstancedMesh, Matrix4, Mesh, MeshBasicMaterial, Quaternion, TubeGeometry, Vector3, } from 'three';
11
+ import { traceFieldLine } from '@fundamental-engine/core';
11
12
  const _pos = new Vector3();
12
13
  const _quat = new Quaternion();
13
14
  const _scl = new Vector3();
@@ -19,22 +20,15 @@ const _zAxis = new Vector3(0, 0, 1);
19
20
  * field), or `maxSteps`.
20
21
  */
21
22
  export function traceStreamline(field, seed, opts) {
22
- const { width, height, maxSteps = 80, stepLen = 8, minMag = 1e-6 } = opts;
23
- const pts = [{ x: seed.x, y: seed.y }];
24
- let x = seed.x;
25
- let y = seed.y;
26
- for (let i = 0; i < maxSteps; i++) {
27
- const v = field.sample(x, y);
28
- const m = Math.hypot(v.x, v.y);
29
- if (m < minMag)
30
- break;
31
- x += (v.x / m) * stepLen;
32
- y += (v.y / m) * stepLen;
33
- if (x < 0 || y < 0 || x > width || y > height)
34
- break;
35
- pts.push({ x, y });
36
- }
37
- return pts;
23
+ const { width, height, maxSteps = 80, stepLen = 8 } = opts;
24
+ // Delegate to the core tracer rather than re-walking the field forward-only: traceFieldLine is
25
+ // bidirectional (the seed sits mid-line), closes loops, and carries a turn budget so a vortex
26
+ // can't wind the whole step budget into one circle — the qualities the old local walk lacked.
27
+ return traceFieldLine((x, y) => field.sample(x, y), seed.x, seed.y, {
28
+ step: stepLen,
29
+ maxSteps,
30
+ bounds: { w: width, h: height },
31
+ });
38
32
  }
39
33
  /** An instanced grid of arrows showing the field direction + magnitude across the plane. */
40
34
  export function vectorField(field, opts) {
@@ -52,28 +46,34 @@ export function vectorField(field, opts) {
52
46
  mesh.frustumCulled = false;
53
47
  const group = new Group();
54
48
  group.add(mesh);
49
+ // persistent per-cell sample scratch (reused every update — no per-call array allocation).
50
+ // The grid position is recomputed from the flat index, so only the sampled vector is stored.
51
+ const vx = new Float64Array(count);
52
+ const vy = new Float64Array(count);
53
+ // EMA-smoothed peak (the core "pulsing lesson", field.ts §streamlines): normalizing by the raw
54
+ // per-frame max makes every arrow jitter as a transient (a dragged body, an animated strength)
55
+ // shifts the peak frame to frame. Ease the peak up fast so a real spike normalizes promptly, and
56
+ // down slowly so the field reads as a calm pulse rather than a flicker.
57
+ let peak = 1e-6;
55
58
  const update = () => {
56
- let max = 1e-6;
57
- const fx = [];
58
- const fy = [];
59
- const vx = [];
60
- const vy = [];
59
+ let frameMax = 1e-6;
61
60
  for (let r = 0; r < rows; r++) {
62
61
  for (let c = 0; c < cols; c++) {
63
- const px = (c + 0.5) * step;
64
- const py = (r + 0.5) * step;
65
- const v = field.sample(px, py);
62
+ const v = field.sample((c + 0.5) * step, (r + 0.5) * step);
66
63
  const m = Math.hypot(v.x, v.y);
67
- if (m > max)
68
- max = m;
69
- fx.push(px);
70
- fy.push(py);
71
- vx.push(v.x);
72
- vy.push(v.y);
64
+ if (m > frameMax)
65
+ frameMax = m;
66
+ const i = r * cols + c;
67
+ vx[i] = v.x;
68
+ vy[i] = v.y;
73
69
  }
74
70
  }
71
+ peak += (frameMax - peak) * (frameMax > peak ? 0.5 : 0.05);
72
+ const max = peak;
75
73
  for (let i = 0; i < count; i++) {
76
- projection.toWorld(fx[i], fy[i], 0, 0, 0, _pos);
74
+ const px = ((i % cols) + 0.5) * step;
75
+ const py = (Math.floor(i / cols) + 0.5) * step;
76
+ projection.toWorld(px, py, 0, 0, 0, _pos);
77
77
  _pos.z = z;
78
78
  const rel = Math.sqrt(Math.hypot(vx[i], vy[i]) / max); // sqrt compression so weak arrows read
79
79
  // field-y is down → world-y up, so the world direction is (vx, -vy)
@@ -1 +1 @@
1
- {"version":3,"file":"samplers.js","sourceRoot":"","sources":["../src/samplers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"samplers.js","sourceRoot":"","sources":["../src/samplers.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-engine/three",
3
- "version": "0.4.0",
3
+ "version": "0.6.0",
4
4
  "description": "Three.js authoring surface for Fundamental — run the reciprocal field engine headless and render its swarm as a THREE.Points layer (the particle bridge), plus threeHost() and threeBackend() (a RenderBackend) for binding the engine to a WebGL scene.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -49,7 +49,7 @@
49
49
  "three": ">=0.147.0"
50
50
  },
51
51
  "dependencies": {
52
- "@fundamental-engine/core": "0.4.0"
52
+ "@fundamental-engine/core": "0.6.0"
53
53
  },
54
54
  "devDependencies": {
55
55
  "three": "^0.169.0",