@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
|
@@ -152,10 +152,16 @@ const INPUT_TRACE_CAP = 2000;
|
|
|
152
152
|
* controls. `setTouchButton(sourceId, pressed)` feeds a digital action
|
|
153
153
|
* (edge-tracked like `mouse_button`); `setTouchStick(sourceId, value)`
|
|
154
154
|
* feeds a vector2 action (deadzone-rescaled like a gamepad stick). These
|
|
155
|
-
* are the injectable entry points
|
|
156
|
-
*
|
|
157
|
-
*
|
|
158
|
-
*
|
|
155
|
+
* are the injectable entry points an on-screen touch UI calls, and they
|
|
156
|
+
* are the UPPER half of the touch story. The LOWER half — the DOM
|
|
157
|
+
* pointer stream itself, as dense finger indices mapped into the game's
|
|
158
|
+
* own design space and gated on `isInputActive()` — is
|
|
159
|
+
* `input/host-pointer.ts` (`createHostPointer`), beside this file; a
|
|
160
|
+
* control drains its `takeTouches()` and calls the setters above.
|
|
161
|
+
* What is deliberately still NOT here is the control layer in between:
|
|
162
|
+
* which rect owns which finger, and how a knob's offset becomes a stick
|
|
163
|
+
* vector, is the shape of the UI drawing the control, so it belongs to
|
|
164
|
+
* that UI and there is no first-party one to generalize from yet.
|
|
159
165
|
* - Focus gating — `blur`/`focus` on `window` (guarded, real DOM only) now
|
|
160
166
|
* drop input the same way `setEnabled(false)` does (flushing held
|
|
161
167
|
* key/mouse/touch-button state) without touching the `enabled` flag the
|
|
@@ -392,7 +398,7 @@ export class InputManager {
|
|
|
392
398
|
// caller never tells `poll()` which tick it's servicing (every existing
|
|
393
399
|
// bare/headless caller — tests, a mount with no `Game` shell behind it —
|
|
394
400
|
// keeps this exact pre-existing behavior, zero regression). The REAL
|
|
395
|
-
// per-world wiring (`
|
|
401
|
+
// per-world wiring (`world3d-react/r3f-root-factory.tsx`) instead passes the
|
|
396
402
|
// shared `Game`-level tick counter into every `poll(tick)` call — this is
|
|
397
403
|
// deliberate: an InputManager-local counter drifts from the actual game
|
|
398
404
|
// tick for a paused/frozen world (its `poll()` isn't called every game
|
|
@@ -422,7 +428,7 @@ export class InputManager {
|
|
|
422
428
|
* action}`) emitted whenever a scheduled entry is discarded because its
|
|
423
429
|
* target tick's input phase never ran. Wired by whoever constructs this
|
|
424
430
|
* `InputManager` with access to a `DebugRegistry`
|
|
425
|
-
* (`
|
|
431
|
+
* (`world3d-react/r3f-root-factory.tsx`, the same seed spot as
|
|
426
432
|
* `setVirtualInputTarget`/`setInputActionsSource`) — `null` (the
|
|
427
433
|
* default) for a bare/headless `InputManager`, in which case a drop
|
|
428
434
|
* stays silent (matching pre-D15/T-D15.5 behavior). */
|
|
@@ -731,8 +737,8 @@ export class InputManager {
|
|
|
731
737
|
`use the getter for '${actual}' instead.`);
|
|
732
738
|
}
|
|
733
739
|
}
|
|
734
|
-
/** The names of all registered actions (
|
|
735
|
-
*
|
|
740
|
+
/** The names of all registered actions (the `game.input.actions` debug seam
|
|
741
|
+
* enumerates these — `runtime/game-input-seams.ts`). */
|
|
736
742
|
actionNames() {
|
|
737
743
|
return [...this.actions.keys()];
|
|
738
744
|
}
|
|
@@ -740,7 +746,7 @@ export class InputManager {
|
|
|
740
746
|
* Poll gamepads and virtual look stick (call at start of frame).
|
|
741
747
|
*
|
|
742
748
|
* `tick` (D15/T-D15.3/.5) — the GAME tick this call services. Pass the
|
|
743
|
-
* live, shared `Game` tick counter here (`
|
|
749
|
+
* live, shared `Game` tick counter here (`world3d-react/r3f-root-factory.tsx` does,
|
|
744
750
|
* via `DebugRegistry.getGameTick()`) so `scheduleActionAtTick`'s numbering
|
|
745
751
|
* never drifts from the actual game tick — the bug an earlier revision of
|
|
746
752
|
* this feature had: an InputManager-LOCAL counter, incremented once per
|
|
@@ -1622,6 +1628,21 @@ export class InputManager {
|
|
|
1622
1628
|
isFocused() {
|
|
1623
1629
|
return this.focused;
|
|
1624
1630
|
}
|
|
1631
|
+
/**
|
|
1632
|
+
* The gate every REAL-DEVICE listener here passes: {@link isEnabled} AND
|
|
1633
|
+
* {@link isFocused}. Public because the DOM edge this class deliberately
|
|
1634
|
+
* does not own — `host-pointer.ts`, the pointer stream behind the touch
|
|
1635
|
+
* backends — must pass the SAME gate, and a caller writing
|
|
1636
|
+
* `isEnabled() && isFocused()` out for itself is how a looser one drifts in
|
|
1637
|
+
* (a pointer adapter that checked only `isEnabled` kept updating position
|
|
1638
|
+
* for a blurred tab). Read it; do not recompose it.
|
|
1639
|
+
*
|
|
1640
|
+
* Machine input (`setVirtualAction` and the tick-scheduled actuations) is
|
|
1641
|
+
* deliberately NOT this gate — see `machineInputActive`.
|
|
1642
|
+
*/
|
|
1643
|
+
isInputActive() {
|
|
1644
|
+
return this.inputActive;
|
|
1645
|
+
}
|
|
1625
1646
|
/** Whether the pointer is currently locked to {@link requestPointerLock}'s
|
|
1626
1647
|
* element (F2, spec §12 "pointer lock") — tracked via the real
|
|
1627
1648
|
* `pointerlockchange` event. */
|
|
@@ -2090,12 +2111,11 @@ export class InputManager {
|
|
|
2090
2111
|
this.touchStickValues.delete(sourceId);
|
|
2091
2112
|
}
|
|
2092
2113
|
// ==========================================================================
|
|
2093
|
-
//
|
|
2094
|
-
// hollowstone's proven `VirtualInput` (`bot/virtual-input.ts`): a bot drives
|
|
2114
|
+
// Action-level virtual input for a synthetic player: a bot drives
|
|
2095
2115
|
// NAMED ACTIONS (not raw devices), and its contributions join action
|
|
2096
2116
|
// resolution at exactly the same points binding contributions do (see
|
|
2097
2117
|
// isPressed/isJustPressed and collectScalarContributions/
|
|
2098
|
-
// collectVector2Contributions above).
|
|
2118
|
+
// collectVector2Contributions above). The gates are split: virtual input
|
|
2099
2119
|
// passes `machineInputActive` (the editor's `enabled` flag only), while
|
|
2100
2120
|
// human input keeps the full `inputActive` (enabled AND focused) gate — a
|
|
2101
2121
|
// synthetic player must keep playing the shared editor tab while the
|
|
@@ -2290,7 +2310,7 @@ export class InputManager {
|
|
|
2290
2310
|
* `'input.schedule.dropped'` (`{tick, action}`) whenever it discards a
|
|
2291
2311
|
* scheduled entry for a tick whose input phase never ran. Called once by
|
|
2292
2312
|
* whoever constructs this `InputManager` with a `DebugRegistry` behind it
|
|
2293
|
-
* (`
|
|
2313
|
+
* (`world3d-react/r3f-root-factory.tsx`), the same seed spot as
|
|
2294
2314
|
* `setVirtualInputTarget`/`setInputActionsSource` — never called directly
|
|
2295
2315
|
* by gameplay code. */
|
|
2296
2316
|
setDebugEmit(fn) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rebind-controller.d.ts","sourceRoot":"","sources":["../../src/input/rebind-controller.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rebind-controller.d.ts","sourceRoot":"","sources":["../../src/input/rebind-controller.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAEnE,uDAAuD;AACvD,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,KAAK,CAAC;AAE3C,MAAM,MAAM,WAAW,GACnB;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAClB;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC5E;IACE,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,YAAY,CAAC;IACvB,SAAS,EAAE,eAAe,EAAE,CAAC;CAC9B,GACD;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE,CAAC;AAErE,qBAAa,gBAAgB;IAGf,OAAO,CAAC,QAAQ,CAAC,KAAK;IAFlC,OAAO,CAAC,KAAK,CAAmC;gBAEnB,KAAK,EAAE,YAAY;IAEhD,QAAQ,IAAI,WAAW;IAIvB;;;;;OAKG;IACH,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,GAAE,UAAsB,EAAE,KAAK,SAAI,GAAG,IAAI;IAIzE,oEAAoE;IACpE,MAAM,IAAI,IAAI;IAId;;;;;;;;OAQG;IACH,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,WAAW;IAa3C;;;;;;;OAOG;IACH,eAAe,IAAI,WAAW;IAQ9B,OAAO,CAAC,KAAK;CAId"}
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
//
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
// all, and the React component becomes a thin, mechanically-verifiable
|
|
8
|
-
// wrapper (see the template component's own doc comment).
|
|
1
|
+
// A framework-free rebinding STATE MACHINE over an `InputManager`.
|
|
2
|
+
// Deliberately has no dependency on React (or any UI library): "listen for the
|
|
3
|
+
// next input, surface a conflict, let the caller decide" is the same flow
|
|
4
|
+
// whether the caller is a React panel or a CLI. Keeping the logic here makes
|
|
5
|
+
// it unit-testable with no DOM/JSX at all, and leaves any UI a thin,
|
|
6
|
+
// mechanically-verifiable wrapper.
|
|
9
7
|
//
|
|
10
8
|
// Flow: `listen(actionName)` -> caller captures the next raw input event
|
|
11
9
|
// itself (a keydown, a gamepad poll, a touch tap — capture is inherently
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/input/schema.ts"],"names":[],"mappings":"AAoCA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/input/schema.ts"],"names":[],"mappings":"AAoCA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAqN7E;gGACgG;AAChG,eAAO,MAAM,kBAAkB,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,CAa1B,CAAC;AAE9B,sEAAsE;AACtE,eAAO,MAAM,iBAAiB,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CA0B1C,CAAC;AAEZ;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,CAOjB,CAAC"}
|
package/dist/input/schema.js
CHANGED
|
@@ -34,15 +34,20 @@
|
|
|
34
34
|
// injectPointerPosition) through the SAME deadzone/normalize/combine path
|
|
35
35
|
// real device bindings use.
|
|
36
36
|
import { z } from 'zod';
|
|
37
|
-
const KeyBindingSchema = z
|
|
37
|
+
const KeyBindingSchema = z
|
|
38
|
+
.object({
|
|
38
39
|
type: z.literal('key').describe('Binding kind: a keyboard key (KeyboardEvent.code)'),
|
|
39
40
|
code: z.string().describe('KeyboardEvent.code value, e.g. "KeyW", "Space", "ArrowUp"'),
|
|
40
|
-
})
|
|
41
|
-
|
|
41
|
+
})
|
|
42
|
+
.strict();
|
|
43
|
+
const MouseButtonBindingSchema = z
|
|
44
|
+
.object({
|
|
42
45
|
type: z.literal('mouse_button').describe('Binding kind: a mouse button'),
|
|
43
46
|
button: z.number().describe('MouseEvent.button index (0 = left, 1 = middle, 2 = right)'),
|
|
44
|
-
})
|
|
45
|
-
|
|
47
|
+
})
|
|
48
|
+
.strict();
|
|
49
|
+
const MouseMoveBindingSchema = z
|
|
50
|
+
.object({
|
|
46
51
|
type: z
|
|
47
52
|
.literal('mouse_move')
|
|
48
53
|
.describe('Binding kind: raw mouse movement (F2, spec §12 "Complete Device Backends"). Feeds a ' +
|
|
@@ -55,20 +60,26 @@ const MouseMoveBindingSchema = z.object({
|
|
|
55
60
|
.describe("Radial deadzone magnitude applied only when this binding feeds a 'vector2'-valueType " +
|
|
56
61
|
"action (default 0 — no deadzone; ignored for 'pointerDelta' reads, which are never " +
|
|
57
62
|
'deadzoned).'),
|
|
58
|
-
})
|
|
59
|
-
|
|
63
|
+
})
|
|
64
|
+
.strict();
|
|
65
|
+
const GamepadButtonBindingSchema = z
|
|
66
|
+
.object({
|
|
60
67
|
type: z.literal('gamepad_button').describe('Binding kind: a gamepad face/shoulder button'),
|
|
61
68
|
button: z.number().describe('Standard Gamepad API button index'),
|
|
62
|
-
})
|
|
63
|
-
|
|
69
|
+
})
|
|
70
|
+
.strict();
|
|
71
|
+
const GamepadAxisBindingSchema = z
|
|
72
|
+
.object({
|
|
64
73
|
type: z.literal('gamepad_axis').describe('Binding kind: a single thresholded gamepad axis'),
|
|
65
74
|
axis: z.number().describe('Standard Gamepad API axis index'),
|
|
66
75
|
direction: z
|
|
67
76
|
.enum(['positive', 'negative'])
|
|
68
77
|
.describe('Which side of the deadzone counts as "pressed"'),
|
|
69
78
|
deadzone: z.number().optional().describe('Deadzone magnitude (default 0.15 if omitted)'),
|
|
70
|
-
})
|
|
71
|
-
|
|
79
|
+
})
|
|
80
|
+
.strict();
|
|
81
|
+
const GamepadAxisPairBindingSchema = z
|
|
82
|
+
.object({
|
|
72
83
|
type: z
|
|
73
84
|
.literal('gamepad_axis_pair')
|
|
74
85
|
.describe('Binding kind: a coupled (x, y) gamepad axis pair, e.g. a stick used as a 2D vector ' +
|
|
@@ -78,7 +89,8 @@ const GamepadAxisPairBindingSchema = z.object({
|
|
|
78
89
|
xAxis: z.number().describe('Standard Gamepad API axis index for the X component'),
|
|
79
90
|
yAxis: z.number().describe('Standard Gamepad API axis index for the Y component'),
|
|
80
91
|
deadzone: z.number().optional().describe('Deadzone magnitude (default 0.15 if omitted)'),
|
|
81
|
-
})
|
|
92
|
+
})
|
|
93
|
+
.strict();
|
|
82
94
|
// ---------------------------------------------------------------------------
|
|
83
95
|
// F1 (spec §12) — injected test input bindings. LIVE (real runtime readers in
|
|
84
96
|
// InputManager's getScalar/getVector2/getPointerDelta/getPointerPosition),
|
|
@@ -86,7 +98,8 @@ const GamepadAxisPairBindingSchema = z.object({
|
|
|
86
98
|
// backend: real device kinds F2 adds later feed the same typed-value
|
|
87
99
|
// aggregation path these exercise today.
|
|
88
100
|
// ---------------------------------------------------------------------------
|
|
89
|
-
const TestAxisBindingSchema = z
|
|
101
|
+
const TestAxisBindingSchema = z
|
|
102
|
+
.object({
|
|
90
103
|
type: z
|
|
91
104
|
.literal('test_axis')
|
|
92
105
|
.describe("Binding kind: an injected synthetic scalar value for a 'scalar'-valueType action " +
|
|
@@ -101,8 +114,10 @@ const TestAxisBindingSchema = z.object({
|
|
|
101
114
|
.describe('1D deadzone magnitude applied to the injected raw value before combine (default 0 — no ' +
|
|
102
115
|
'deadzone). Values below it read as 0; values at/above it rescale from 0 (at the ' +
|
|
103
116
|
'deadzone edge) to ±1 (at |raw| = 1), sign preserved.'),
|
|
104
|
-
})
|
|
105
|
-
|
|
117
|
+
})
|
|
118
|
+
.strict();
|
|
119
|
+
const TestVector2BindingSchema = z
|
|
120
|
+
.object({
|
|
106
121
|
type: z
|
|
107
122
|
.literal('test_vector2')
|
|
108
123
|
.describe("Binding kind: an injected synthetic {x,y} value for a 'vector2'-valueType action " +
|
|
@@ -118,8 +133,10 @@ const TestVector2BindingSchema = z.object({
|
|
|
118
133
|
'— no deadzone). Vectors whose magnitude is below it read as {0,0}; at/above it, ' +
|
|
119
134
|
'direction is preserved and magnitude rescales the same way the scalar deadzone does, ' +
|
|
120
135
|
'then the result is clamped to the unit circle (magnitude <= 1).'),
|
|
121
|
-
})
|
|
122
|
-
|
|
136
|
+
})
|
|
137
|
+
.strict();
|
|
138
|
+
const TestPointerDeltaBindingSchema = z
|
|
139
|
+
.object({
|
|
123
140
|
type: z
|
|
124
141
|
.literal('test_pointer_delta')
|
|
125
142
|
.describe("Binding kind: an injected synthetic per-frame {x,y} delta for a 'pointerDelta'-" +
|
|
@@ -128,8 +145,10 @@ const TestPointerDeltaBindingSchema = z.object({
|
|
|
128
145
|
sourceId: z
|
|
129
146
|
.string()
|
|
130
147
|
.describe('Names the injected test source this binding reads (InputManager.injectPointerDelta).'),
|
|
131
|
-
})
|
|
132
|
-
|
|
148
|
+
})
|
|
149
|
+
.strict();
|
|
150
|
+
const TestPointerPositionBindingSchema = z
|
|
151
|
+
.object({
|
|
133
152
|
type: z
|
|
134
153
|
.literal('test_pointer_position')
|
|
135
154
|
.describe("Binding kind: an injected synthetic absolute {x,y} position for a 'pointerPosition'-" +
|
|
@@ -138,7 +157,8 @@ const TestPointerPositionBindingSchema = z.object({
|
|
|
138
157
|
sourceId: z
|
|
139
158
|
.string()
|
|
140
159
|
.describe('Names the injected test source this binding reads (InputManager.injectPointerPosition).'),
|
|
141
|
-
})
|
|
160
|
+
})
|
|
161
|
+
.strict();
|
|
142
162
|
// ---------------------------------------------------------------------------
|
|
143
163
|
// F2 (spec §12 "Complete Device Backends") — touch/virtual-control bindings.
|
|
144
164
|
// LIVE (real runtime readers in InputManager's isPressed/isJustPressed/
|
|
@@ -148,7 +168,8 @@ const TestPointerPositionBindingSchema = z.object({
|
|
|
148
168
|
// touchstart/touchmove/touchend handlers would call (that DOM wiring is a
|
|
149
169
|
// thin adapter at the edge, out of scope here — see input-manager.ts).
|
|
150
170
|
// ---------------------------------------------------------------------------
|
|
151
|
-
const TouchButtonBindingSchema = z
|
|
171
|
+
const TouchButtonBindingSchema = z
|
|
172
|
+
.object({
|
|
152
173
|
type: z
|
|
153
174
|
.literal('touch_button')
|
|
154
175
|
.describe("Binding kind: a virtual on-screen button for a 'digital' action " +
|
|
@@ -158,8 +179,10 @@ const TouchButtonBindingSchema = z.object({
|
|
|
158
179
|
.string()
|
|
159
180
|
.describe('Names the virtual control zone this binding reads (InputManager.setTouchButton) — a ' +
|
|
160
181
|
'touch-UI-chosen id, not a real device index.'),
|
|
161
|
-
})
|
|
162
|
-
|
|
182
|
+
})
|
|
183
|
+
.strict();
|
|
184
|
+
const TouchStickBindingSchema = z
|
|
185
|
+
.object({
|
|
163
186
|
type: z
|
|
164
187
|
.literal('touch_stick')
|
|
165
188
|
.describe("Binding kind: a virtual on-screen analog stick for a 'vector2' action " +
|
|
@@ -174,7 +197,8 @@ const TouchStickBindingSchema = z.object({
|
|
|
174
197
|
.optional()
|
|
175
198
|
.describe('Radial deadzone magnitude applied to the raw {x,y} before combine (default 0 — no ' +
|
|
176
199
|
'deadzone).'),
|
|
177
|
-
})
|
|
200
|
+
})
|
|
201
|
+
.strict();
|
|
178
202
|
/** A single input binding. Every kind listed here is LIVE — F2 (spec §12) closed the last two
|
|
179
203
|
* dead stubs (`mouse_move`/`gamepad_axis_pair`) by giving both real `InputManager` readers. */
|
|
180
204
|
export const InputBindingSchema = z.discriminatedUnion('type', [
|
|
@@ -192,7 +216,8 @@ export const InputBindingSchema = z.discriminatedUnion('type', [
|
|
|
192
216
|
TouchStickBindingSchema,
|
|
193
217
|
]);
|
|
194
218
|
/** An action has a name (the record key) and one or more bindings. */
|
|
195
|
-
export const InputActionSchema = z
|
|
219
|
+
export const InputActionSchema = z
|
|
220
|
+
.object({
|
|
196
221
|
valueType: z
|
|
197
222
|
.enum(['digital', 'scalar', 'vector2', 'pointerDelta', 'pointerPosition'])
|
|
198
223
|
.default('digital')
|
|
@@ -212,7 +237,8 @@ export const InputActionSchema = z.object({
|
|
|
212
237
|
'by summing contributing {x,y} values then clamping to the unit circle. PointerDelta ' +
|
|
213
238
|
'actions sum contributing deltas. PointerPosition actions use the most-recently-' +
|
|
214
239
|
'written contributing source (last-write-wins).'),
|
|
215
|
-
})
|
|
240
|
+
})
|
|
241
|
+
.strict();
|
|
216
242
|
/**
|
|
217
243
|
* The `.inputmap.json` file format (`InputManager.loadMap`).
|
|
218
244
|
*
|
|
@@ -220,9 +246,11 @@ export const InputActionSchema = z.object({
|
|
|
220
246
|
* same convention `2d.version`/`Scene2DSchema` used before T2.3 gave the 3D
|
|
221
247
|
* scene version axis a real reader; see `schema-consumption-map.ts`).
|
|
222
248
|
*/
|
|
223
|
-
export const InputMapFileSchema = z
|
|
249
|
+
export const InputMapFileSchema = z
|
|
250
|
+
.object({
|
|
224
251
|
version: z.number().describe('Input map file format version (RESERVED — no range check yet)'),
|
|
225
252
|
actions: z
|
|
226
253
|
.record(z.string(), InputActionSchema)
|
|
227
254
|
.describe('Named actions, each with a list of bindings (InputManager.loadMap)'),
|
|
228
|
-
})
|
|
255
|
+
})
|
|
256
|
+
.strict();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filename.d.ts","sourceRoot":"","sources":["../../src/manifest/filename.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"filename.d.ts","sourceRoot":"","sources":["../../src/manifest/filename.ts"],"names":[],"mappings":"AAkBA,4EAA4E;AAC5E,eAAO,MAAM,iBAAiB,sBAAsB,CAAC;AAErD,iFAAiF;AACjF,eAAO,MAAM,yBAAyB,mBAAmB,CAAC;AAE1D,4DAA4D;AAC5D,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CASpE"}
|
|
@@ -1,17 +1,13 @@
|
|
|
1
1
|
// The project manifest's FILENAME. There is exactly ONE.
|
|
2
2
|
//
|
|
3
|
-
// The manifest is `vgai.project.json
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
// software, no such constituency exists, and a second way to spell the
|
|
9
|
-
// manifest is the defect — two accepted names meant both kept being written,
|
|
10
|
-
// and copies of the "try both" probe grew in five modules that agreed with the
|
|
11
|
-
// real resolver only by coincidence.
|
|
3
|
+
// The manifest is `vgai.project.json`, and NOTHING reads a second spelling
|
|
4
|
+
// (the legacy-removal doctrine, `docs/ARCHITECTURE-CORE.md` §Vocabulary). Two
|
|
5
|
+
// accepted names is the defect, not the convenience: both get written, and
|
|
6
|
+
// copies of the "try both" probe spread into modules that agree with the real
|
|
7
|
+
// resolver only by coincidence.
|
|
12
8
|
//
|
|
13
|
-
//
|
|
14
|
-
//
|
|
9
|
+
// The removed name REJECTS LOUDLY, naming the exact one-line fix — never
|
|
10
|
+
// silently ignored, never redirected. A directory
|
|
15
11
|
// carrying only `vgai.game.json` is an error with a `git mv` in the message,
|
|
16
12
|
// not a project that quietly fails to open.
|
|
17
13
|
//
|
|
@@ -35,7 +31,7 @@ export function isManifestFilename(name) {
|
|
|
35
31
|
*/
|
|
36
32
|
export function removedManifestFilenameMessage(where) {
|
|
37
33
|
return (`${where}: found \`${REMOVED_MANIFEST_FILENAME}\` and no \`${MANIFEST_FILENAME}\`. ` +
|
|
38
|
-
`\`${REMOVED_MANIFEST_FILENAME}\` was REMOVED (
|
|
34
|
+
`\`${REMOVED_MANIFEST_FILENAME}\` was REMOVED (the legacy-removal doctrine, ` +
|
|
39
35
|
'docs/ARCHITECTURE-CORE.md §Vocabulary) — nothing reads it any more, and it is ' +
|
|
40
36
|
'deliberately NOT read as a fallback, because a second accepted name is the defect.\n' +
|
|
41
37
|
`Fix: rename it — \`git mv ${REMOVED_MANIFEST_FILENAME} ${MANIFEST_FILENAME}\`. ` +
|
package/dist/manifest/load.d.ts
CHANGED
|
@@ -31,16 +31,6 @@ export type ResolvedAdapter = {
|
|
|
31
31
|
readonly assets: Record<string, string> | undefined;
|
|
32
32
|
readonly domStubs: string[] | undefined;
|
|
33
33
|
readonly captureTimeoutMs: number | undefined;
|
|
34
|
-
/**
|
|
35
|
-
* The component this root'''s WORLD is, in the game'''s own source (see the
|
|
36
|
-
* field'''s schema description). Present ⇒ Edit mounts THAT component
|
|
37
|
-
* alone as a still design-time document and Play mounts the game
|
|
38
|
-
* through `entry`; absent ⇒ `entry` is what both modes mount.
|
|
39
|
-
*/
|
|
40
|
-
readonly world?: {
|
|
41
|
-
readonly entry: string;
|
|
42
|
-
readonly export?: string | undefined;
|
|
43
|
-
} | undefined;
|
|
44
34
|
};
|
|
45
35
|
export interface ResolvedAdapterRoot {
|
|
46
36
|
readonly id: string;
|
|
@@ -48,6 +38,16 @@ export interface ResolvedAdapterRoot {
|
|
|
48
38
|
readonly description: string | undefined;
|
|
49
39
|
readonly adapter: ResolvedAdapter;
|
|
50
40
|
readonly entry: string | undefined;
|
|
41
|
+
/**
|
|
42
|
+
* The component this root's WORLD is, in the game's own source (see the
|
|
43
|
+
* field's schema description). Present ⇒ Edit mounts THAT component alone as
|
|
44
|
+
* its design-time document and Play mounts the game through `entry`;
|
|
45
|
+
* absent ⇒ `entry` is what both modes mount.
|
|
46
|
+
*/
|
|
47
|
+
readonly world?: {
|
|
48
|
+
readonly entry: string;
|
|
49
|
+
readonly export: string | undefined;
|
|
50
|
+
} | undefined;
|
|
51
51
|
readonly zOrder: number;
|
|
52
52
|
readonly pausable: boolean;
|
|
53
53
|
readonly loop: 'gated' | 'self-driven';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../src/manifest/load.ts"],"names":[],"mappings":"AAeA,OAAO,EAIL,KAAK,aAAa,EAEnB,MAAM,UAAU,CAAC;AAMlB,wCAAwC;AACxC,MAAM,MAAM,eAAe,GACvB;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IAC9C,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;CAC9C,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;CAC9C,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAGxB,QAAQ,CAAC,QAAQ,EAAE,cAAc,GAAG,aAAa,GAAG,cAAc,CAAC;IACnE,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IAC7C;;;;;;OAMG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../src/manifest/load.ts"],"names":[],"mappings":"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"}
|
package/dist/manifest/load.js
CHANGED
|
@@ -79,7 +79,6 @@ function resolveAdapter(root) {
|
|
|
79
79
|
assets: ingest.assets,
|
|
80
80
|
domStubs: ingest.domStubs,
|
|
81
81
|
captureTimeoutMs: ingest.captureTimeoutMs,
|
|
82
|
-
world: ingest.world,
|
|
83
82
|
};
|
|
84
83
|
}
|
|
85
84
|
function checkEngineVersionPin(version) {
|
|
@@ -95,11 +94,14 @@ function checkEngineVersionPin(version) {
|
|
|
95
94
|
* `id` drives uniqueness; `adapter` (incl. its surface and
|
|
96
95
|
* `module`/`ingest.*` sub-fields) drives adapter identity
|
|
97
96
|
* resolution; `entry` drives the entry cross-field rule and is
|
|
98
|
-
* carried through; `
|
|
97
|
+
* carried through; `world` is carried through for the ONE reader that mounts a
|
|
98
|
+
* design-time document (the editor's design session) and is deliberately not
|
|
99
|
+
* cross-checked against `entry` — the two name different modules on purpose;
|
|
100
|
+
* `zOrder` drives the final sort; `pausable`/`loop` are
|
|
99
101
|
* carried through as-is (their consumers are the runtime/CLI, T3.2/T3.3);
|
|
100
102
|
* `description` (T3.3
|
|
101
103
|
* slice 3) is carried through as-is — its consumer today is
|
|
102
|
-
* `resolveIngestDescriptor` (packages/editor/src/
|
|
104
|
+
* `resolveIngestDescriptor` (packages/editor/src/ingest/resolve-three.ts), which
|
|
103
105
|
* threads an ingest-three root's description into `IngestGame.description`.
|
|
104
106
|
*/
|
|
105
107
|
function resolveRoot(root) {
|
|
@@ -111,6 +113,7 @@ function resolveRoot(root) {
|
|
|
111
113
|
description: root.description,
|
|
112
114
|
adapter,
|
|
113
115
|
entry: root.entry,
|
|
116
|
+
world: root.world === undefined ? undefined : { entry: root.world.entry, export: root.world.export },
|
|
114
117
|
zOrder: root.zOrder,
|
|
115
118
|
pausable: root.pausable,
|
|
116
119
|
loop: root.loop,
|
|
@@ -126,9 +129,9 @@ function resolveRoot(root) {
|
|
|
126
129
|
* any Zod validation failure or cross-field rule violation.
|
|
127
130
|
*/
|
|
128
131
|
export function loadGameManifest(raw) {
|
|
129
|
-
// Removed-format guard FIRST, on the raw value: a
|
|
130
|
-
// would otherwise fail Zod's `roots` discriminated union with
|
|
131
|
-
// shape error instead of
|
|
132
|
+
// Removed-format guard FIRST, on the raw value: a root declaring a removed
|
|
133
|
+
// content field would otherwise fail Zod's `roots` discriminated union with
|
|
134
|
+
// a confusing shape error instead of the named migration message.
|
|
132
135
|
const parsed = GameManifestSchema.safeParse(raw);
|
|
133
136
|
if (!parsed.success) {
|
|
134
137
|
// D-V6: the `roots` `superRefine`'s composition issues — a duplicate root
|
|
@@ -28,10 +28,6 @@ export declare const RootAdapterSchema: z.ZodPipe<z.ZodTransform<unknown, unknow
|
|
|
28
28
|
moduleAliases: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
29
29
|
domStubs: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
30
30
|
captureTimeoutMs: z.ZodOptional<z.ZodNumber>;
|
|
31
|
-
world: z.ZodOptional<z.ZodObject<{
|
|
32
|
-
entry: z.ZodString;
|
|
33
|
-
export: z.ZodOptional<z.ZodString>;
|
|
34
|
-
}, z.core.$strict>>;
|
|
35
31
|
}, z.core.$strict>;
|
|
36
32
|
}, z.core.$strict>]>>;
|
|
37
33
|
export type RootAdapter = z.infer<typeof RootAdapterSchema>;
|
|
@@ -62,14 +58,14 @@ export declare const AdapterRootSchema: z.ZodObject<{
|
|
|
62
58
|
moduleAliases: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
63
59
|
domStubs: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
64
60
|
captureTimeoutMs: z.ZodOptional<z.ZodNumber>;
|
|
65
|
-
world: z.ZodOptional<z.ZodObject<{
|
|
66
|
-
entry: z.ZodString;
|
|
67
|
-
export: z.ZodOptional<z.ZodString>;
|
|
68
|
-
}, z.core.$strict>>;
|
|
69
61
|
}, z.core.$strict>;
|
|
70
62
|
}, z.core.$strict>]>>;
|
|
71
63
|
entry: z.ZodOptional<z.ZodString>;
|
|
72
64
|
styles: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
65
|
+
world: z.ZodOptional<z.ZodObject<{
|
|
66
|
+
entry: z.ZodString;
|
|
67
|
+
export: z.ZodOptional<z.ZodString>;
|
|
68
|
+
}, z.core.$strict>>;
|
|
73
69
|
zOrder: z.ZodDefault<z.ZodNumber>;
|
|
74
70
|
pausable: z.ZodDefault<z.ZodBoolean>;
|
|
75
71
|
loop: z.ZodDefault<z.ZodEnum<{
|
|
@@ -119,7 +115,7 @@ export declare const GameManifestSchema: z.ZodObject<{
|
|
|
119
115
|
version: z.ZodString;
|
|
120
116
|
engine: z.ZodObject<{
|
|
121
117
|
version: z.ZodString;
|
|
122
|
-
}, z.core.$
|
|
118
|
+
}, z.core.$strict>;
|
|
123
119
|
roots: z.ZodArray<z.ZodObject<{
|
|
124
120
|
id: z.ZodString;
|
|
125
121
|
description: z.ZodOptional<z.ZodString>;
|
|
@@ -147,14 +143,14 @@ export declare const GameManifestSchema: z.ZodObject<{
|
|
|
147
143
|
moduleAliases: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
148
144
|
domStubs: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
149
145
|
captureTimeoutMs: z.ZodOptional<z.ZodNumber>;
|
|
150
|
-
world: z.ZodOptional<z.ZodObject<{
|
|
151
|
-
entry: z.ZodString;
|
|
152
|
-
export: z.ZodOptional<z.ZodString>;
|
|
153
|
-
}, z.core.$strict>>;
|
|
154
146
|
}, z.core.$strict>;
|
|
155
147
|
}, z.core.$strict>]>>;
|
|
156
148
|
entry: z.ZodOptional<z.ZodString>;
|
|
157
149
|
styles: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
150
|
+
world: z.ZodOptional<z.ZodObject<{
|
|
151
|
+
entry: z.ZodString;
|
|
152
|
+
export: z.ZodOptional<z.ZodString>;
|
|
153
|
+
}, z.core.$strict>>;
|
|
158
154
|
zOrder: z.ZodDefault<z.ZodNumber>;
|
|
159
155
|
pausable: z.ZodDefault<z.ZodBoolean>;
|
|
160
156
|
loop: z.ZodDefault<z.ZodEnum<{
|
|
@@ -169,9 +165,9 @@ export declare const GameManifestSchema: z.ZodObject<{
|
|
|
169
165
|
id: z.ZodString;
|
|
170
166
|
label: z.ZodString;
|
|
171
167
|
roots: z.ZodArray<z.ZodString>;
|
|
172
|
-
}, z.core.$
|
|
173
|
-
}, z.core.$
|
|
174
|
-
}, z.core.$
|
|
168
|
+
}, z.core.$strict>>>;
|
|
169
|
+
}, z.core.$strict>>;
|
|
170
|
+
}, z.core.$strict>>;
|
|
175
171
|
server: z.ZodOptional<z.ZodObject<{
|
|
176
172
|
room: z.ZodString;
|
|
177
173
|
endpoint: z.ZodOptional<z.ZodString>;
|
|
@@ -181,28 +177,28 @@ export declare const GameManifestSchema: z.ZodObject<{
|
|
|
181
177
|
accessToken: z.ZodString;
|
|
182
178
|
expiresAt: z.ZodNumber;
|
|
183
179
|
}, z.core.$strict>>;
|
|
184
|
-
}, z.core.$
|
|
180
|
+
}, z.core.$strict>>;
|
|
185
181
|
resolution: z.ZodOptional<z.ZodObject<{
|
|
186
182
|
width: z.ZodNumber;
|
|
187
183
|
height: z.ZodNumber;
|
|
188
|
-
}, z.core.$
|
|
184
|
+
}, z.core.$strict>>;
|
|
189
185
|
rendering: z.ZodOptional<z.ZodObject<{
|
|
190
186
|
antialias: z.ZodBoolean;
|
|
191
187
|
}, z.core.$strict>>;
|
|
192
188
|
debug: z.ZodOptional<z.ZodObject<{
|
|
193
189
|
allowInProduction: z.ZodBoolean;
|
|
194
|
-
}, z.core.$
|
|
190
|
+
}, z.core.$strict>>;
|
|
195
191
|
determinism: z.ZodOptional<z.ZodObject<{
|
|
196
192
|
seededRandom: z.ZodBoolean;
|
|
197
193
|
defaultSeed: z.ZodOptional<z.ZodNumber>;
|
|
198
|
-
}, z.core.$
|
|
194
|
+
}, z.core.$strict>>;
|
|
199
195
|
budget: z.ZodOptional<z.ZodObject<{
|
|
200
196
|
frameCpuMsP95: z.ZodOptional<z.ZodNumber>;
|
|
201
197
|
physicsMsP95: z.ZodOptional<z.ZodNumber>;
|
|
202
198
|
maxEntities: z.ZodOptional<z.ZodNumber>;
|
|
203
199
|
maxDrawCalls: z.ZodOptional<z.ZodNumber>;
|
|
204
200
|
maxTriangles: z.ZodOptional<z.ZodNumber>;
|
|
205
|
-
}, z.core.$
|
|
201
|
+
}, z.core.$strict>>;
|
|
206
202
|
learn: z.ZodOptional<z.ZodObject<{
|
|
207
203
|
kind: z.ZodEnum<{
|
|
208
204
|
starter: "starter";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/manifest/schema.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/manifest/schema.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAG,CAAU,CAAC;AAsFhD,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;qBA0H3B,CAAC;AACJ,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAM5D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAqFnB,CAAC;AACZ,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAkB5D,eAAO,MAAM,eAAe;;;;;EAMzB,CAAC;AACJ,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,eAAO,MAAM,qBAAqB;;;;EAEa,CAAC;AAChD,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;kBAqC7B,CAAC;AACJ,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAMhE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA8TyD,CAAC;AAEzF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
|