@fundamental-engine/core 0.7.0 → 0.8.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 (42) hide show
  1. package/dist/config/themes.d.ts +22 -0
  2. package/dist/config/themes.d.ts.map +1 -0
  3. package/dist/config/themes.js +9 -0
  4. package/dist/config/themes.js.map +1 -0
  5. package/dist/contracts/guards.d.ts +14 -0
  6. package/dist/contracts/guards.d.ts.map +1 -1
  7. package/dist/contracts/guards.js +21 -0
  8. package/dist/contracts/guards.js.map +1 -1
  9. package/dist/core/agents.d.ts +1 -1
  10. package/dist/core/agents.d.ts.map +1 -1
  11. package/dist/core/agents.js +5 -2
  12. package/dist/core/agents.js.map +1 -1
  13. package/dist/core/events.d.ts +15 -0
  14. package/dist/core/events.d.ts.map +1 -1
  15. package/dist/core/events.js.map +1 -1
  16. package/dist/core/field.d.ts.map +1 -1
  17. package/dist/core/field.js +258 -61
  18. package/dist/core/field.js.map +1 -1
  19. package/dist/core/host.d.ts +7 -0
  20. package/dist/core/host.d.ts.map +1 -1
  21. package/dist/core/math.d.ts +4 -3
  22. package/dist/core/math.d.ts.map +1 -1
  23. package/dist/core/math.js +10 -9
  24. package/dist/core/math.js.map +1 -1
  25. package/dist/core/scanner.d.ts +1 -1
  26. package/dist/core/scanner.d.ts.map +1 -1
  27. package/dist/core/scanner.js +8 -4
  28. package/dist/core/scanner.js.map +1 -1
  29. package/dist/core/types.d.ts +45 -12
  30. package/dist/core/types.d.ts.map +1 -1
  31. package/dist/forces/index.d.ts.map +1 -1
  32. package/dist/forces/index.js +3 -1
  33. package/dist/forces/index.js.map +1 -1
  34. package/dist/index.d.ts +2 -0
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +2 -0
  37. package/dist/index.js.map +1 -1
  38. package/dist/version.d.ts +8 -0
  39. package/dist/version.d.ts.map +1 -0
  40. package/dist/version.js +8 -0
  41. package/dist/version.js.map +1 -0
  42. package/package.json +1 -1
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Field themes (#529) — the ambient palette as a first-class contract, not a fork. A theme bundles the
3
+ * free-particle **heat ramp** (`cool` → `warm` ends, §20.8) and the background-wave **baseline**. Before
4
+ * this, those were hardcoded module constants (`COOL`/`WARM` in `math.ts`, `WAVE_RGB` in `field.ts`), so
5
+ * changing the look meant patching core. Now `FieldOptions.theme` picks a preset and
6
+ * `gradientCool`/`gradientWarm`/`waveBaseline` override individual lanes — additive, the frozen surface
7
+ * intact, and `theme: 'warm'` reproduces the shipped defaults byte-for-byte.
8
+ */
9
+ import type { RGB } from '../core/math.ts';
10
+ export interface FieldTheme {
11
+ /** the resting (cool) end of the free-particle heat ramp. */
12
+ cool: RGB;
13
+ /** the energized (warm) end of the heat ramp. */
14
+ warm: RGB;
15
+ /** the background-wave baseline colors (hex), built into the resting Currents. */
16
+ wave: readonly string[];
17
+ }
18
+ /** Named presets. `warm` is the shipped 0.8.0 default; `cool` and `mono` are alternatives. */
19
+ export declare const THEMES: Record<string, FieldTheme>;
20
+ /** The default theme id — the shipped warm palette. */
21
+ export declare const DEFAULT_THEME = "warm";
22
+ //# sourceMappingURL=themes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"themes.d.ts","sourceRoot":"","sources":["../../src/config/themes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAE3C,MAAM,WAAW,UAAU;IACzB,6DAA6D;IAC7D,IAAI,EAAE,GAAG,CAAC;IACV,iDAAiD;IACjD,IAAI,EAAE,GAAG,CAAC;IACV,kFAAkF;IAClF,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;CACzB;AAED,8FAA8F;AAC9F,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAI7C,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,aAAa,SAAS,CAAC"}
@@ -0,0 +1,9 @@
1
+ /** Named presets. `warm` is the shipped 0.8.0 default; `cool` and `mono` are alternatives. */
2
+ export const THEMES = {
3
+ warm: { cool: [255, 224, 200], warm: [255, 110, 80], wave: ['#ff8a5c', '#f0628e', '#ffc46b'] },
4
+ cool: { cool: [206, 226, 255], warm: [74, 132, 255], wave: ['#5c8aff', '#62a0f0', '#6bc4ff'] },
5
+ mono: { cool: [232, 232, 238], warm: [148, 148, 158], wave: ['#8a8a96', '#b0b0bc', '#9a9aa6'] },
6
+ };
7
+ /** The default theme id — the shipped warm palette. */
8
+ export const DEFAULT_THEME = 'warm';
9
+ //# sourceMappingURL=themes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"themes.js","sourceRoot":"","sources":["../../src/config/themes.ts"],"names":[],"mappings":"AAmBA,8FAA8F;AAC9F,MAAM,CAAC,MAAM,MAAM,GAA+B;IAChD,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;IAC9F,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;IAC9F,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;CAChG,CAAC;AAEF,uDAAuD;AACvD,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC"}
@@ -22,6 +22,20 @@ export declare class FieldUIError extends Error {
22
22
  export declare function setContractChecks(on: boolean): void;
23
23
  /** Whether contract checks are currently active. */
24
24
  export declare function contractChecksEnabled(): boolean;
25
+ /** Diagnostic codes for SILENT no-ops — a call that returned a neutral value (0, {0,0}, nothing)
26
+ * because a prerequisite was missing. Advisory, not a contract violation: the call is legal, it
27
+ * just couldn't do anything. */
28
+ export type FieldUINoOpCode = 'NOOP_NO_HEATMAP';
29
+ /**
30
+ * Dev-only, deduped `console.warn` for a SILENT no-op: a method that returned a neutral value
31
+ * because a prerequisite is missing, so an embedder learns *why* nothing happened instead of
32
+ * debugging a mysterious zero. No-op in production (gated by the same `CHECKS` flag the guards use,
33
+ * so a bundler that defines `NODE_ENV` dead-code-eliminates it). Deduped by message, so a call made
34
+ * every frame warns at most once. Never throws — the no-op is legal; this only explains it.
35
+ */
36
+ export declare function devWarnNoOp(code: FieldUINoOpCode, message: string): void;
37
+ /** Clear the no-op warning dedup set — for tests that assert the warn fires. */
38
+ export declare function resetNoOpWarnings(): void;
25
39
  /** A particle's numeric state must stay finite (no NaN/Infinity). */
26
40
  export declare function assertParticleFinite(p: Particle, where?: string): void;
27
41
  /** A registered Shadow-DOM body must produce a usable rectangle. */
@@ -1 +1 @@
1
- {"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/contracts/guards.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,sCAAsC;AACtC,MAAM,MAAM,gBAAgB,GACxB,iBAAiB,GACjB,mBAAmB,GACnB,iBAAiB,GACjB,cAAc,GACd,0BAA0B,GAC1B,wBAAwB,GACxB,+BAA+B,GAC/B,oBAAoB,CAAC;AAEzB,wDAAwD;AACxD,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;gBACpB,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM;CAKpD;AAUD,0FAA0F;AAC1F,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAEnD;AACD,oDAAoD;AACpD,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C;AAQD,qEAAqE;AACrE,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,SAAa,GAAG,IAAI,CAI1E;AAED,oEAAoE;AACpE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,EAAE,EAAE,SAAS,GAAG,IAAI,CAIjF;AAED,iFAAiF;AACjF,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,CAKpG;AAED,iEAAiE;AACjE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,EAAE,KAAK,SAAc,GAAG,IAAI,CAI5F;AAED,sFAAsF;AACtF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAIpE;AAED,oFAAoF;AACpF,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,SAAU,GAAG,IAAI,CAIvF;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,IAAI,SAAkB,GAAG,CAAC,CAO5G;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,EACzC,QAAQ,EAAE,aAAa,GAAG,SAAS,GAClC,IAAI,CAMN"}
1
+ {"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/contracts/guards.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,sCAAsC;AACtC,MAAM,MAAM,gBAAgB,GACxB,iBAAiB,GACjB,mBAAmB,GACnB,iBAAiB,GACjB,cAAc,GACd,0BAA0B,GAC1B,wBAAwB,GACxB,+BAA+B,GAC/B,oBAAoB,CAAC;AAEzB,wDAAwD;AACxD,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;gBACpB,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM;CAKpD;AAUD,0FAA0F;AAC1F,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAEnD;AACD,oDAAoD;AACpD,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C;AAQD;;iCAEiC;AACjC,MAAM,MAAM,eAAe,GACvB,iBAAiB,CAAC;AAItB;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAMxE;AAED,gFAAgF;AAChF,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAID,qEAAqE;AACrE,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,SAAa,GAAG,IAAI,CAI1E;AAED,oEAAoE;AACpE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,EAAE,EAAE,SAAS,GAAG,IAAI,CAIjF;AAED,iFAAiF;AACjF,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,CAKpG;AAED,iEAAiE;AACjE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,EAAE,KAAK,SAAc,GAAG,IAAI,CAI5F;AAED,sFAAsF;AACtF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAIpE;AAED,oFAAoF;AACpF,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,SAAU,GAAG,IAAI,CAIvF;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,IAAI,SAAkB,GAAG,CAAC,CAO5G;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,EACzC,QAAQ,EAAE,aAAa,GAAG,SAAS,GAClC,IAAI,CAMN"}
@@ -25,6 +25,27 @@ export function contractChecksEnabled() {
25
25
  function fail(code, message) {
26
26
  throw new FieldUIError(code, message);
27
27
  }
28
+ const warnedOnce = new Set();
29
+ /**
30
+ * Dev-only, deduped `console.warn` for a SILENT no-op: a method that returned a neutral value
31
+ * because a prerequisite is missing, so an embedder learns *why* nothing happened instead of
32
+ * debugging a mysterious zero. No-op in production (gated by the same `CHECKS` flag the guards use,
33
+ * so a bundler that defines `NODE_ENV` dead-code-eliminates it). Deduped by message, so a call made
34
+ * every frame warns at most once. Never throws — the no-op is legal; this only explains it.
35
+ */
36
+ export function devWarnNoOp(code, message) {
37
+ if (!CHECKS)
38
+ return;
39
+ const key = `${code}:${message}`;
40
+ if (warnedOnce.has(key))
41
+ return;
42
+ warnedOnce.add(key);
43
+ console.warn(`[Fundamental:${code}] ${message}`);
44
+ }
45
+ /** Clear the no-op warning dedup set — for tests that assert the warn fires. */
46
+ export function resetNoOpWarnings() {
47
+ warnedOnce.clear();
48
+ }
28
49
  // ── guards ──────────────────────────────────────────────────────────────────────────────────
29
50
  /** A particle's numeric state must stay finite (no NaN/Infinity). */
30
51
  export function assertParticleFinite(p, where = 'particle') {
@@ -1 +1 @@
1
- {"version":3,"file":"guards.js","sourceRoot":"","sources":["../../src/contracts/guards.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"guards.js","sourceRoot":"","sources":["../../src/contracts/guards.ts"],"names":[],"mappings":"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"}
@@ -21,7 +21,7 @@ export declare function elementMass(area: number): number;
21
21
  * `Σ C·(c − cⱼ)/|c − cⱼ|²` — so a cluster spreads out. Softened near coincidence so
22
22
  * fully-overlapping elements don't blow up. `others` are the other element centres.
23
23
  */
24
- export declare function repelForce(self: Vec2, others: readonly Vec2[], C?: number, soft?: number): Vec2;
24
+ export declare function repelForce(self: Vec2, others: readonly Vec2[], skip?: number, C?: number, soft?: number): Vec2;
25
25
  /**
26
26
  * Density-pressure force (Concept 3): push an element *down* the local density gradient
27
27
  * (toward emptier field), `−∇ρ`, estimated by a 4-tap finite difference of a density
@@ -1 +1 @@
1
- {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/core/agents.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,WAAW,aAAa;IAC5B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,uFAAuF;AACvF,wBAAgB,eAAe,CAC7B,CAAC,EAAE,aAAa,EAChB,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,GAAG,EAAE,MAAM,EACX,QAAQ,SAAM,EACd,SAAS,SAAK,GACb,IAAI,CAWN;AAED,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,SAAO,GAAG,IAAI,CAE5D;AAED,+EAA+E;AAC/E,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGhD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,IAAI,EAAE,EAAE,CAAC,SAAO,EAAE,IAAI,SAAK,GAAG,IAAI,CAYzF;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,EACxC,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,SAAK,EACV,KAAK,SAAI,GACR,IAAI,CAIN"}
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/core/agents.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,WAAW,aAAa;IAC5B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,uFAAuF;AACvF,wBAAgB,eAAe,CAC7B,CAAC,EAAE,aAAa,EAChB,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,GAAG,EAAE,MAAM,EACX,QAAQ,SAAM,EACd,SAAS,SAAK,GACb,IAAI,CAWN;AAED,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,SAAO,GAAG,IAAI,CAE5D;AAED,+EAA+E;AAC/E,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGhD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,IAAI,EAAE,EAAE,IAAI,SAAK,EAAE,CAAC,SAAO,EAAE,IAAI,SAAK,GAAG,IAAI,CAcpG;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,EACxC,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,SAAK,EACV,KAAK,SAAI,GACR,IAAI,CAIN"}
@@ -25,11 +25,14 @@ export function elementMass(area) {
25
25
  * `Σ C·(c − cⱼ)/|c − cⱼ|²` — so a cluster spreads out. Softened near coincidence so
26
26
  * fully-overlapping elements don't blow up. `others` are the other element centres.
27
27
  */
28
- export function repelForce(self, others, C = 1600, soft = 26) {
28
+ export function repelForce(self, others, skip = -1, C = 1600, soft = 26) {
29
29
  let fx = 0;
30
30
  let fy = 0;
31
31
  const s2 = soft * soft;
32
- for (const o of others) {
32
+ for (let i = 0; i < others.length; i++) {
33
+ if (i === skip)
34
+ continue; // exclude self by index — saves a per-frame `others.filter(j !== i)` alloc (#530)
35
+ const o = others[i];
33
36
  const dx = self.x - o.x;
34
37
  const dy = self.y - o.y;
35
38
  const d2 = dx * dx + dy * dy + s2; // softened |c − cⱼ|²
@@ -1 +1 @@
1
- {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/core/agents.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/core/agents.ts"],"names":[],"mappings":"AAcA,uFAAuF;AACvF,MAAM,UAAU,eAAe,CAC7B,CAAgB,EAChB,EAAU,EACV,EAAU,EACV,GAAW,EACX,QAAQ,GAAG,GAAG,EACd,SAAS,GAAG,EAAE;IAEd,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;IAClC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;IAClC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;IACZ,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC;QAClB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC;QAC5B,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,WAAW,CAAC,CAAgB,EAAE,CAAC,GAAG,IAAI;IACpD,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;AACtC,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC;IACvB,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,IAAU,EAAE,MAAuB,EAAE,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,GAAG,EAAE;IAC5F,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,MAAM,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;IACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,IAAI,CAAC,KAAK,IAAI;YAAE,SAAS,CAAC,kFAAkF;QAC5G,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC;QACrB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,qBAAqB;QACxD,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,qDAAqD;QAC1E,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;IACtB,CAAC;IACD,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AAC1B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CACzB,MAAwC,EACxC,CAAS,EACT,CAAS,EACT,KAAK,GAAG,EAAE,EACV,KAAK,GAAG,CAAC;IAET,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IACvE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IACvE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,2CAA2C;AACxF,CAAC"}
@@ -17,6 +17,21 @@ export interface FieldEventMap {
17
17
  body: Body;
18
18
  count: number;
19
19
  };
20
+ /** another body crossed INTO this body's `range` (#441) — the gameplay "entered radius" trigger. */
21
+ enter: {
22
+ body: Body;
23
+ other: Body;
24
+ };
25
+ /** another body crossed OUT of this body's `range` (#441). */
26
+ exit: {
27
+ body: Body;
28
+ other: Body;
29
+ };
30
+ /** two bodies came into contact — their boxes touched/overlapped (#441), once on the rising edge. */
31
+ met: {
32
+ a: Body;
33
+ b: Body;
34
+ };
20
35
  }
21
36
  export type FieldEventType = keyof FieldEventMap;
22
37
  export interface EventBinding {
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/core/events.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAOvC,yEAAyE;AACzE,MAAM,WAAW,aAAa;IAC5B,6EAA6E;IAC7E,MAAM,EAAE;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,mFAAmF;IACnF,OAAO,EAAE;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CACxC;AACD,MAAM,MAAM,cAAc,GAAG,MAAM,aAAa,CAAC;AAEjD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,0FAA0F;AAC1F,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CAU/D;AAED,kCAAkC;AAClC,MAAM,WAAW,YAAY;IAC3B,CAAC,EAAE,MAAM,CAAC;IACV,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,sFAAsF;AACtF,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,GAAG,OAAO,CAavE"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/core/events.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAOvC,yEAAyE;AACzE,MAAM,WAAW,aAAa;IAC5B,6EAA6E;IAC7E,MAAM,EAAE;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,mFAAmF;IACnF,OAAO,EAAE;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC,oGAAoG;IACpG,KAAK,EAAE;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,IAAI,CAAA;KAAE,CAAC;IACnC,8DAA8D;IAC9D,IAAI,EAAE;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,IAAI,CAAA;KAAE,CAAC;IAClC,qGAAqG;IACrG,GAAG,EAAE;QAAE,CAAC,EAAE,IAAI,CAAC;QAAC,CAAC,EAAE,IAAI,CAAA;KAAE,CAAC;CAC3B;AACD,MAAM,MAAM,cAAc,GAAG,MAAM,aAAa,CAAC;AAEjD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,0FAA0F;AAC1F,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CAU/D;AAED,kCAAkC;AAClC,MAAM,WAAW,YAAY;IAC3B,CAAC,EAAE,MAAM,CAAC;IACV,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,sFAAsF;AACtF,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,GAAG,OAAO,CAavE"}
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/core/events.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAyBH,0FAA0F;AAC1F,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,IAAI;SACR,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC7F,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC;AASD,sFAAsF;AACtF,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,CAAe;IAC5D,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,OAAO;YACV,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QACnB,KAAK,QAAQ;YACX,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QACnB,KAAK,SAAS;YACZ,OAAO,CAAC,CAAC,EAAE,CAAC;QACd,KAAK,UAAU;YACb,OAAO,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC;QACxB;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/core/events.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA+BH,0FAA0F;AAC1F,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,IAAI;SACR,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC7F,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC;AASD,sFAAsF;AACtF,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,CAAe;IAC5D,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,OAAO;YACV,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QACnB,KAAK,QAAQ;YACX,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QACnB,KAAK,SAAS;YACZ,OAAO,CAAC,CAAC,EAAE,CAAC;QACd,KAAK,UAAU;YACb,OAAO,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC;QACxB;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"field.d.ts","sourceRoot":"","sources":["../../src/core/field.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAA4C,WAAW,EAAE,YAAY,EAAkD,MAAM,YAAY,CAAC;AA2DtJ,wBAAgB,WAAW,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,GAAE,YAAiB,GAAG,WAAW,CAi+D3F"}
1
+ {"version":3,"file":"field.d.ts","sourceRoot":"","sources":["../../src/core/field.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAA4C,WAAW,EAAE,YAAY,EAAkD,MAAM,YAAY,CAAC;AA2DtJ,wBAAgB,WAAW,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,GAAE,YAAiB,GAAG,WAAW,CA2oE3F"}