@vgai/engine 0.5.22 → 0.5.24
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 +6 -3
- package/dist/adapter/adapter-module.d.ts.map +1 -1
- package/dist/adapter/adapter-module.js +2 -4
- package/dist/adapter/adapter-surface.d.ts +1 -1
- package/dist/adapter/adapter-surface.js +1 -1
- package/dist/adapter/authoring.d.ts +19 -21
- package/dist/adapter/authoring.d.ts.map +1 -1
- package/dist/adapter/authoring.js +2 -2
- package/dist/adapter/binding.d.ts +341 -0
- package/dist/adapter/binding.d.ts.map +1 -0
- package/dist/adapter/binding.js +148 -0
- package/dist/adapter/colyseus-networking-adapter.d.ts.map +1 -1
- package/dist/adapter/colyseus-networking-adapter.js +23 -4
- package/dist/adapter/entrypoint-selection-readers.d.ts +24 -0
- package/dist/adapter/entrypoint-selection-readers.d.ts.map +1 -0
- package/dist/adapter/entrypoint-selection-readers.js +63 -0
- package/dist/adapter/entrypoint-selection-source.d.ts.map +1 -1
- package/dist/adapter/entrypoint-selection-source.js +1 -44
- package/dist/adapter/finders/scenes-from-entrypoint-selection.d.ts.map +1 -1
- package/dist/adapter/finders/scenes-from-entrypoint-selection.js +1 -52
- package/dist/adapter/host-context.d.ts +46 -15
- package/dist/adapter/host-context.d.ts.map +1 -1
- package/dist/adapter/host-context.js +2 -9
- package/dist/adapter/index.d.ts +11 -12
- package/dist/adapter/index.d.ts.map +1 -1
- package/dist/adapter/index.js +9 -10
- package/dist/adapter/ingest/game-contract-seams.d.ts +5 -0
- package/dist/adapter/ingest/game-contract-seams.d.ts.map +1 -1
- package/dist/adapter/ingest/game-contract-seams.js +1 -0
- package/dist/adapter/ingest/game-contract.d.ts +22 -3
- package/dist/adapter/ingest/game-contract.d.ts.map +1 -1
- package/dist/adapter/ingest/game-contract.js +0 -3
- package/dist/adapter/ingest/scene-capture.d.ts +19 -23
- package/dist/adapter/ingest/scene-capture.d.ts.map +1 -1
- package/dist/adapter/ingest/scene-capture.js +143 -17
- package/dist/adapter/ingest/visible-capture-window.d.ts +34 -0
- package/dist/adapter/ingest/visible-capture-window.d.ts.map +1 -1
- package/dist/adapter/native-debug-module.d.ts +40 -5
- package/dist/adapter/native-debug-module.d.ts.map +1 -1
- package/dist/adapter/native-debug-module.js +36 -9
- package/dist/adapter/rapier-physics-adapter.d.ts +31 -1
- package/dist/adapter/rapier-physics-adapter.d.ts.map +1 -1
- package/dist/adapter/rapier-physics-adapter.js +50 -36
- package/dist/adapter/renderer-config.d.ts +2 -2
- package/dist/adapter/renderer-config.js +2 -2
- package/dist/adapter/root-adapter.d.ts +7 -7
- package/dist/adapter/root-adapter.js +4 -4
- package/dist/adapter/system-adapter.d.ts +45 -7
- package/dist/adapter/system-adapter.d.ts.map +1 -1
- package/dist/adapter/system-seam-contract.d.ts +3 -3
- package/dist/adapter/system-seam-contract.js +3 -3
- package/dist/adapter/system-slot.d.ts +168 -0
- package/dist/adapter/system-slot.d.ts.map +1 -0
- package/dist/adapter/system-slot.js +229 -0
- package/dist/adapter/transform.d.ts +11 -1
- package/dist/adapter/transform.d.ts.map +1 -1
- package/dist/ai/navigation.d.ts +17 -1
- package/dist/ai/navigation.d.ts.map +1 -1
- package/dist/ai/navigation.js +26 -5
- package/dist/animation/anim-graph-types.d.ts +11 -3
- package/dist/animation/anim-graph-types.d.ts.map +1 -1
- package/dist/animation/theatre-clock-binding.d.ts +4 -4
- package/dist/animation/theatre-clock-binding.js +4 -4
- package/dist/animation/xstate-animation-binding.d.ts.map +1 -1
- package/dist/animation/xstate-animation-binding.js +2 -2
- package/dist/animation/xstate-animation-meta.d.ts +13 -0
- package/dist/animation/xstate-animation-meta.d.ts.map +1 -1
- package/dist/animation/xstate-animation-meta.js +14 -0
- package/dist/asset-formats/index.d.ts +4 -7
- package/dist/asset-formats/index.d.ts.map +1 -1
- package/dist/asset-formats/index.js +4 -7
- package/dist/asset-formats/render-env.d.ts +5 -8
- package/dist/asset-formats/render-env.d.ts.map +1 -1
- package/dist/asset-formats/render-env.js +3 -6
- package/dist/asset-parse-error.d.ts +2 -5
- package/dist/asset-parse-error.d.ts.map +1 -1
- package/dist/asset-parse-error.js +2 -5
- package/dist/audio/bus-mixer.d.ts +101 -0
- package/dist/audio/bus-mixer.d.ts.map +1 -0
- package/dist/audio/bus-mixer.js +115 -0
- package/dist/core/frame-pacing.d.ts +1 -1
- package/dist/core/frame-pacing.js +2 -2
- package/dist/core/game-loop.d.ts +1 -3
- package/dist/core/game-loop.d.ts.map +1 -1
- package/dist/core/game-loop.js +1 -3
- package/dist/core/seeded-random.d.ts +1 -1
- package/dist/core/sim-clock.d.ts +5 -6
- package/dist/core/sim-clock.d.ts.map +1 -1
- package/dist/core/sim-clock.js +4 -5
- package/dist/core/types.d.ts +1 -3
- package/dist/core/types.d.ts.map +1 -1
- package/dist/defaults.d.ts +6 -14
- package/dist/defaults.d.ts.map +1 -1
- package/dist/defaults.js +6 -14
- package/dist/dev/register-render-vitals.d.ts +1 -4
- package/dist/dev/register-render-vitals.d.ts.map +1 -1
- package/dist/dev/register-render-vitals.js +1 -4
- package/dist/dev/render-debug-adapter.d.ts +2 -3
- package/dist/dev/render-debug-adapter.d.ts.map +1 -1
- package/dist/dev/render-debug-adapter.js +2 -3
- package/dist/dev/render-vitals.d.ts +3 -3
- package/dist/dev/render-vitals.js +3 -3
- package/dist/dev/webgl-frame-capture.d.ts +1 -1
- package/dist/dev/webgl-frame-capture.js +1 -1
- package/dist/index.d.ts +2 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -4
- package/dist/input/host-pointer.d.ts +122 -0
- package/dist/input/host-pointer.d.ts.map +1 -0
- package/dist/input/host-pointer.js +160 -0
- package/dist/input/input-manager.d.ts +18 -5
- package/dist/input/input-manager.d.ts.map +1 -1
- package/dist/input/input-manager.js +33 -13
- package/dist/input/rebind-controller.d.ts.map +1 -1
- package/dist/input/rebind-controller.js +6 -8
- package/dist/input/schema.d.ts.map +1 -1
- package/dist/input/schema.js +56 -28
- package/dist/manifest/filename.d.ts.map +1 -1
- package/dist/manifest/filename.js +8 -12
- package/dist/manifest/load.d.ts +10 -10
- package/dist/manifest/load.d.ts.map +1 -1
- package/dist/manifest/load.js +9 -6
- package/dist/manifest/schema.d.ts +17 -21
- package/dist/manifest/schema.d.ts.map +1 -1
- package/dist/manifest/schema.js +45 -35
- package/dist/physics/collider-dimensions.d.ts +8 -12
- package/dist/physics/collider-dimensions.d.ts.map +1 -1
- package/dist/physics/collider-dimensions.js +8 -12
- package/dist/pixi/scene-capture.d.ts +11 -13
- package/dist/pixi/scene-capture.d.ts.map +1 -1
- package/dist/react/world-state.d.ts +1 -1
- package/dist/react/world-state.d.ts.map +1 -1
- package/dist/render/light-camera-factory.d.ts +5 -7
- package/dist/render/light-camera-factory.d.ts.map +1 -1
- package/dist/render/light-camera-factory.js +8 -11
- package/dist/render/material-factory.js +1 -1
- package/dist/render/render-batch-system.d.ts.map +1 -1
- package/dist/render/render-features.d.ts +17 -6
- package/dist/render/render-features.d.ts.map +1 -1
- package/dist/render/render-features.js +0 -28
- package/dist/runtime/create-runtime.d.ts +34 -25
- package/dist/runtime/create-runtime.d.ts.map +1 -1
- package/dist/runtime/create-runtime.js +218 -93
- package/dist/runtime/debug-bridge.d.ts +12 -0
- package/dist/runtime/debug-bridge.d.ts.map +1 -1
- package/dist/runtime/debug-bridge.js +4 -0
- package/dist/runtime/debug-registry.d.ts +95 -8
- package/dist/runtime/debug-registry.d.ts.map +1 -1
- package/dist/runtime/debug-registry.js +24 -3
- package/dist/runtime/dev-build.d.ts +2 -2
- package/dist/runtime/dev-build.js +2 -2
- package/dist/runtime/game-input-seams.d.ts +2 -2
- package/dist/runtime/game-input-seams.d.ts.map +1 -1
- package/dist/runtime/game.d.ts +102 -41
- package/dist/runtime/game.d.ts.map +1 -1
- package/dist/runtime/game.js +80 -54
- package/dist/runtime/mount-game.d.ts +0 -16
- package/dist/runtime/mount-game.d.ts.map +1 -1
- package/dist/runtime/mount-game.js +8 -39
- package/dist/runtime/mount-manifest.d.ts +22 -14
- package/dist/runtime/mount-manifest.d.ts.map +1 -1
- package/dist/runtime/mount-manifest.js +18 -18
- package/dist/runtime/playtest.d.ts +22 -0
- package/dist/runtime/playtest.d.ts.map +1 -0
- package/dist/runtime/playtest.js +12 -0
- package/dist/runtime/run-ticks-settled.d.ts +34 -0
- package/dist/runtime/run-ticks-settled.d.ts.map +1 -0
- package/dist/runtime/run-ticks-settled.js +59 -0
- package/dist/runtime/state-bridge.d.ts +2 -3
- package/dist/runtime/state-bridge.d.ts.map +1 -1
- package/dist/runtime/state-bridge.js +1 -0
- package/dist/setup/setup-audio.d.ts +12 -0
- package/dist/setup/setup-audio.d.ts.map +1 -1
- package/dist/setup/setup-audio.js +9 -10
- package/dist/setup/setup-renderer.d.ts +2 -25
- package/dist/setup/setup-renderer.d.ts.map +1 -1
- package/dist/setup/setup-renderer.js +2 -31
- package/dist/world3d-react/r3f-root-factory.d.ts +7 -7
- package/dist/world3d-react/r3f-root-factory.js +7 -7
- package/dist/world3d-react/rapier-physics-bridge.d.ts +9 -8
- package/dist/world3d-react/rapier-physics-bridge.d.ts.map +1 -1
- package/dist/world3d-react/rapier-physics-bridge.js +100 -48
- package/package.json +1 -1
- package/schemas/engine-capabilities.json +16 -14
- package/schemas/vgai-project.schema.json +35 -26
- package/src/adapter/adapter-module.ts +2 -4
- package/src/adapter/adapter-surface.ts +1 -1
- package/src/adapter/authoring.ts +19 -21
- package/src/adapter/binding.ts +468 -0
- package/src/adapter/colyseus-networking-adapter.ts +20 -5
- package/src/adapter/entrypoint-selection-readers.ts +66 -0
- package/src/adapter/entrypoint-selection-source.ts +1 -40
- package/src/adapter/finders/scenes-from-entrypoint-selection.ts +1 -48
- package/src/adapter/host-context.ts +45 -15
- package/src/adapter/index.ts +23 -11
- package/src/adapter/ingest/game-contract-seams.ts +1 -0
- package/src/adapter/ingest/game-contract.ts +22 -3
- package/src/adapter/ingest/scene-capture.ts +190 -39
- package/src/adapter/ingest/visible-capture-window.ts +35 -0
- package/src/adapter/native-debug-module.ts +66 -9
- package/src/adapter/rapier-physics-adapter.ts +76 -20
- package/src/adapter/renderer-config.ts +2 -2
- package/src/adapter/root-adapter.ts +7 -7
- package/src/adapter/system-adapter.ts +43 -8
- package/src/adapter/system-seam-contract.ts +3 -3
- package/src/adapter/system-slot.ts +291 -0
- package/src/adapter/transform.ts +18 -1
- package/src/ai/navigation.ts +30 -3
- package/src/animation/anim-graph-types.ts +11 -3
- package/src/animation/theatre-clock-binding.ts +4 -4
- package/src/animation/xstate-animation-binding.ts +2 -2
- package/src/animation/xstate-animation-meta.ts +16 -0
- package/src/asset-formats/index.ts +4 -7
- package/src/asset-formats/render-env.ts +3 -6
- package/src/asset-parse-error.ts +2 -5
- package/src/audio/bus-mixer.ts +161 -0
- package/src/core/frame-pacing.ts +2 -2
- package/src/core/game-loop.ts +1 -3
- package/src/core/seeded-random.ts +1 -1
- package/src/core/sim-clock.ts +5 -6
- package/src/core/types.ts +1 -3
- package/src/defaults.ts +6 -14
- package/src/dev/register-render-vitals.ts +1 -4
- package/src/dev/render-debug-adapter.ts +2 -3
- package/src/dev/render-vitals.ts +3 -3
- package/src/dev/webgl-frame-capture.ts +1 -1
- package/src/index.ts +2 -5
- package/src/input/host-pointer.ts +230 -0
- package/src/input/input-manager.ts +34 -13
- package/src/input/input-types.ts +1 -1
- package/src/input/rebind-controller.ts +6 -8
- package/src/input/schema.ts +216 -188
- package/src/manifest/filename.ts +8 -12
- package/src/manifest/load.ts +17 -13
- package/src/manifest/schema.ts +55 -47
- package/src/physics/collider-dimensions.ts +8 -12
- package/src/pixi/scene-capture.ts +12 -15
- package/src/react/world-state.tsx +1 -1
- package/src/render/light-camera-factory.ts +8 -11
- package/src/render/material-factory.ts +1 -1
- package/src/render/render-batch-system.ts +14 -6
- package/src/render/render-features.ts +17 -35
- package/src/runtime/create-runtime.ts +270 -108
- package/src/runtime/debug-bridge.ts +16 -0
- package/src/runtime/debug-registry.ts +121 -8
- package/src/runtime/dev-build.ts +2 -2
- package/src/runtime/game-input-seams.ts +2 -2
- package/src/runtime/game.ts +180 -80
- package/src/runtime/mount-game.ts +8 -56
- package/src/runtime/mount-manifest.ts +43 -34
- package/src/runtime/playtest.ts +22 -0
- package/src/runtime/run-ticks-settled.ts +72 -0
- package/src/runtime/state-bridge.ts +3 -3
- package/src/setup/setup-audio.ts +21 -11
- package/src/setup/setup-renderer.ts +2 -61
- package/src/world3d-react/r3f-root-factory.tsx +7 -7
- package/src/world3d-react/rapier-physics-bridge.tsx +107 -50
- package/dist/adapter/setup-three-root-adapter.d.ts +0 -86
- package/dist/adapter/setup-three-root-adapter.d.ts.map +0 -1
- package/dist/adapter/setup-three-root-adapter.js +0 -908
- package/dist/animation/clip-map.d.ts +0 -12
- package/dist/animation/clip-map.d.ts.map +0 -1
- package/dist/animation/clip-map.js +0 -31
- package/dist/asset-registry.d.ts +0 -38
- package/dist/asset-registry.d.ts.map +0 -1
- package/dist/asset-registry.js +0 -66
- package/dist/canvas-react/engine-bridge.d.ts +0 -45
- package/dist/canvas-react/engine-bridge.d.ts.map +0 -1
- package/dist/canvas-react/engine-bridge.js +0 -45
- package/dist/canvas-react/pixi-react-adapter.d.ts +0 -77
- package/dist/canvas-react/pixi-react-adapter.d.ts.map +0 -1
- package/dist/canvas-react/pixi-react-adapter.js +0 -294
- package/dist/canvas-react/world-context.d.ts +0 -98
- package/dist/canvas-react/world-context.d.ts.map +0 -1
- package/dist/canvas-react/world-context.js +0 -173
- package/dist/dev/debug-draw.d.ts +0 -24
- package/dist/dev/debug-draw.d.ts.map +0 -1
- package/dist/dev/debug-draw.js +0 -73
- package/dist/render/auto-batcher.d.ts +0 -34
- package/dist/render/auto-batcher.d.ts.map +0 -1
- package/dist/render/auto-batcher.js +0 -140
- package/dist/render/lod.d.ts +0 -13
- package/dist/render/lod.d.ts.map +0 -1
- package/dist/render/lod.js +0 -16
- package/dist/runtime/types.d.ts +0 -303
- package/dist/runtime/types.d.ts.map +0 -1
- package/dist/runtime/types.js +0 -1
- package/dist/world3d-react/engine-bridge.d.ts +0 -47
- package/dist/world3d-react/engine-bridge.d.ts.map +0 -1
- package/dist/world3d-react/engine-bridge.js +0 -73
- package/dist/world3d-react/r3f-adapter.d.ts +0 -58
- package/dist/world3d-react/r3f-adapter.d.ts.map +0 -1
- package/dist/world3d-react/r3f-adapter.js +0 -634
- package/dist/world3d-react/world-context.d.ts +0 -182
- package/dist/world3d-react/world-context.d.ts.map +0 -1
- package/dist/world3d-react/world-context.js +0 -235
- package/src/adapter/setup-three-root-adapter.ts +0 -1032
- package/src/animation/clip-map.ts +0 -34
- package/src/asset-registry.ts +0 -89
- package/src/dev/debug-draw.ts +0 -80
- package/src/render/auto-batcher.ts +0 -168
- package/src/render/lod.ts +0 -17
- package/src/runtime/types.ts +0 -328
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The game-scoped debug/synthetic-player registry. ONE registry per `Game` root —
|
|
3
|
-
* every world's `ctx.debug` (see
|
|
3
|
+
* every world's `ctx.debug` (see {@link DebugCtxSurface} below) feeds the
|
|
4
4
|
* SAME registry via {@link DebugRegistry.forRoot}, so a name a game registers is
|
|
5
5
|
* visible (and name-collision-checked) across every world, not just the one that
|
|
6
6
|
* registered it. `createGame` (`runtime/game.ts`) constructs the registry
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
* rather than threading it through every call site.
|
|
11
11
|
*
|
|
12
12
|
* Provenance note: a registration's "world" is the MOUNT's adapter id (the
|
|
13
|
-
*
|
|
14
|
-
*
|
|
13
|
+
* id a project's root adapter already carries) rather than the
|
|
14
|
+
* `RootInstance.id` `registerThreeRoot`
|
|
15
15
|
* assigns — that id isn't known until AFTER `mount()` resolves (`create-
|
|
16
16
|
* runtime.ts` calls `registerThreeRoot` with it only once `mount()` returns),
|
|
17
17
|
* which is after every `setup()`-time registration has already run. For the
|
|
@@ -23,7 +23,76 @@ import { z } from 'zod';
|
|
|
23
23
|
import type { DebugAdapter } from '../adapter/system-adapter';
|
|
24
24
|
import type { GameLoopLiveness } from '../core/types';
|
|
25
25
|
import type { Game } from './game';
|
|
26
|
-
|
|
26
|
+
/**
|
|
27
|
+
* The minimal structural shape `ctx.debug.attachRoom` needs from a joined
|
|
28
|
+
* Colyseus room: just enough to send the reserved `__vgai:debugCommand`
|
|
29
|
+
* message and listen for its `__vgai:debugCommandResult` reply. Structural,
|
|
30
|
+
* not a Colyseus type import — the same seam-boundary style every other
|
|
31
|
+
* `DebugCtxSurface` member uses (no wrapper around Colyseus itself, D2).
|
|
32
|
+
* `onMessage`'s return type is `unknown` because Colyseus's own return shape
|
|
33
|
+
* (void in some client versions, an unsubscribe function in others) isn't
|
|
34
|
+
* load-bearing here: the registry calls it defensively (invokes it on detach
|
|
35
|
+
* only if it's actually a function).
|
|
36
|
+
*/
|
|
37
|
+
export interface DebugRoomHandle {
|
|
38
|
+
send(type: string, message?: unknown): void;
|
|
39
|
+
onMessage(type: string, cb: (message: unknown) => void): unknown;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Infers a `registerCommand`/`registerReactCommand`/`useDebugCommand`
|
|
43
|
+
* handler's parameter tuple from its declared Zod `args` tuple (dry-run
|
|
44
|
+
* finding, ledger — "`registerCommand` fn typing forces `unknown[]` casts"):
|
|
45
|
+
* a real `z.ZodTuple` infers its element types (`z.tuple([z.number(),
|
|
46
|
+
* z.string()])` → `(n: number, s: string) => ...`), while omitting `args`
|
|
47
|
+
* (the generic's `undefined` default) resolves to the original permissive
|
|
48
|
+
* `(...args: unknown[]) => ...` shape every command had before this generic
|
|
49
|
+
* existed. That permissive fallback is deliberate, not just a placeholder —
|
|
50
|
+
* it keeps every existing no-schema registration (including ones whose
|
|
51
|
+
* handler reads positional args the runtime never validates, since
|
|
52
|
+
* `invoke()` only parses `args` against a schema when one is declared)
|
|
53
|
+
* compiling byte-for-byte unchanged.
|
|
54
|
+
*/
|
|
55
|
+
export type DebugCommandArgs<T extends z.ZodTuple | undefined = undefined> = T extends z.ZodTuple ? z.infer<T> : unknown[];
|
|
56
|
+
/**
|
|
57
|
+
* The authoring half of the debug/synthetic-player seam — the read/actuate half is
|
|
58
|
+
* `SystemAdapters.DebugAdapter` (`adapter/system-adapter.ts`). Callable from any
|
|
59
|
+
* `init` (one file per new provider/command), or from a react world's
|
|
60
|
+
* `useDebugProvider`/`useDebugCommand`/`useDebugEmit` hooks. Every registration feeds the ONE
|
|
61
|
+
* game-scoped registry (`runtime/debug-registry.ts`) — never a per-world accumulator.
|
|
62
|
+
*/
|
|
63
|
+
export interface DebugCtxSurface {
|
|
64
|
+
/** Register (or replace) a named, JSON-serializable state read. Duplicate
|
|
65
|
+
* names from the SAME world replace + warn once; the SAME name from a
|
|
66
|
+
* DIFFERENT world throws (`DebugError` code `DEBUG_NAME_COLLISION`). */
|
|
67
|
+
registerStateProvider(name: string, fn: () => unknown, opts?: {
|
|
68
|
+
tier?: 'observable' | 'assisted';
|
|
69
|
+
}): void;
|
|
70
|
+
/** Register (or replace) an invokable command. `locus` is REQUIRED once the
|
|
71
|
+
* project declares a Colyseus room (`DebugRegistry.setRoomDeclared`) — a
|
|
72
|
+
* fixture must say whether it mutates authoritative (server) or predicted
|
|
73
|
+
* (client) state.
|
|
74
|
+
*
|
|
75
|
+
* Generic over the declared `args` Zod tuple ({@link DebugCommandArgs}) so
|
|
76
|
+
* `fn`'s parameters INFER from it: `registerCommand('setHp', { args:
|
|
77
|
+
* z.tuple([z.number()]) }, (hp) => ...)` types `hp` as `number` with no
|
|
78
|
+
* cast. Leaving `args` off keeps `fn` typed `(...args: unknown[]) => ...`,
|
|
79
|
+
* same as before this generic existed. */
|
|
80
|
+
registerCommand<T extends z.ZodTuple | undefined = undefined>(name: string, spec: {
|
|
81
|
+
description?: string;
|
|
82
|
+
args?: T;
|
|
83
|
+
locus?: 'client' | 'server';
|
|
84
|
+
}, fn: (...args: DebugCommandArgs<T>) => unknown | Promise<unknown>): void;
|
|
85
|
+
/** Push a tick-stamped event onto the debug event ring (spec §3.3) — the
|
|
86
|
+
* engine stamps `tick`/`simT` at emission, not at read time. */
|
|
87
|
+
emit(event: string, detail?: unknown): void;
|
|
88
|
+
/**
|
|
89
|
+
* Task 2.2 — server-locus command routing (client leg). Call once your
|
|
90
|
+
* game code has joined its Colyseus room, so `locus: 'server'` commands
|
|
91
|
+
* have somewhere to send `__vgai:debugCommand`. Returns a detach function
|
|
92
|
+
* (call on room leave/dispose) — game-scoped, last-attached room wins.
|
|
93
|
+
*/
|
|
94
|
+
attachRoom(room: DebugRoomHandle): () => void;
|
|
95
|
+
}
|
|
27
96
|
/** Engine-local error for the debug seam — mirrors the `code` + `data` shape
|
|
28
97
|
* `packages/vgai-sdk/src/errors.ts` uses (no import: the engine does not
|
|
29
98
|
* depend on `@vgai/sdk`). `code` is always machine-readable; nothing reading
|
|
@@ -37,7 +106,7 @@ export declare class DebugError extends Error {
|
|
|
37
106
|
* actuates through — the SAME three methods `InputManager` exposes
|
|
38
107
|
* (`setVirtualAction`/`tapVirtualAction`/`clearVirtualActions`, Task 1.4),
|
|
39
108
|
* typed narrowly here so this module never imports `InputManager` itself.
|
|
40
|
-
* Wired once by the hosting adapter (`
|
|
109
|
+
* Wired once by the hosting adapter (`world3d-react/r3f-root-factory.tsx`, at the
|
|
41
110
|
* same seed spot as `setInputActionsSource`) — absent until then. */
|
|
42
111
|
export interface DebugVirtualInputTarget {
|
|
43
112
|
setVirtualAction(action: string, value: boolean | number | {
|
|
@@ -115,7 +184,7 @@ export interface RunTicksTarget {
|
|
|
115
184
|
}
|
|
116
185
|
/** What {@link createDebugRegistry} returns — the adapter half (`DebugAdapter`,
|
|
117
186
|
* for `SystemAdapters.debug`) plus the registration/lifecycle surface the
|
|
118
|
-
* hosting adapter (`
|
|
187
|
+
* hosting adapter (`world3d-react/r3f-root-factory.tsx`) and `createGame` drive. */
|
|
119
188
|
export interface DebugRegistry {
|
|
120
189
|
/** The `SystemAdapters.debug` implementer — one shared instance, seeded
|
|
121
190
|
* onto every world's adapter bag. */
|
|
@@ -169,7 +238,7 @@ export interface DebugRegistry {
|
|
|
169
238
|
* `{version: 1, seed: null, fixedDt: null, ticks: []}`. `seed`/`fixedDt`
|
|
170
239
|
* are the two replay-critical metadata fields the design doc's format
|
|
171
240
|
* sketch (§2.c) calls for beside the raw per-tick deltas — the wiring
|
|
172
|
-
* adapter (`
|
|
241
|
+
* adapter (`world3d-react/r3f-root-factory.tsx`) assembles them from
|
|
173
242
|
* `getSeededRandom(game)?.seed`/`host.game?.loop.fixedDt` alongside
|
|
174
243
|
* `InputManager.getInputTrace()`'s own `{version, ticks}`. An `engine`
|
|
175
244
|
* (package version) stamp remains a KNOWN GAP — no build-time version
|
|
@@ -225,10 +294,28 @@ export interface DebugRegistry {
|
|
|
225
294
|
* error in that case rather than silently no-op-ing — see
|
|
226
295
|
* `debug-bridge.ts`'s `runTicks` method. */
|
|
227
296
|
getRunTicksTarget(): RunTicksTarget | null;
|
|
297
|
+
/**
|
|
298
|
+
* Register a WORLD-SETTLED probe: `false` while this game is intentionally
|
|
299
|
+
* between worlds — a scene remount in flight (`reload_current_scene`'s
|
|
300
|
+
* React remount commits asynchronously). The game declares it through the
|
|
301
|
+
* `settled` key of its `debug` entry export (`native-debug-module.ts`);
|
|
302
|
+
* session tick drivers ({@link runTicksWhenSettled} behind BOTH run-ticks
|
|
303
|
+
* doors) wait for every probe to answer `true` before each tick, so WHICH
|
|
304
|
+
* tick first runs a freshly remounted scene is a function of the sim, not
|
|
305
|
+
* of wall timing between driver calls — measured before this seam: the
|
|
306
|
+
* same drive script produced 7 or 8 post-respawn walked ticks depending on
|
|
307
|
+
* how long the driver idled between ticks. Returns the deregistration.
|
|
308
|
+
*/
|
|
309
|
+
registerWorldSettledProbe(probe: () => boolean): () => void;
|
|
310
|
+
/** `true` when every registered probe answers `true` (and vacuously with
|
|
311
|
+
* none registered). A probe that THROWS counts as settled=false — a
|
|
312
|
+
* broken probe must stall the driver loudly (its bounded wait names the
|
|
313
|
+
* timeout), never silently un-gate it. */
|
|
314
|
+
worldSettled(): boolean;
|
|
228
315
|
/** D15/T-D15.3/.5 — the CURRENT shared game tick (the same counter the
|
|
229
316
|
* built-in `time` provider's `tick` field reads), for a per-world
|
|
230
317
|
* `InputManager.poll(tick)` call to key its `scheduleActionAtTick`
|
|
231
|
-
* numbering off — see `
|
|
318
|
+
* numbering off — see `world3d-react/r3f-root-factory.tsx`'s `systems.add('input',
|
|
232
319
|
* ...)` wiring. `0` for a bare `createDebugRegistry()` test stand-in with
|
|
233
320
|
* no real `Game`/tick counter behind it (matching `getTick`'s own
|
|
234
321
|
* constructor-supplied default in that case). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debug-registry.d.ts","sourceRoot":"","sources":["../../src/runtime/debug-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,YAAY,EAAsC,MAAM,2BAA2B,CAAC;AAElG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"debug-registry.d.ts","sourceRoot":"","sources":["../../src/runtime/debug-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The game-scoped debug/synthetic-player registry. ONE registry per `Game` root —
|
|
3
|
-
* every world's `ctx.debug` (see
|
|
3
|
+
* every world's `ctx.debug` (see {@link DebugCtxSurface} below) feeds the
|
|
4
4
|
* SAME registry via {@link DebugRegistry.forRoot}, so a name a game registers is
|
|
5
5
|
* visible (and name-collision-checked) across every world, not just the one that
|
|
6
6
|
* registered it. `createGame` (`runtime/game.ts`) constructs the registry
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
* rather than threading it through every call site.
|
|
11
11
|
*
|
|
12
12
|
* Provenance note: a registration's "world" is the MOUNT's adapter id (the
|
|
13
|
-
*
|
|
14
|
-
*
|
|
13
|
+
* id a project's root adapter already carries) rather than the
|
|
14
|
+
* `RootInstance.id` `registerThreeRoot`
|
|
15
15
|
* assigns — that id isn't known until AFTER `mount()` resolves (`create-
|
|
16
16
|
* runtime.ts` calls `registerThreeRoot` with it only once `mount()` returns),
|
|
17
17
|
* which is after every `setup()`-time registration has already run. For the
|
|
@@ -116,6 +116,7 @@ export function createDebugRegistry(opts) {
|
|
|
116
116
|
const inputTraceSources = new Map();
|
|
117
117
|
const virtualInputTargets = new Map();
|
|
118
118
|
let runTicksTarget = null;
|
|
119
|
+
const worldSettledProbes = new Set();
|
|
119
120
|
let attachedRoom = null;
|
|
120
121
|
const pendingServerCommands = new Map();
|
|
121
122
|
let requestCounter = 0;
|
|
@@ -487,6 +488,26 @@ export function createDebugRegistry(opts) {
|
|
|
487
488
|
getRunTicksTarget() {
|
|
488
489
|
return runTicksTarget;
|
|
489
490
|
},
|
|
491
|
+
registerWorldSettledProbe(probe) {
|
|
492
|
+
worldSettledProbes.add(probe);
|
|
493
|
+
return () => {
|
|
494
|
+
worldSettledProbes.delete(probe);
|
|
495
|
+
};
|
|
496
|
+
},
|
|
497
|
+
worldSettled() {
|
|
498
|
+
for (const probe of worldSettledProbes) {
|
|
499
|
+
try {
|
|
500
|
+
if (!probe())
|
|
501
|
+
return false;
|
|
502
|
+
}
|
|
503
|
+
catch {
|
|
504
|
+
// A throwing probe stalls the driver LOUDLY (the bounded wait's
|
|
505
|
+
// timeout names it) rather than silently un-gating the tick.
|
|
506
|
+
return false;
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
return true;
|
|
510
|
+
},
|
|
490
511
|
getGameTick() {
|
|
491
512
|
return opts.getTick();
|
|
492
513
|
},
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
*
|
|
10
10
|
* Ownership, stated in one place (the build rule):
|
|
11
11
|
* - OWNER: this function. It resolves the answer; nothing else derives it.
|
|
12
|
-
* - SHARERS: the
|
|
13
|
-
*
|
|
12
|
+
* - SHARERS: the three-root adapter (`world3d-react/r3f-root-factory.tsx`),
|
|
13
|
+
* which seeds live render vitals only
|
|
14
14
|
* under it, and the `static-batch` capability's mutation watch and `Frozen`
|
|
15
15
|
* warning. Any future dev-only instrument calls this too, with its own
|
|
16
16
|
* `override`.
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
*
|
|
10
10
|
* Ownership, stated in one place (the build rule):
|
|
11
11
|
* - OWNER: this function. It resolves the answer; nothing else derives it.
|
|
12
|
-
* - SHARERS: the
|
|
13
|
-
*
|
|
12
|
+
* - SHARERS: the three-root adapter (`world3d-react/r3f-root-factory.tsx`),
|
|
13
|
+
* which seeds live render vitals only
|
|
14
14
|
* under it, and the `static-batch` capability's mutation watch and `Frozen`
|
|
15
15
|
* warning. Any future dev-only instrument calls this too, with its own
|
|
16
16
|
* `override`.
|
|
@@ -32,15 +32,15 @@
|
|
|
32
32
|
* Do not write "the strip clears the input seams" anywhere without changing
|
|
33
33
|
* `strip` to actually do it.
|
|
34
34
|
*/
|
|
35
|
+
import type { HostGameHandle } from '../adapter/host-context';
|
|
35
36
|
import type { DebugRegistry } from './debug-registry';
|
|
36
|
-
import type { GameInternal } from './game';
|
|
37
37
|
/** The conventional input-map location every scaffolded project ships
|
|
38
38
|
* (`public/inputmaps/default.inputmap.json`). */
|
|
39
39
|
export declare const DEFAULT_INPUT_MAP_PATH = "/inputmaps/default.inputmap.json";
|
|
40
40
|
/** The slice of a host context this wiring reads — satisfied structurally by
|
|
41
41
|
* both `ThreeHostContext` and `CanvasHostContext`. */
|
|
42
42
|
export interface GameInputSeamHost {
|
|
43
|
-
readonly game?:
|
|
43
|
+
readonly game?: HostGameHandle | null | undefined;
|
|
44
44
|
readonly headless?: boolean | undefined;
|
|
45
45
|
}
|
|
46
46
|
export declare function wireGameInputSeams(host: GameInputSeamHost, registry: DebugRegistry, options: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"game-input-seams.d.ts","sourceRoot":"","sources":["../../src/runtime/game-input-seams.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;
|
|
1
|
+
{"version":3,"file":"game-input-seams.d.ts","sourceRoot":"","sources":["../../src/runtime/game-input-seams.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD;kDACkD;AAClD,eAAO,MAAM,sBAAsB,qCAAqC,CAAC;AAEzE;uDACuD;AACvD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,CAAC;IAClD,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACzC;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,iBAAiB,EACvB,QAAQ,EAAE,aAAa,EACvB,OAAO,EAAE;IACP,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAClD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACjD,GACA,OAAO,CAAC,IAAI,CAAC,CAiDf"}
|
package/dist/runtime/game.d.ts
CHANGED
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
import type * as PIXI from 'pixi.js';
|
|
8
8
|
import type * as THREE from 'three';
|
|
9
9
|
import type { AdapterSurface as AdapterSurfaceLeaf } from '../adapter/adapter-surface';
|
|
10
|
+
import type { RootBinding } from '../adapter/binding';
|
|
10
11
|
import type { MountedRoot } from '../adapter/root-adapter';
|
|
11
|
-
import type { MountedSetupThreeRoot } from '../adapter/setup-three-root-adapter';
|
|
12
12
|
import type { SystemAdapters } from '../adapter/system-adapter';
|
|
13
13
|
import type { AssetCache } from '../assets';
|
|
14
14
|
import type { createGameLoop } from '../core/game-loop';
|
|
@@ -20,10 +20,10 @@ import type { CollisionSystem } from '../physics/collision-system';
|
|
|
20
20
|
import type { PhysicsRegistry } from '../physics/physics-registry';
|
|
21
21
|
import type { Physics2DRegistry } from '../pixi/physics-registry';
|
|
22
22
|
import { type RunTicksOptions } from './debug-registry';
|
|
23
|
+
import type { PlaytestContext } from './playtest';
|
|
23
24
|
import { type GameStateBridge } from './state-bridge';
|
|
24
|
-
import type { GameContext, PlaytestContext } from './types';
|
|
25
25
|
/** The one loop type — `createGameLoop`'s return shape (fixed-step sim,
|
|
26
|
-
* display-rate presentation
|
|
26
|
+
* display-rate presentation). */
|
|
27
27
|
export type GameLoop = ReturnType<typeof createGameLoop>;
|
|
28
28
|
/**
|
|
29
29
|
* Game-level play-state control surface (D10, T7.6): pause/resume/step as ONE
|
|
@@ -33,10 +33,10 @@ export type GameLoop = ReturnType<typeof createGameLoop>;
|
|
|
33
33
|
* freezes. A paused-and-pausable world's `render` phase still runs (with `dt`
|
|
34
34
|
* forced to `0`, so time-based render effects — e.g. a post-processing pass with
|
|
35
35
|
* its own internal clock — don't silently keep animating under a "frozen" scene)
|
|
36
|
-
* — simulation freezes, the screen does not go black.
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
* `runFrame`. `GameLoop.timeScale`
|
|
36
|
+
* — simulation freezes, the screen does not go black. That render runs once per
|
|
37
|
+
* display frame under a host that drives `runRenderFrame`, and once per substep
|
|
38
|
+
* under one that still renders inside
|
|
39
|
+
* `runFrame`. `GameLoop.timeScale` remains the orthogonal
|
|
40
40
|
* "speed up/slow down" axis — pausing never touches it, so the host's
|
|
41
41
|
* accumulator/rAF loop keeps ticking at its normal cadence, which is what makes
|
|
42
42
|
* "paused still renders" possible.
|
|
@@ -83,7 +83,7 @@ export interface PlayState {
|
|
|
83
83
|
* `adapter/root-adapter.ts`'s kind-tagged `MountedRoot` types can name it
|
|
84
84
|
* without an import cycle back to this file. This re-export keeps every
|
|
85
85
|
* existing `import type { AdapterSurface } from '../runtime/game'` call site
|
|
86
|
-
*
|
|
86
|
+
* compiling unchanged.
|
|
87
87
|
*/
|
|
88
88
|
export type AdapterSurface = AdapterSurfaceLeaf;
|
|
89
89
|
/**
|
|
@@ -107,6 +107,23 @@ export interface RootFrameHooks {
|
|
|
107
107
|
/**
|
|
108
108
|
* A single world instance: the unit of adaptation.
|
|
109
109
|
*/
|
|
110
|
+
/**
|
|
111
|
+
* One `SystemAdapters` slot a mounted root's `systems` table answered with
|
|
112
|
+
* `absent(reason)` (`adapter/system-slot.ts`) — a POSITIVE absence.
|
|
113
|
+
*
|
|
114
|
+
* Nothing is installed for it. It exists so a reader can tell "this game has no
|
|
115
|
+
* physics" from "nobody looked", which the adapter bag alone cannot do: an
|
|
116
|
+
* unfilled slot has the same shape for both, and only one of them is a work
|
|
117
|
+
* order.
|
|
118
|
+
*/
|
|
119
|
+
export interface DeclaredSystemAbsence {
|
|
120
|
+
/** The root whose declaration answered — absences are declared per root, and
|
|
121
|
+
* the slot is only truly absent when NO root fills it. */
|
|
122
|
+
readonly rootId: string;
|
|
123
|
+
readonly slot: keyof SystemAdapters;
|
|
124
|
+
/** The game's own words: what was searched, and what was found. */
|
|
125
|
+
readonly reason: string;
|
|
126
|
+
}
|
|
110
127
|
export interface RootInstance {
|
|
111
128
|
/** Manifest root id. */
|
|
112
129
|
readonly id: string;
|
|
@@ -160,6 +177,39 @@ export interface RootInstance {
|
|
|
160
177
|
* instead (unless it `drivesOwnLoop`, in which case it isn't ticked at
|
|
161
178
|
* all — see `runFrame`). */
|
|
162
179
|
readonly frame?: RootFrameHooks | undefined;
|
|
180
|
+
/** True from the moment this world's `mounted.dispose()` runs. There is no
|
|
181
|
+
* `unregisterRoot`, so a disposed world stays in `Game.roots`; `runFrame`
|
|
182
|
+
* reads this to skip it entirely — frame hooks AND the opaque
|
|
183
|
+
* `mounted.update` fallback (see the disposed-world guard in
|
|
184
|
+
* `createRootInstance`). */
|
|
185
|
+
readonly disposed: boolean;
|
|
186
|
+
/**
|
|
187
|
+
* THIS ROOT'S WHOLE DECLARATION, BOUND — `adapter/binding.ts`'s
|
|
188
|
+
* {@link RootBinding}, assembled at registration from this instance's own
|
|
189
|
+
* `adapter`/`mounted`/`pausable` plus the {@link RootDeclaration} the
|
|
190
|
+
* resolver produced. Every member of it is a reference to something already
|
|
191
|
+
* reachable through the fields above; it is the ONE place the five protocol
|
|
192
|
+
* families are addressed by name rather than re-assembled per consumer.
|
|
193
|
+
*
|
|
194
|
+
* `null` in exactly ONE honest case, and never as a degrade: the
|
|
195
|
+
* registration carried NO declaration — a bare
|
|
196
|
+
* `registerThreeRoot(game, adapter, mounted)` from a test harness, or a
|
|
197
|
+
* `mountManifestRoots` caller that supplied an already-constructed adapter
|
|
198
|
+
* with no entry namespace behind it. There is no manifest root, no parsed
|
|
199
|
+
* definition and no entry surface to bind, and fabricating them would be
|
|
200
|
+
* the anti-shim rule broken at the seam that exists to hold it. Every root
|
|
201
|
+
* the editor resolves through `resolveAllRoots`/`resolveAllRootEntries`
|
|
202
|
+
* carries a declaration, so its binding is non-null.
|
|
203
|
+
*
|
|
204
|
+
* A mount that exposes no `authoring` does NOT null this out; it costs that
|
|
205
|
+
* root its `projection` and `truth` members only (see
|
|
206
|
+
* {@link RootBinding.projection}). That distinction is load-bearing: the
|
|
207
|
+
* editor supplies native TSX roots' authoring itself, so treating an
|
|
208
|
+
* absent `mounted.authoring` as an absent BINDING made `binding` null for
|
|
209
|
+
* every first-party root and left four perfectly constructible families
|
|
210
|
+
* unreadable.
|
|
211
|
+
*/
|
|
212
|
+
readonly binding: RootBinding | null;
|
|
163
213
|
}
|
|
164
214
|
/**
|
|
165
215
|
* Minimal identity surface `RootInstance.adapter` needs (T7.5) — see that
|
|
@@ -196,6 +246,9 @@ export interface RootInstanceInit {
|
|
|
196
246
|
readonly physics2d?: Physics2DRegistry | undefined;
|
|
197
247
|
readonly camera?: unknown;
|
|
198
248
|
readonly frame?: RootFrameHooks | undefined;
|
|
249
|
+
/** This root's bound declaration — see {@link RootInstance.binding} for
|
|
250
|
+
* when it is legitimately absent. */
|
|
251
|
+
readonly binding?: RootBinding | null | undefined;
|
|
199
252
|
}
|
|
200
253
|
/**
|
|
201
254
|
* Build a `RootInstance` whose kind-narrowed accessors throw descriptively
|
|
@@ -204,23 +257,9 @@ export interface RootInstanceInit {
|
|
|
204
257
|
* slice or later ones) gets identical throw behavior.
|
|
205
258
|
*/
|
|
206
259
|
export declare function createRootInstance(init: RootInstanceInit): RootInstance;
|
|
207
|
-
/**
|
|
208
|
-
* Type guard for whether a `MountedThreeRoot` is a first-party
|
|
209
|
-
* `SetupThreeRootAdapter` mount (has a live `GameContext` at `.ctx`). Used to
|
|
210
|
-
* decide whether a world's `physics`/`collisions`/`camera` can be populated
|
|
211
|
-
* from it — an external
|
|
212
|
-
* adapter's mount has none of these first-party handles.
|
|
213
|
-
*
|
|
214
|
-
* Checks the `firstParty: true` brand (checklist item 1), NOT `'ctx' in
|
|
215
|
-
* mounted` — a foreign mount may carry an unrelated `ctx` key, so a
|
|
216
|
-
* structural `'ctx' in mounted` check would misfire. The probe is a plain property read, not an
|
|
217
|
-
* `instanceof`/value import of `setup-three-root-adapter.ts` — the
|
|
218
|
-
* `MountedSetupThreeRoot` import above stays type-only.
|
|
219
|
-
*/
|
|
220
|
-
export declare function isFirstPartyMounted(mounted: MountedRoot): mounted is MountedSetupThreeRoot;
|
|
221
260
|
/**
|
|
222
261
|
* One world's half of a debris disposal, as {@link disposeDebrisSubtree} needs
|
|
223
|
-
* it.
|
|
262
|
+
* it.
|
|
224
263
|
*
|
|
225
264
|
* `physics`/`rapierWorld` are OPTIONAL: an owner that builds no first-party
|
|
226
265
|
* Rapier runtime (an R3F world) carries neither, and {@link
|
|
@@ -228,23 +267,22 @@ export declare function isFirstPartyMounted(mounted: MountedRoot): mounted is Mo
|
|
|
228
267
|
* unconditionally.
|
|
229
268
|
*/
|
|
230
269
|
export interface DebrisOwner {
|
|
231
|
-
readonly physics?:
|
|
232
|
-
readonly rapierWorld?:
|
|
270
|
+
readonly physics?: PhysicsRegistry;
|
|
271
|
+
readonly rapierWorld?: import('@dimforge/rapier3d-compat').World;
|
|
233
272
|
}
|
|
234
273
|
/**
|
|
235
274
|
* P3 — what `SimClock.disposeAfter` actually does. `core/sim-clock.ts` knows
|
|
236
275
|
* only *when*; this is the *what*, and it lives here because it is the runtime
|
|
237
276
|
* that knows about Rapier and shared geometry.
|
|
238
277
|
*
|
|
239
|
-
* The order mirrors `adapter/
|
|
278
|
+
* The order mirrors `adapter/world3d-react/r3f-root-factory.tsx`'s world teardown for
|
|
240
279
|
* ONE subtree. Within the physics step,
|
|
241
280
|
* `rapierWorld.removeRigidBody(body)` comes BEFORE `physics.remove(node)`: the
|
|
242
281
|
* registry's `remove()` only drops index entries, so reversing the two leaks
|
|
243
282
|
* the Rapier body.
|
|
244
283
|
*
|
|
245
|
-
* `owners` is every world that could own part of the subtree
|
|
246
|
-
*
|
|
247
|
-
* adapter mount passes its own ctx. `physics.get` is a no-op for a node the
|
|
284
|
+
* `owners` is every world that could own part of the subtree. `physics.get`
|
|
285
|
+
* is a no-op for a node the
|
|
248
286
|
* owner does not own, so offering the subtree to each is safe.
|
|
249
287
|
*
|
|
250
288
|
* Safe on an object already removed or already disposed: `removeFromParent` on
|
|
@@ -269,13 +307,13 @@ export interface Game {
|
|
|
269
307
|
* Within each phase,
|
|
270
308
|
* `GameInternal.runFrame` runs THIS runner's `runPhase` first, before any
|
|
271
309
|
* world's engine systems/component ticks/world-bound game systems (e.g.
|
|
272
|
-
* `ctx.systems.add`, which stays world-bound to the default world
|
|
273
|
-
*
|
|
310
|
+
* `ctx.systems.add`, which stays world-bound to the default world).
|
|
311
|
+
* Empty for every existing game (nothing registers
|
|
274
312
|
* against it), so an empty runner has no frame cost beyond dispatch.
|
|
275
313
|
*/
|
|
276
314
|
readonly systems: SystemRunner;
|
|
277
315
|
/** Declaration-ordered. This is the same array reference `registerRoot`
|
|
278
|
-
* mutates, not a snapshot, so holders
|
|
316
|
+
* mutates, not a snapshot, so holders observe
|
|
279
317
|
* later registrations. */
|
|
280
318
|
readonly roots: ReadonlyArray<RootInstance>;
|
|
281
319
|
world(id: string): RootInstance | null;
|
|
@@ -322,7 +360,18 @@ export interface Game {
|
|
|
322
360
|
* `Game` doubles in tests; `installNativeSystemsBindings` refuses loudly
|
|
323
361
|
* when the hosting Game lacks it.
|
|
324
362
|
*/
|
|
325
|
-
installDeclaredSystemAdapters?(rootId: string, slots: Readonly<Partial<SystemAdapters
|
|
363
|
+
installDeclaredSystemAdapters?(rootId: string, slots: Readonly<Partial<SystemAdapters>>, absent?: readonly DeclaredSystemAbsence[]): void;
|
|
364
|
+
/**
|
|
365
|
+
* Every slot a mounted root's `systems` table answered with `absent(reason)`,
|
|
366
|
+
* across all roots — the game-scoped read of the positive absences.
|
|
367
|
+
*
|
|
368
|
+
* This is what separates "this game has no networking" from "nobody looked",
|
|
369
|
+
* and it is the ONLY source for that distinction on a native mount: the
|
|
370
|
+
* adapter bag ({@link systemAdapters}) can only say a slot is unfilled, which
|
|
371
|
+
* is the same shape for both. Empty means no root declared any absence — NOT
|
|
372
|
+
* that every slot is answered.
|
|
373
|
+
*/
|
|
374
|
+
readonly declaredSystemAbsences?: readonly DeclaredSystemAbsence[];
|
|
326
375
|
/** The one game-owned `InputManager`, shared by every first-party root. */
|
|
327
376
|
readonly input: InputManager;
|
|
328
377
|
/**
|
|
@@ -337,7 +386,7 @@ export interface Game {
|
|
|
337
386
|
/** Game-level play-state control surface (D10, T7.6) — see {@link PlayState}. */
|
|
338
387
|
readonly play: PlayState;
|
|
339
388
|
/**
|
|
340
|
-
*
|
|
389
|
+
* The interpolation alpha the most recent display frame presented
|
|
341
390
|
* at: `accumulator / fixedDt`, in `[0, 1]`. `0` means "exactly on the last
|
|
342
391
|
* completed fixed state", `0.5` means "halfway to the next one".
|
|
343
392
|
*
|
|
@@ -349,7 +398,7 @@ export interface Game {
|
|
|
349
398
|
*/
|
|
350
399
|
readonly renderAlpha: number;
|
|
351
400
|
/**
|
|
352
|
-
*
|
|
401
|
+
* The `RenderStepped`-shaped host: register a callback that runs
|
|
353
402
|
* ONCE PER DISPLAY FRAME, before that frame's `preRender`/`render` phases,
|
|
354
403
|
* with `(alpha, displayDt)`.
|
|
355
404
|
*
|
|
@@ -422,21 +471,21 @@ export interface GameInternal extends Game {
|
|
|
422
471
|
* touches no other world at all — a natural no-op while not paused, since
|
|
423
472
|
* the frozen set is then empty.
|
|
424
473
|
*
|
|
425
|
-
*
|
|
474
|
+
* `opts.skipRenderPhases` omits `preRender`+`render` from
|
|
426
475
|
* the pass — every other phase, and `endFrame`, run exactly as always. A
|
|
427
476
|
* host that drives presentation at DISPLAY rate sets it on every substep
|
|
428
477
|
* and calls {@link runRenderFrame} once per real frame instead
|
|
429
478
|
* (`create-runtime.ts`). A host that does
|
|
430
|
-
* not set it
|
|
479
|
+
* not set it renders inside the substep — which is why
|
|
431
480
|
* `externalDrive` capture (`render-control.ts`'s `simulateSubsteps`, which
|
|
432
|
-
* calls `runFrame(fixedDt)` with no opts) is frame-exact
|
|
481
|
+
* calls `runFrame(fixedDt)` with no opts) is frame-exact.
|
|
433
482
|
* `runTicks` sets it per tick for its `render: 'none' | 'last'` modes.
|
|
434
483
|
*/
|
|
435
484
|
runFrame(dt: number, opts?: {
|
|
436
485
|
skipRenderPhases?: boolean;
|
|
437
486
|
}): void;
|
|
438
487
|
/**
|
|
439
|
-
*
|
|
488
|
+
* Run ONE display frame's presentation pass: the registered
|
|
440
489
|
* `onRenderStep` callbacks, then the `preRender` and `render` phases across
|
|
441
490
|
* game-scoped systems and every host-driven world, in the same
|
|
442
491
|
* game-systems-then-worlds order {@link runFrame} uses.
|
|
@@ -487,6 +536,18 @@ export interface GameInternal extends Game {
|
|
|
487
536
|
* absorbs it exactly as it would absorb any other slow-frame gap (up to
|
|
488
537
|
* 8 substeps, additional time dropped) — `runTicks` does not need to
|
|
489
538
|
* (and does not) touch the accumulator itself to make this safe.
|
|
539
|
+
* One consequence worth its own sentence: because the burst is one
|
|
540
|
+
* synchronous JS turn, no React commit can interleave it — a scene
|
|
541
|
+
* RELOAD triggered inside the burst (a translated
|
|
542
|
+
* `reload_current_scene`, a `SceneManager.LoadScene`) leaves the
|
|
543
|
+
* incoming world unmounted for the burst's remaining ticks, which the
|
|
544
|
+
* outgoing world's replacement therefore never simulates. Measured on
|
|
545
|
+
* the starter-kit port: a 20-tick burst spanning a reload left the
|
|
546
|
+
* fresh scene with zero ticks (its census had no player), while the
|
|
547
|
+
* same 20 ticks driven as 1-tick calls interleaved the commit and
|
|
548
|
+
* matched the source engine, whose reloads happen between frames. A
|
|
549
|
+
* caller that can trigger remounts mid-window drives 1-tick bursts
|
|
550
|
+
* (the fidelity driver's `advanceTicks` is the worked example).
|
|
490
551
|
* - **`opts.render`** (default `'last'`): `'last'` skips the `preRender`/
|
|
491
552
|
* `render` phases for ticks `0..n-2` and runs the full phase list
|
|
492
553
|
* (including `preRender`/`render`) on the final tick only — the GGPO
|
|
@@ -511,8 +572,8 @@ export interface GameInternal extends Game {
|
|
|
511
572
|
runTicks(n: number, opts?: RunTicksOptions): void;
|
|
512
573
|
/**
|
|
513
574
|
* ADAPTER-MOUNT surface, not game-facing: an adapter's `mount()` calls
|
|
514
|
-
* this (via `host.game` — the
|
|
515
|
-
* `createR3FRootContext`
|
|
575
|
+
* this (via `host.game` — the R3F
|
|
576
|
+
* `createR3FRootContext` does) to load the game-owned input map ONCE,
|
|
516
577
|
* even when several roots ask for the same path; competing paths throw
|
|
517
578
|
* (input is game-owned, so roots cannot load competing maps). GAME code
|
|
518
579
|
* never calls this — a project's map loads automatically at mount from
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"game.d.ts","sourceRoot":"","sources":["../../src/runtime/game.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,KAAK,IAAI,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AACpC,OAAO,KAAK,EAAE,cAAc,IAAI,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"game.d.ts","sourceRoot":"","sources":["../../src/runtime/game.ts"],"names":[],"mappings":"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"}
|