incanto 0.50.0 → 0.52.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 (57) hide show
  1. package/dist/2d.d.ts +38 -2
  2. package/dist/2d.js +3 -3
  3. package/dist/3d.d.ts +4 -3
  4. package/dist/3d.js +4 -4
  5. package/dist/{behavior-62q0HWBO.d.ts → behavior-uPEuZrUB.d.ts} +47 -3
  6. package/dist/{create-game-BLDjy_PW.js → create-game-B_e9hJf7.js} +92 -10
  7. package/dist/{create-game-DqqxEax1.js → create-game-CGnoypjL.js} +6 -6
  8. package/dist/debug.d.ts +1 -1
  9. package/dist/debug.js +1 -1
  10. package/dist/{duplicate-CI9WF_bg.js → duplicate-B-OtSRFL.js} +1 -1
  11. package/dist/editor.js +1917 -1579
  12. package/dist/{environment-presets-XFuqu5jv.js → environment-presets-DSZwsKPs.js} +3 -3
  13. package/dist/{gameplay-DbaI313d.js → gameplay-B6jqvYeM.js} +163 -6
  14. package/dist/gameplay.d.ts +79 -2
  15. package/dist/gameplay.js +2 -2
  16. package/dist/index.d.ts +74 -5
  17. package/dist/index.js +7 -7
  18. package/dist/{loader-DwazzlQb.js → loader-B-Gft32x.js} +372 -23
  19. package/dist/{loader-CeyU_bm1.d.ts → loader-B9iTqs27.d.ts} +1 -1
  20. package/dist/net.d.ts +15 -410
  21. package/dist/net.js +1 -822
  22. package/dist/{pathfinding-C49JSNNq.d.ts → pathfinding-CAR9DjQQ.d.ts} +1 -1
  23. package/dist/{physics-2d-_9VBOHn6.js → physics-2d-Dns-oZlE.js} +7 -2
  24. package/dist/{physics-3d-DrpF5hcG.js → physics-3d-BhI0ehpe.js} +8 -3
  25. package/dist/react.d.ts +1 -1
  26. package/dist/react.js +1 -1
  27. package/dist/{register-uvaZj1KX.js → register-DVwlnZAZ.js} +20 -266
  28. package/dist/{register-BNPZYJmd.js → register-Trx7WHnD.js} +3 -3
  29. package/dist/{registry-IyWCGe4q.js → registry-C7u42TID.js} +23 -1
  30. package/dist/{replay-DYdy1wb0.d.ts → replay-BU1CCM15.d.ts} +1 -1
  31. package/dist/{replay-j-m6lJ4W.js → replay-BicPOMX0.js} +214 -2
  32. package/dist/split-screen-CZ9ccBBQ.js +1267 -0
  33. package/dist/split-screen-paxkQs_q.d.ts +441 -0
  34. package/dist/{src-B3HrKuAi.js → src-5gbZO47I.js} +1 -1
  35. package/dist/{teardown-BKTCzLek.js → teardown-ks3d5W9n.js} +2 -1
  36. package/dist/{test-D16igj4C.js → test-DAojuFdb.js} +119 -22
  37. package/dist/test.d.ts +60 -5
  38. package/dist/test.js +3 -3
  39. package/dist/vite.js +2 -2
  40. package/editor/assets/{agent8-t3kl5q9K.js → agent8-CCvckvbw.js} +1 -1
  41. package/editor/assets/{debug-Bu3eeAlO.js → debug-CLNCOnbc.js} +1 -1
  42. package/editor/assets/{index-Df5g8ofT.js → index-Cb5Brupb.js} +99 -92
  43. package/editor/index.html +1 -1
  44. package/package.json +1 -1
  45. package/skills/incanto-assets.md +4 -1
  46. package/skills/incanto-building-2d-games.md +6 -1
  47. package/skills/incanto-editor.md +48 -11
  48. package/skills/incanto-gameplay-behaviors.md +14 -5
  49. package/skills/incanto-multiplayer.md +39 -3
  50. package/skills/incanto-node-reference.md +13 -0
  51. package/skills/incanto-save-slots.md +134 -12
  52. package/skills/incanto-verifying-your-game.md +56 -0
  53. package/templates/agent8-server.ts +79 -2
  54. package/templates-app/beacon-isle-3d/package.json +1 -1
  55. package/templates-app/tps-3d/package.json +1 -1
  56. package/templates-app/village-quest-3d/package.json +1 -1
  57. package/dist/register-CB11yp21.js +0 -374
@@ -1,10 +1,10 @@
1
- import { t as registerCoreNodes } from "./register-uvaZj1KX.js";
1
+ import { t as registerCoreNodes } from "./register-DVwlnZAZ.js";
2
2
  import { t as IncantoError } from "./errors-BpWbnbb_.js";
3
3
  import { t as Rng } from "./rng-DP-SR7eg.js";
4
- import { i as getNodeSchema, l as registerNode } from "./registry-IyWCGe4q.js";
4
+ import { i as getNodeSchema, l as registerNode } from "./registry-C7u42TID.js";
5
5
  import { t as createNoise2D } from "./noise-CGUMx44x.js";
6
6
  import { i as ParticleSim, n as resolveFrames, o as PARTICLE_PRESET_NAMES, r as validateAnimationAliases, s as applyParticlePreset, t as resolveAnimation } from "./sprite-animation-D_p28jwU.js";
7
- import { A as Water3D, F as PhysicsBody3D, H as colliderFootDrop, I as RigidBody3D, L as StaticBody3D, M as WaterCutout3D, N as Area3D, P as CharacterBody3D, R as Node3D } from "./gameplay-DbaI313d.js";
7
+ import { F as CharacterBody3D, I as PhysicsBody3D, L as RigidBody3D, N as WaterCutout3D, P as Area3D, R as StaticBody3D, U as colliderFootDrop, j as Water3D, z as Node3D } from "./gameplay-B6jqvYeM.js";
8
8
  import { n as splatWeights, t as buildHeightmap } from "./heightmap-CRK0M4jT.js";
9
9
  import { AdditiveBlending, AnimationClip, AnimationMixer, Box3, BoxGeometry, BufferAttribute, BufferGeometry, CanvasTexture, CapsuleGeometry, ClampToEdgeWrapping, Color, ConeGeometry, CylinderGeometry, DataTexture, DirectionalLight, DoubleSide, DynamicDrawUsage, Euler, Group, IcosahedronGeometry, ImageBitmapLoader, InstancedBufferAttribute, InstancedMesh, LinearFilter, LinearMipmapLinearFilter, LoopOnce, LoopRepeat, Matrix4, Mesh, MeshBasicMaterial, MeshDepthMaterial, MeshPhysicalMaterial, MeshStandardMaterial, NearestFilter, NoBlending, NoColorSpace, NormalBlending, PerspectiveCamera, PlaneGeometry, PointLight, Points, PointsMaterial, Quaternion, QuaternionKeyframeTrack, RGBADepthPacking, RGBAFormat, RepeatWrapping, SRGBColorSpace, ShaderChunk, ShaderMaterial, SphereGeometry, Texture, TextureLoader, UniformsLib, UniformsUtils, Vector3, Vector4, VectorKeyframeTrack } from "three";
10
10
  import { clone } from "three/addons/utils/SkeletonUtils.js";
@@ -1,7 +1,7 @@
1
- import { f as Node, h as effectiveOrder, n as loadScene, w as registerBehavior, y as Behavior } from "./loader-DwazzlQb.js";
1
+ import { A as registerBehavior, T as Behavior, b as effectiveOrder, f as Node, n as loadScene, p as SaveSlots } from "./loader-B-Gft32x.js";
2
2
  import { t as IncantoError } from "./errors-BpWbnbb_.js";
3
3
  import { t as jsonClone } from "./json-BLk7H2Qa.js";
4
- import { t as duplicateNode } from "./duplicate-CI9WF_bg.js";
4
+ import { t as duplicateNode } from "./duplicate-B-OtSRFL.js";
5
5
  import { Color, CubeCamera, DepthTexture, DoubleSide, Euler, FloatType, Frustum, HalfFloatType, LinearMipmapLinearFilter, MathUtils, Matrix4, Mesh, MeshDepthMaterial, Object3D, PerspectiveCamera, Plane, PlaneGeometry, Quaternion, ShaderMaterial, Sphere, Vector2, Vector3, Vector4, WebGLCubeRenderTarget, WebGLRenderTarget } from "three";
6
6
  //#region src/3d/frustum.ts
7
7
  const scratchFrustum = new Frustum();
@@ -4374,7 +4374,8 @@ var Chase = class extends Behavior {
4374
4374
  /** NodePath of the node to chase (resolved from THIS behavior's node). */
4375
4375
  target: {
4376
4376
  default: "",
4377
- nodePath: true
4377
+ nodePath: true,
4378
+ required: true
4378
4379
  },
4379
4380
  /** Units per second toward the target. */
4380
4381
  speed: { default: 60 },
@@ -4909,7 +4910,8 @@ var FollowCamera = class extends Behavior {
4909
4910
  /** NodePath of the node to follow (relative to this node, or absolute). */
4910
4911
  target: {
4911
4912
  default: "",
4912
- nodePath: true
4913
+ nodePath: true,
4914
+ required: true
4913
4915
  },
4914
4916
  /** Constant offset added to the target's position ([x,y] or [x,y,z]). */
4915
4917
  offset: { default: [] },
@@ -5754,8 +5756,8 @@ var Pickup = class extends Behavior {
5754
5756
  const collector = findCollector(other, this.collectorGroup);
5755
5757
  if (!collector) return;
5756
5758
  this.collectedAlready = true;
5757
- this.emit("collected", this.value, collector);
5758
5759
  this.node.queueFree();
5760
+ this.emit("collected", this.value, collector);
5759
5761
  }
5760
5762
  };
5761
5763
  /**
@@ -5856,6 +5858,160 @@ var Projectile = class extends Behavior {
5856
5858
  }
5857
5859
  };
5858
5860
  //#endregion
5861
+ //#region src/gameplay/save-point.ts
5862
+ /**
5863
+ * The save, as something the scene can point a signal at.
5864
+ *
5865
+ * Every other common wiring in this engine became declarative — score to
5866
+ * screen, damage to health bar, waves, win and lose — and saving stayed the one
5867
+ * thing that needed TypeScript. The skill's own autosave example is a
5868
+ * connection to `Game.onCheckpoint`, a method the author has to go and write.
5869
+ *
5870
+ * "*When* to save is a design decision and only your game knows" is right, and
5871
+ * it is untouched here: the SCENE still says when, by choosing which signal to
5872
+ * wire — a level exit's `triggerEnter`, `won`, a key. What it gets is something
5873
+ * to wire TO.
5874
+ *
5875
+ * ```json
5876
+ * { "name": "Save", "type": "Node", "uid": "n_…",
5877
+ * "script": { "name": "SavePoint", "props": { "game": "vault", "slot": "1" } } }
5878
+ * ```
5879
+ * ```json
5880
+ * { "signal": "triggerEnter", "from": "Level/Exit", "to": "Save", "handler": "save" }
5881
+ * ```
5882
+ */
5883
+ var SavePoint = class extends Behavior {
5884
+ static props = {
5885
+ /** Namespace for this game's slots — keeps two games on one origin apart. */
5886
+ game: { default: "game" },
5887
+ /** Which slot this node writes and reads. */
5888
+ slot: { default: "1" },
5889
+ /** Shown in a load menu. */
5890
+ label: { default: "" },
5891
+ /**
5892
+ * The scene key a load should route back to. Empty = this scene's `name`.
5893
+ * The engine does not route scenes; it records what your loader will need.
5894
+ */
5895
+ scene: { default: "" },
5896
+ /** Read the slot back as soon as the scene is ready — a "Continue" boot. */
5897
+ restoreOnReady: { default: false },
5898
+ /**
5899
+ * Ask, without loading: on the first frame, emit `hasSave(label, playtime)`
5900
+ * or `noSave`. A title screen needs this and nothing else — the scene can
5901
+ * then wire `noSave → Continue.hide` and `hasSave → SlotInfo.setText`.
5902
+ */
5903
+ probeOnReady: { default: false }
5904
+ };
5905
+ static signals = [
5906
+ "saved",
5907
+ "restored",
5908
+ "noSave",
5909
+ "hasSave"
5910
+ ];
5911
+ game = "game";
5912
+ slot = "1";
5913
+ label = "";
5914
+ scene = "";
5915
+ restoreOnReady = false;
5916
+ probeOnReady = false;
5917
+ /** Seconds this run has been playing — written into the slot as `playtime`. */
5918
+ elapsed = 0;
5919
+ slots = null;
5920
+ store() {
5921
+ this.slots ??= new SaveSlots(this.game);
5922
+ return this.slots;
5923
+ }
5924
+ pendingRestore = false;
5925
+ pendingProbe = false;
5926
+ onReady() {
5927
+ this.pendingRestore = this.restoreOnReady;
5928
+ this.pendingProbe = this.probeOnReady;
5929
+ }
5930
+ update(dt) {
5931
+ if (this.pendingProbe) {
5932
+ this.pendingProbe = false;
5933
+ this.probe();
5934
+ }
5935
+ if (this.pendingRestore) {
5936
+ this.pendingRestore = false;
5937
+ this.restore();
5938
+ }
5939
+ this.elapsed += dt;
5940
+ }
5941
+ /**
5942
+ * Is there anything to continue? Emits `hasSave(label, playtime, scene)` or
5943
+ * `noSave`, and touches nothing.
5944
+ *
5945
+ * The label leads because that is what a menu shows; an unlabelled slot
5946
+ * falls back to its scene key, so `hasSave → SlotInfo.setText` always says
5947
+ * something rather than nothing.
5948
+ */
5949
+ probe() {
5950
+ const slot = this.store().read(this.slot);
5951
+ if (!slot) {
5952
+ this.emit("noSave");
5953
+ return;
5954
+ }
5955
+ this.emit("hasSave", slot.label || slot.scene, slot.playtime, slot.scene);
5956
+ }
5957
+ /** Seconds this run has been playing, including time carried over a continue. */
5958
+ get playtime() {
5959
+ return Math.round(this.elapsed);
5960
+ }
5961
+ /**
5962
+ * The scene key this slot was saved from — what a loader needs to route.
5963
+ * Null when the slot is empty.
5964
+ */
5965
+ slotScene() {
5966
+ return this.store().read(this.slot)?.scene ?? null;
5967
+ }
5968
+ /**
5969
+ * Write the run to its slot. Emits `saved(slotId)`.
5970
+ *
5971
+ * Wire it to whatever marks the moment. Extra signal arguments are ignored,
5972
+ * so `triggerEnter → save` works as-is.
5973
+ */
5974
+ save() {
5975
+ const engine = this.engine;
5976
+ this.store().write(this.slot, {
5977
+ scene: this.scene || (engine.scene?.source.name ?? ""),
5978
+ state: engine.captureState(),
5979
+ label: this.label,
5980
+ savedAt: Date.now(),
5981
+ playtime: Math.round(this.elapsed)
5982
+ });
5983
+ this.emit("saved", this.slot);
5984
+ }
5985
+ /**
5986
+ * Give this scene the slot's state back. Emits `restored(count)`, or
5987
+ * `noSave` when the slot is empty — which is what greys out a Continue button.
5988
+ *
5989
+ * Restoring does NOT route: if the slot names another scene, that is your
5990
+ * loader's business, and `slot.scene` is the key it needs.
5991
+ */
5992
+ restore() {
5993
+ const slot = this.store().read(this.slot);
5994
+ if (!slot) {
5995
+ this.emit("noSave");
5996
+ return;
5997
+ }
5998
+ const report = this.engine.restoreState(slot.state);
5999
+ this.emit("restored", report.restored);
6000
+ }
6001
+ /** Forget this slot — a "delete save" button. */
6002
+ clear() {
6003
+ this.store().remove(this.slot);
6004
+ }
6005
+ /** The run's own clock survives a save/continue cycle. */
6006
+ serialize() {
6007
+ return { playtime: Math.round(this.elapsed) };
6008
+ }
6009
+ deserialize(data) {
6010
+ const d = data;
6011
+ if (typeof d.playtime === "number" && d.playtime >= 0) this.elapsed = d.playtime;
6012
+ }
6013
+ };
6014
+ //#endregion
5859
6015
  //#region src/gameplay/score-keeper.ts
5860
6016
  /**
5861
6017
  * The game's state hub — score, lives, and win/lose detection. Put it on the
@@ -6460,6 +6616,7 @@ const GAMEPLAY_BEHAVIORS = {
6460
6616
  DamageOnContact,
6461
6617
  Interactable,
6462
6618
  Clickable,
6619
+ SavePoint,
6463
6620
  FollowCamera,
6464
6621
  Patrol,
6465
6622
  Chase,
@@ -6482,4 +6639,4 @@ function registerGameplayBehaviors(opts) {
6482
6639
  for (const [name, ctor] of Object.entries(GAMEPLAY_BEHAVIORS)) registerBehavior(name, ctor, { replace });
6483
6640
  }
6484
6641
  //#endregion
6485
- export { Water3D as A, createCausticsQuad as B, FollowCamera as C, Health as D, DamageOnContact as E, PhysicsBody3D as F, colliderFootDrop as H, RigidBody3D as I, StaticBody3D as L, WaterCutout3D as M, Area3D as N, Collector as O, CharacterBody3D as P, Node3D as R, restartScene as S, phaseOf as T, WATER_MAX_RIPPLES as V, hitStop as _, Wander as a, GameFlow as b, Projectile as c, PathFollow as d, Oscillate as f, Cooldown as g, CameraShake as h, WaveSpawner as i, WATER_CUTOUT_MAX as j, Chase as k, Pickup as l, Lifetime as m, registerGameplayBehaviors as n, Spawner as o, MoveTo as p, ZombieAI as r, ScoreKeeper as s, GAMEPLAY_BEHAVIORS as t, Patrol as u, screenFlash as v, DayNight as w, goToScene as x, Interactable as y, validateCollider3D as z };
6642
+ export { Chase as A, validateCollider3D as B, restartScene as C, DamageOnContact as D, phaseOf as E, CharacterBody3D as F, WATER_MAX_RIPPLES as H, PhysicsBody3D as I, RigidBody3D as L, WATER_CUTOUT_MAX as M, WaterCutout3D as N, Health as O, Area3D as P, StaticBody3D as R, goToScene as S, DayNight as T, colliderFootDrop as U, createCausticsQuad as V, Cooldown as _, Wander as a, Interactable as b, SavePoint as c, Patrol as d, PathFollow as f, CameraShake as g, Lifetime as h, WaveSpawner as i, Water3D as j, Collector as k, Projectile as l, MoveTo as m, registerGameplayBehaviors as n, Spawner as o, Oscillate as p, ZombieAI as r, ScoreKeeper as s, GAMEPLAY_BEHAVIORS as t, Pickup as u, hitStop as v, FollowCamera as w, GameFlow as x, screenFlash as y, Node3D as z };
@@ -1,4 +1,4 @@
1
- import { Et as Node, b as Engine, d as PropSchema, n as BehaviorCtor, t as Behavior } from "./behavior-62q0HWBO.js";
1
+ import { Dt as Node, b as Engine, d as PropSchema, n as BehaviorCtor, t as Behavior } from "./behavior-uPEuZrUB.js";
2
2
  import { c as JsonValue, s as JsonObject } from "./schema-CFeioQRE.js";
3
3
 
4
4
  //#region src/gameplay/chase.d.ts
@@ -375,6 +375,83 @@ declare class Projectile extends Behavior {
375
375
  private forwardFromRotation;
376
376
  }
377
377
  //#endregion
378
+ //#region src/gameplay/save-point.d.ts
379
+ /**
380
+ * The save, as something the scene can point a signal at.
381
+ *
382
+ * Every other common wiring in this engine became declarative — score to
383
+ * screen, damage to health bar, waves, win and lose — and saving stayed the one
384
+ * thing that needed TypeScript. The skill's own autosave example is a
385
+ * connection to `Game.onCheckpoint`, a method the author has to go and write.
386
+ *
387
+ * "*When* to save is a design decision and only your game knows" is right, and
388
+ * it is untouched here: the SCENE still says when, by choosing which signal to
389
+ * wire — a level exit's `triggerEnter`, `won`, a key. What it gets is something
390
+ * to wire TO.
391
+ *
392
+ * ```json
393
+ * { "name": "Save", "type": "Node", "uid": "n_…",
394
+ * "script": { "name": "SavePoint", "props": { "game": "vault", "slot": "1" } } }
395
+ * ```
396
+ * ```json
397
+ * { "signal": "triggerEnter", "from": "Level/Exit", "to": "Save", "handler": "save" }
398
+ * ```
399
+ */
400
+ declare class SavePoint extends Behavior {
401
+ static readonly props: PropSchema;
402
+ static readonly signals: readonly string[];
403
+ game: string;
404
+ slot: string;
405
+ label: string;
406
+ scene: string;
407
+ restoreOnReady: boolean;
408
+ probeOnReady: boolean;
409
+ /** Seconds this run has been playing — written into the slot as `playtime`. */
410
+ private elapsed;
411
+ private slots;
412
+ private store;
413
+ private pendingRestore;
414
+ private pendingProbe;
415
+ override onReady(): void;
416
+ override update(dt: number): void;
417
+ /**
418
+ * Is there anything to continue? Emits `hasSave(label, playtime, scene)` or
419
+ * `noSave`, and touches nothing.
420
+ *
421
+ * The label leads because that is what a menu shows; an unlabelled slot
422
+ * falls back to its scene key, so `hasSave → SlotInfo.setText` always says
423
+ * something rather than nothing.
424
+ */
425
+ probe(): void;
426
+ /** Seconds this run has been playing, including time carried over a continue. */
427
+ get playtime(): number;
428
+ /**
429
+ * The scene key this slot was saved from — what a loader needs to route.
430
+ * Null when the slot is empty.
431
+ */
432
+ slotScene(): string | null;
433
+ /**
434
+ * Write the run to its slot. Emits `saved(slotId)`.
435
+ *
436
+ * Wire it to whatever marks the moment. Extra signal arguments are ignored,
437
+ * so `triggerEnter → save` works as-is.
438
+ */
439
+ save(): void;
440
+ /**
441
+ * Give this scene the slot's state back. Emits `restored(count)`, or
442
+ * `noSave` when the slot is empty — which is what greys out a Continue button.
443
+ *
444
+ * Restoring does NOT route: if the slot names another scene, that is your
445
+ * loader's business, and `slot.scene` is the key it needs.
446
+ */
447
+ restore(): void;
448
+ /** Forget this slot — a "delete save" button. */
449
+ clear(): void;
450
+ /** The run's own clock survives a save/continue cycle. */
451
+ override serialize(): JsonValue;
452
+ override deserialize(data: JsonValue): void;
453
+ }
454
+ //#endregion
378
455
  //#region src/gameplay/score-keeper.d.ts
379
456
  /**
380
457
  * The game's state hub — score, lives, and win/lose detection. Put it on the
@@ -787,4 +864,4 @@ declare function registerGameplayBehaviors(opts?: {
787
864
  replace?: boolean;
788
865
  }): void;
789
866
  //#endregion
790
- export { CameraShake, Chase, Collector, Cooldown, DamageOnContact, DayNight, type DayPhase, FollowCamera, GAMEPLAY_BEHAVIORS, GameFlow, type GameFlowState, Health, Interactable, Lifetime, MoveTo, Oscillate, PathFollow, Patrol, Pickup, Projectile, ScoreKeeper, Spawner, Wander, WaveSpawner, ZombieAI, goToScene, hitStop, phaseOf, registerGameplayBehaviors, restartScene, screenFlash };
867
+ export { CameraShake, Chase, Collector, Cooldown, DamageOnContact, DayNight, type DayPhase, FollowCamera, GAMEPLAY_BEHAVIORS, GameFlow, type GameFlowState, Health, Interactable, Lifetime, MoveTo, Oscillate, PathFollow, Patrol, Pickup, Projectile, SavePoint, ScoreKeeper, Spawner, Wander, WaveSpawner, ZombieAI, goToScene, hitStop, phaseOf, registerGameplayBehaviors, restartScene, screenFlash };
package/dist/gameplay.js CHANGED
@@ -1,2 +1,2 @@
1
- import { C as FollowCamera, D as Health, E as DamageOnContact, O as Collector, S as restartScene, T as phaseOf, _ as hitStop, a as Wander, b as GameFlow, c as Projectile, d as PathFollow, f as Oscillate, g as Cooldown, h as CameraShake, i as WaveSpawner, k as Chase, l as Pickup, m as Lifetime, n as registerGameplayBehaviors, o as Spawner, p as MoveTo, r as ZombieAI, s as ScoreKeeper, t as GAMEPLAY_BEHAVIORS, u as Patrol, v as screenFlash, w as DayNight, x as goToScene, y as Interactable } from "./gameplay-DbaI313d.js";
2
- export { CameraShake, Chase, Collector, Cooldown, DamageOnContact, DayNight, FollowCamera, GAMEPLAY_BEHAVIORS, GameFlow, Health, Interactable, Lifetime, MoveTo, Oscillate, PathFollow, Patrol, Pickup, Projectile, ScoreKeeper, Spawner, Wander, WaveSpawner, ZombieAI, goToScene, hitStop, phaseOf, registerGameplayBehaviors, restartScene, screenFlash };
1
+ import { A as Chase, C as restartScene, D as DamageOnContact, E as phaseOf, O as Health, S as goToScene, T as DayNight, _ as Cooldown, a as Wander, b as Interactable, c as SavePoint, d as Patrol, f as PathFollow, g as CameraShake, h as Lifetime, i as WaveSpawner, k as Collector, l as Projectile, m as MoveTo, n as registerGameplayBehaviors, o as Spawner, p as Oscillate, r as ZombieAI, s as ScoreKeeper, t as GAMEPLAY_BEHAVIORS, u as Pickup, v as hitStop, w as FollowCamera, x as GameFlow, y as screenFlash } from "./gameplay-B6jqvYeM.js";
2
+ export { CameraShake, Chase, Collector, Cooldown, DamageOnContact, DayNight, FollowCamera, GAMEPLAY_BEHAVIORS, GameFlow, Health, Interactable, Lifetime, MoveTo, Oscillate, PathFollow, Patrol, Pickup, Projectile, SavePoint, ScoreKeeper, Spawner, Wander, WaveSpawner, ZombieAI, goToScene, hitStop, phaseOf, registerGameplayBehaviors, restartScene, screenFlash };
package/dist/index.d.ts CHANGED
@@ -1,10 +1,10 @@
1
- import { $ as suggestLocale, A as SettingsValues, At as LogLevel, B as captureBehaviors, C as EngineStats, Ct as PlayMusicOptions, Dt as NodeLifecycle, E as DeviceHints, Et as Node, F as BehaviorState, G as OrderGroup, H as SaveStore, I as RestoreReport, J as resolveOrderGroups, K as OrderGroupTable, L as SaveSlot, M as readDeviceHints, Mt as Signal, N as suggestQuality, Nt as SignalListener, O as QualityTier, Ot as SceneTree, P as Scene, Q as T_PREFIX, R as SaveSlots, S as Scheduler, St as MusicTrack, T as RendererStats, Tt as BusName, U as createSaveStore, V as restoreBehaviors, W as ORDER_GROUP_BASE, X as LocaleTables, Y as BASE_LOCALE, Z as Localization, _ as mergeStaticSignals, _t as SfxWave, a as clearBehaviors, at as Voice, b as Engine, bt as MusicBackend, c as registeredBehaviors, ct as ROLLOFF_MODELS, d as PropSchema, dt as Vec3, et as translationKey, f as clearRegistry, ft as spatialGain, g as getNodeType, gt as SfxParams, h as getNodeSignals, ht as SFX_PRESET_NAMES, i as behaviorSignals, it as isAudioContextAvailable, j as qualityEnvironment, jt as LogManager, k as Settings, kt as LogEntry, l as NodeCtor, lt as RolloffModel, m as getNodeSchema, mt as SFX_PRESETS, n as BehaviorCtor, nt as SfxEngine, o as getBehavior, ot as VoicePreset, p as createNode, pt as spatialPan, q as effectiveOrder, r as behaviorSchema, rt as SfxPlayOptions, s as registerBehavior, st as Listener, t as Behavior, tt as InputMap, u as PropDef, ut as SpatialParams, v as registerNode, vt as SynthOptions, w as GameStats, wt as AudioBuses, x as EngineOptions, xt as MusicManager, y as registeredTypes, yt as synthSfx, z as behaviorsWithoutSave } from "./behavior-62q0HWBO.js";
1
+ import { $ as T_PREFIX, A as SettingsValues, At as LogEntry, B as captureBehaviors, C as EngineStats, Ct as MusicTrack, Dt as Node, E as DeviceHints, Et as BusName, F as BehaviorState, G as ORDER_GROUP_BASE, H as savesWithoutUid, I as RestoreReport, J as effectiveOrder, K as OrderGroup, L as SaveSlot, M as readDeviceHints, Mt as LogManager, N as suggestQuality, Nt as Signal, O as QualityTier, Ot as NodeLifecycle, P as Scene, Pt as SignalListener, Q as Localization, R as SaveSlots, S as Scheduler, St as MusicManager, T as RendererStats, Tt as AudioBuses, U as SaveStore, V as restoreBehaviors, W as createSaveStore, X as BASE_LOCALE, Y as resolveOrderGroups, Z as LocaleTables, _ as mergeStaticSignals, _t as SfxParams, a as clearBehaviors, at as isAudioContextAvailable, b as Engine, bt as synthSfx, c as registeredBehaviors, ct as Listener, d as PropSchema, dt as SpatialParams, et as suggestLocale, f as clearRegistry, ft as Vec3, g as getNodeType, gt as SFX_PRESET_NAMES, h as getNodeSignals, ht as SFX_PRESETS, i as behaviorSignals, it as SfxPlayOptions, j as qualityEnvironment, jt as LogLevel, k as Settings, kt as SceneTree, l as NodeCtor, lt as ROLLOFF_MODELS, m as getNodeSchema, mt as spatialPan, n as BehaviorCtor, nt as InputMap, o as getBehavior, ot as Voice, p as createNode, pt as spatialGain, q as OrderGroupTable, r as behaviorSchema, rt as SfxEngine, s as registerBehavior, st as VoicePreset, t as Behavior, tt as translationKey, u as PropDef, ut as RolloffModel, v as registerNode, vt as SfxWave, w as GameStats, wt as PlayMusicOptions, x as EngineOptions, xt as MusicBackend, y as registeredTypes, yt as SynthOptions, z as behaviorsWithoutSave } from "./behavior-uPEuZrUB.js";
2
2
  import { a as Rng, c as JsonValue, d as jsonKind, i as SceneJson, l as jsonClone, n as NodeJson, o as JsonKind, r as SCENE_FORMAT, s as JsonObject, t as ConnectionJson, u as jsonEquals } from "./schema-CFeioQRE.js";
3
- import { n as loadScene, t as LoadSceneOptions } from "./loader-CeyU_bm1.js";
3
+ import { n as loadScene, t as LoadSceneOptions } from "./loader-B9iTqs27.js";
4
4
  import { i as resolveFrames, n as AnimationEntry, r as resolveAnimation, t as AnimationDef } from "./sprite-animation-CMr6f1K2.js";
5
5
  import { n as ParticleSimConfig, r as ParticleView, t as ParticleSim } from "./particle-sim-BzJ1yxoE.js";
6
- import { a as AudioElementLike, i as gridFromRows, n as PathGrid, o as AudioPlayer, r as findPath, t as FindPathOptions } from "./pathfinding-C49JSNNq.js";
7
- import { a as startRecording, c as IncantoErrorDetails, i as replay, l as auditScene, n as ReplayEvent, o as IncantoError, r as ReplayJson, s as IncantoErrorCode, t as Recorder } from "./replay-DYdy1wb0.js";
6
+ import { a as AudioElementLike, i as gridFromRows, n as PathGrid, o as AudioPlayer, r as findPath, t as FindPathOptions } from "./pathfinding-CAR9DjQQ.js";
7
+ import { a as startRecording, c as IncantoErrorDetails, i as replay, l as auditScene, n as ReplayEvent, o as IncantoError, r as ReplayJson, s as IncantoErrorCode, t as Recorder } from "./replay-BU1CCM15.js";
8
8
 
9
9
  //#region src/core/audio/crossfade.d.ts
10
10
  /**
@@ -189,6 +189,66 @@ type ParsedNodePath = {
189
189
  };
190
190
  declare function parseNodePath(path: string): ParsedNodePath;
191
191
  //#endregion
192
+ //#region src/core/node-refs.d.ts
193
+ /** The scene-JSON shape this walks. */
194
+ interface RefNode {
195
+ name?: string;
196
+ type?: string;
197
+ props?: JsonObject;
198
+ script?: {
199
+ name?: string;
200
+ props?: JsonObject;
201
+ };
202
+ children?: RefNode[];
203
+ }
204
+ /** Why a written path leads nowhere. Structured so callers can localize it. */
205
+ type RefProblem = {
206
+ kind: "grammar";
207
+ message: string;
208
+ } | {
209
+ kind: "noMatch";
210
+ name: string;
211
+ } | {
212
+ kind: "ambiguous";
213
+ name: string;
214
+ count: number;
215
+ } | {
216
+ kind: "wrongRoot";
217
+ first: string;
218
+ root: string;
219
+ } | {
220
+ kind: "noChild";
221
+ parent: string;
222
+ segment: string;
223
+ } | {
224
+ kind: "aboveRoot";
225
+ };
226
+ type RefResult = {
227
+ ok: true;
228
+ path: number[];
229
+ } | {
230
+ ok: false;
231
+ problem: RefProblem;
232
+ };
233
+ /**
234
+ * Resolve `value` from the node at `owner`, the way the engine would.
235
+ *
236
+ * Note the asymmetry with connections, whose paths resolve from the SCENE ROOT:
237
+ * a prop's path resolves from the node holding it, which is why `'../Skin'` is
238
+ * the documented default of `CharacterController3D.skinPath` and would mean
239
+ * nothing in a connection.
240
+ */
241
+ declare function resolveRefInJson(root: RefNode | undefined, owner: readonly number[], value: string): RefResult;
242
+ /** The problem in English, for `incanto-check` and as the editor's base text. */
243
+ declare function describeRefProblem(problem: RefProblem, value: string): string;
244
+ /**
245
+ * Scene lints for node-path props that point at nothing.
246
+ *
247
+ * An EMPTY value is not reported: `''` is the default of most of these props and
248
+ * means "not set", which is a choice rather than a typo.
249
+ */
250
+ declare function nodeRefWarnings(scene: JsonObject): string[];
251
+ //#endregion
192
252
  //#region src/core/nodes/hud.d.ts
193
253
  /**
194
254
  * DOM-backed HUD widgets — the layer 18 of 22 example games hand-rolled.
@@ -258,6 +318,15 @@ declare class HudLayer extends Node {
258
318
  }
259
319
  /** Shared plumbing: mount into the parent HudLayer's anchor slot. */
260
320
  declare abstract class HudWidgetBase extends Node {
321
+ /**
322
+ * Wireable visibility: `noSave → Continue.hide`.
323
+ *
324
+ * `visible` is a prop, and a `connections[]` handler has to be a METHOD — the
325
+ * same wall that kept a score off the screen until widgets grew `setText`. A
326
+ * title screen greying out its own Continue button is the case that asked.
327
+ */
328
+ show(..._args: unknown[]): void;
329
+ hide(): void;
261
330
  static readonly props: PropSchema;
262
331
  static readonly signals: readonly string[];
263
332
  anchor: HudAnchor;
@@ -848,4 +917,4 @@ declare function computeViewport(canvasW: number, canvasH: number, viewport: {
848
917
  /** Engine version. Kept in sync with package.json by the release pipeline. */
849
918
  declare const VERSION: string;
850
919
  //#endregion
851
- export { type AnimationDef, type AnimationEntry, type AssetFailure, AudioBuses, type AudioElementLike, AudioPlayer, BASE_LOCALE, Behavior, type BehaviorCtor, type BehaviorState, type BusName, CONST_REF_KEY, type ComputedViewport, type ConnectionJson, type CrossfadeGains, type DebugLineSource, type DeviceHints, type DriveScript, type DriveStep, Engine, type EngineOptions, type EngineStats, type FindPathOptions, type GameStats, type GroupedLog, type HudAnchor, HudLayer, IncantoError, type IncantoErrorCode, type IncantoErrorDetails, InputMap, type JsonKind, type JsonObject, type JsonValue, type Listener, type LiveInput, type LiveReport, type LoadSceneOptions, type LocaleTables, Localization, type LogEntry, type LogLevel, LogManager, type MusicBackend, MusicManager, type MusicTrack, Node, type NodeCtor, type NodeJson, type NodeLifecycle, ORDER_GROUP_BASE, type OrderGroup, type OrderGroupTable, PARTICLE_PRESETS, PARTICLE_PRESET_NAMES, type ParsedNodePath, type ParticlePresetValues, ParticleSim, type ParticleSimConfig, type ParticleView, type PathGrid, type PlayMusicOptions, type PreloadResult, type PropDef, type PropSchema, type QualityTier, ROLLOFF_MODELS, type Recorder, type RendererStats, type ReplayEvent, type ReplayJson, type ResolvedRendering, type ResolvedViewport, type RestoreReport, Rng, type RolloffModel, SCENE_FORMAT, SFX_PRESETS, SFX_PRESET_NAMES, type SaveSlot, SaveSlots, type SaveStore, Scene, type SceneJson, SceneTree, type Scheduler, Settings, type SettingsValues, SfxEngine, type SfxParams, type SfxPlayOptions, type SfxWave, Signal, type SignalListener, type SpatialParams, type SynthOptions, T_PREFIX, Timer, TouchControls, type TouchControlsOptions, UiBanner, UiBar, UiButton, UiDialogue, UiImage, UiPanel, UiSelect, UiSlider, UiText, UiToggle, VERSION, type Vec3, type ViewportFit, type Voice, type VoicePreset, WebAudioMusicBackend, applyParticlePreset, assetUrls, attachTouchControls, auditScene, behaviorSchema, behaviorSignals, behaviorsWithoutSave, captureBehaviors, clearBehaviors, clearRegistry, computeViewport, createNode, createNoise2D, createSaveStore, crossfadeGains, duplicateNode, effectiveOrder, fadeGain, findPath, getBehavior, getNodeSchema, getNodeSignals, getNodeType, gridFromRows, isAudioContextAvailable, isConstRef, joystickVector, jsonClone, jsonEquals, jsonKind, loadScene, logReport, logText, mergeStaticSignals, newUid, parseDrive, parseNodePath, preloadUrls, qualityEnvironment, readDeviceHints, registerBehavior, registerCoreNodes, registerNode, registeredBehaviors, registeredTypes, replay, resolveAnimation, resolveConstants, resolveFrames, resolveOrderGroups, resolveRendering, resolveViewport, restoreBehaviors, serializeNode, spatialGain, spatialPan, startRecording, suggestLocale, suggestQuality, synthSfx, translationKey };
920
+ export { type AnimationDef, type AnimationEntry, type AssetFailure, AudioBuses, type AudioElementLike, AudioPlayer, BASE_LOCALE, Behavior, type BehaviorCtor, type BehaviorState, type BusName, CONST_REF_KEY, type ComputedViewport, type ConnectionJson, type CrossfadeGains, type DebugLineSource, type DeviceHints, type DriveScript, type DriveStep, Engine, type EngineOptions, type EngineStats, type FindPathOptions, type GameStats, type GroupedLog, type HudAnchor, HudLayer, IncantoError, type IncantoErrorCode, type IncantoErrorDetails, InputMap, type JsonKind, type JsonObject, type JsonValue, type Listener, type LiveInput, type LiveReport, type LoadSceneOptions, type LocaleTables, Localization, type LogEntry, type LogLevel, LogManager, type MusicBackend, MusicManager, type MusicTrack, Node, type NodeCtor, type NodeJson, type NodeLifecycle, ORDER_GROUP_BASE, type OrderGroup, type OrderGroupTable, PARTICLE_PRESETS, PARTICLE_PRESET_NAMES, type ParsedNodePath, type ParticlePresetValues, ParticleSim, type ParticleSimConfig, type ParticleView, type PathGrid, type PlayMusicOptions, type PreloadResult, type PropDef, type PropSchema, type QualityTier, ROLLOFF_MODELS, type Recorder, type RefNode, type RefProblem, type RefResult, type RendererStats, type ReplayEvent, type ReplayJson, type ResolvedRendering, type ResolvedViewport, type RestoreReport, Rng, type RolloffModel, SCENE_FORMAT, SFX_PRESETS, SFX_PRESET_NAMES, type SaveSlot, SaveSlots, type SaveStore, Scene, type SceneJson, SceneTree, type Scheduler, Settings, type SettingsValues, SfxEngine, type SfxParams, type SfxPlayOptions, type SfxWave, Signal, type SignalListener, type SpatialParams, type SynthOptions, T_PREFIX, Timer, TouchControls, type TouchControlsOptions, UiBanner, UiBar, UiButton, UiDialogue, UiImage, UiPanel, UiSelect, UiSlider, UiText, UiToggle, VERSION, type Vec3, type ViewportFit, type Voice, type VoicePreset, WebAudioMusicBackend, applyParticlePreset, assetUrls, attachTouchControls, auditScene, behaviorSchema, behaviorSignals, behaviorsWithoutSave, captureBehaviors, clearBehaviors, clearRegistry, computeViewport, createNode, createNoise2D, createSaveStore, crossfadeGains, describeRefProblem, duplicateNode, effectiveOrder, fadeGain, findPath, getBehavior, getNodeSchema, getNodeSignals, getNodeType, gridFromRows, isAudioContextAvailable, isConstRef, joystickVector, jsonClone, jsonEquals, jsonKind, loadScene, logReport, logText, mergeStaticSignals, newUid, nodeRefWarnings, parseDrive, parseNodePath, preloadUrls, qualityEnvironment, readDeviceHints, registerBehavior, registerCoreNodes, registerNode, registeredBehaviors, registeredTypes, replay, resolveAnimation, resolveConstants, resolveFrames, resolveOrderGroups, resolveRefInJson, resolveRendering, resolveViewport, restoreBehaviors, savesWithoutUid, serializeNode, spatialGain, spatialPan, startRecording, suggestLocale, suggestQuality, synthSfx, translationKey };
package/dist/index.js CHANGED
@@ -1,14 +1,14 @@
1
- import { C as getBehavior, E as Signal, S as clearBehaviors, T as registeredBehaviors, _ as InputMap, a as SCENE_FORMAT, b as behaviorSchema, c as SceneTree, d as resolveConstants, f as Node, g as resolveOrderGroups, h as effectiveOrder, i as serializeNode, l as CONST_REF_KEY, m as ORDER_GROUP_BASE, n as loadScene, o as computeViewport, p as parseNodePath, r as Scene, s as resolveViewport, u as isConstRef, w as registerBehavior, x as behaviorSignals, y as Behavior } from "./loader-DwazzlQb.js";
2
- import { A as T_PREFIX, B as synthSfx, C as behaviorsWithoutSave, D as LogManager, E as createSaveStore, F as ROLLOFF_MODELS, G as AudioBuses, H as WebAudioMusicBackend, I as spatialGain, L as spatialPan, M as translationKey, N as SfxEngine, O as BASE_LOCALE, P as isAudioContextAvailable, R as SFX_PRESETS, S as SaveSlots, T as restoreBehaviors, U as crossfadeGains, V as MusicManager, W as fadeGain, a as UiSlider, b as readDeviceHints, c as UiButton, d as UiBanner, f as UiBar, g as Settings, h as Engine, i as UiSelect, j as suggestLocale, k as Localization, l as UiDialogue, m as AudioPlayer, n as UiImage, o as UiToggle, p as UiText, r as UiPanel, s as Timer, t as registerCoreNodes, u as HudLayer, v as qualityEnvironment, w as captureBehaviors, x as suggestQuality, z as SFX_PRESET_NAMES } from "./register-uvaZj1KX.js";
1
+ import { A as registerBehavior, D as behaviorSignals, E as behaviorSchema, M as Signal, O as clearBehaviors, S as InputMap, T as Behavior, _ as savesWithoutUid, a as SCENE_FORMAT, b as effectiveOrder, c as SceneTree, d as resolveConstants, f as Node, g as restoreBehaviors, h as captureBehaviors, i as serializeNode, j as registeredBehaviors, k as getBehavior, l as CONST_REF_KEY, m as behaviorsWithoutSave, n as loadScene, o as computeViewport, p as SaveSlots, r as Scene, s as resolveViewport, u as isConstRef, v as createSaveStore, w as parseNodePath, x as resolveOrderGroups, y as ORDER_GROUP_BASE } from "./loader-B-Gft32x.js";
2
+ import { A as ROLLOFF_MODELS, B as AudioBuses, C as BASE_LOCALE, D as translationKey, E as suggestLocale, F as synthSfx, I as MusicManager, L as WebAudioMusicBackend, M as spatialPan, N as SFX_PRESETS, O as SfxEngine, P as SFX_PRESET_NAMES, R as crossfadeGains, S as LogManager, T as T_PREFIX, a as UiSlider, b as readDeviceHints, c as UiButton, d as UiBanner, f as UiBar, g as Settings, h as Engine, i as UiSelect, j as spatialGain, k as isAudioContextAvailable, l as UiDialogue, m as AudioPlayer, n as UiImage, o as UiToggle, p as UiText, r as UiPanel, s as Timer, t as registerCoreNodes, u as HudLayer, v as qualityEnvironment, w as Localization, x as suggestQuality, z as fadeGain } from "./register-DVwlnZAZ.js";
3
3
  import { t as IncantoError } from "./errors-BpWbnbb_.js";
4
4
  import { t as Rng } from "./rng-DP-SR7eg.js";
5
- import { n as startRecording, r as auditScene, t as replay } from "./replay-j-m6lJ4W.js";
6
5
  import { n as jsonEquals, r as jsonKind, t as jsonClone } from "./json-BLk7H2Qa.js";
7
- import { a as getNodeSignals, c as mergeStaticSignals, i as getNodeSchema, l as registerNode, n as clearRegistry, o as getNodeType, r as createNode, u as registeredTypes } from "./registry-IyWCGe4q.js";
6
+ import { a as getNodeSignals, c as mergeStaticSignals, i as getNodeSchema, l as registerNode, n as clearRegistry, o as getNodeType, r as createNode, u as registeredTypes } from "./registry-C7u42TID.js";
7
+ import { a as nodeRefWarnings, i as describeRefProblem, n as startRecording, o as resolveRefInJson, r as auditScene, t as replay } from "./replay-BicPOMX0.js";
8
8
  import { n as logText, r as parseDrive, t as logReport } from "./log-report-lxrQY9cH.js";
9
9
  import { t as createNoise2D } from "./noise-CGUMx44x.js";
10
10
  import { a as PARTICLE_PRESETS, i as ParticleSim, n as resolveFrames, o as PARTICLE_PRESET_NAMES, s as applyParticlePreset, t as resolveAnimation } from "./sprite-animation-D_p28jwU.js";
11
- import { a as findPath, i as preloadUrls, n as newUid, o as gridFromRows, r as assetUrls, t as VERSION } from "./src-B3HrKuAi.js";
11
+ import { a as findPath, i as preloadUrls, n as newUid, o as gridFromRows, r as assetUrls, t as VERSION } from "./src-5gbZO47I.js";
12
12
  import { i as resolveRendering, n as attachTouchControls, r as joystickVector, t as TouchControls } from "./touch-BoNg_MnF.js";
13
- import { t as duplicateNode } from "./duplicate-CI9WF_bg.js";
14
- export { AudioBuses, AudioPlayer, BASE_LOCALE, Behavior, CONST_REF_KEY, Engine, HudLayer, IncantoError, InputMap, Localization, LogManager, MusicManager, Node, ORDER_GROUP_BASE, PARTICLE_PRESETS, PARTICLE_PRESET_NAMES, ParticleSim, ROLLOFF_MODELS, Rng, SCENE_FORMAT, SFX_PRESETS, SFX_PRESET_NAMES, SaveSlots, Scene, SceneTree, Settings, SfxEngine, Signal, T_PREFIX, Timer, TouchControls, UiBanner, UiBar, UiButton, UiDialogue, UiImage, UiPanel, UiSelect, UiSlider, UiText, UiToggle, VERSION, WebAudioMusicBackend, applyParticlePreset, assetUrls, attachTouchControls, auditScene, behaviorSchema, behaviorSignals, behaviorsWithoutSave, captureBehaviors, clearBehaviors, clearRegistry, computeViewport, createNode, createNoise2D, createSaveStore, crossfadeGains, duplicateNode, effectiveOrder, fadeGain, findPath, getBehavior, getNodeSchema, getNodeSignals, getNodeType, gridFromRows, isAudioContextAvailable, isConstRef, joystickVector, jsonClone, jsonEquals, jsonKind, loadScene, logReport, logText, mergeStaticSignals, newUid, parseDrive, parseNodePath, preloadUrls, qualityEnvironment, readDeviceHints, registerBehavior, registerCoreNodes, registerNode, registeredBehaviors, registeredTypes, replay, resolveAnimation, resolveConstants, resolveFrames, resolveOrderGroups, resolveRendering, resolveViewport, restoreBehaviors, serializeNode, spatialGain, spatialPan, startRecording, suggestLocale, suggestQuality, synthSfx, translationKey };
13
+ import { t as duplicateNode } from "./duplicate-B-OtSRFL.js";
14
+ export { AudioBuses, AudioPlayer, BASE_LOCALE, Behavior, CONST_REF_KEY, Engine, HudLayer, IncantoError, InputMap, Localization, LogManager, MusicManager, Node, ORDER_GROUP_BASE, PARTICLE_PRESETS, PARTICLE_PRESET_NAMES, ParticleSim, ROLLOFF_MODELS, Rng, SCENE_FORMAT, SFX_PRESETS, SFX_PRESET_NAMES, SaveSlots, Scene, SceneTree, Settings, SfxEngine, Signal, T_PREFIX, Timer, TouchControls, UiBanner, UiBar, UiButton, UiDialogue, UiImage, UiPanel, UiSelect, UiSlider, UiText, UiToggle, VERSION, WebAudioMusicBackend, applyParticlePreset, assetUrls, attachTouchControls, auditScene, behaviorSchema, behaviorSignals, behaviorsWithoutSave, captureBehaviors, clearBehaviors, clearRegistry, computeViewport, createNode, createNoise2D, createSaveStore, crossfadeGains, describeRefProblem, duplicateNode, effectiveOrder, fadeGain, findPath, getBehavior, getNodeSchema, getNodeSignals, getNodeType, gridFromRows, isAudioContextAvailable, isConstRef, joystickVector, jsonClone, jsonEquals, jsonKind, loadScene, logReport, logText, mergeStaticSignals, newUid, nodeRefWarnings, parseDrive, parseNodePath, preloadUrls, qualityEnvironment, readDeviceHints, registerBehavior, registerCoreNodes, registerNode, registeredBehaviors, registeredTypes, replay, resolveAnimation, resolveConstants, resolveFrames, resolveOrderGroups, resolveRefInJson, resolveRendering, resolveViewport, restoreBehaviors, savesWithoutUid, serializeNode, spatialGain, spatialPan, startRecording, suggestLocale, suggestQuality, synthSfx, translationKey };