@vgai/engine 0.3.0 → 0.4.0-canary.20260715.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +8 -2
- package/schemas/engine-api.json +124 -0
- package/schemas/engine-api.md +53 -0
- package/schemas/engine-capabilities.json +124 -0
- package/schemas/inputmap.schema.json +314 -0
- package/schemas/mat.schema.json +286 -0
- package/schemas/prefab.schema.json +10148 -0
- package/schemas/scn2d.schema.json +475 -0
- package/schemas/vgai-game.schema.json +383 -0
- package/schemas/vscn.schema.json +11007 -0
- package/src/adapter/{world-kind.ts → adapter-surface.ts} +6 -6
- package/src/adapter/authoring.ts +67 -0
- package/src/adapter/game-adapter.ts +8 -8
- package/src/adapter/host-context.ts +2 -4
- package/src/adapter/index.ts +3 -1
- package/src/adapter/system-adapter.ts +73 -0
- package/src/adapter/vgai-scene-game-adapter.ts +239 -180
- package/src/animation/xstate-animation-binding.ts +300 -262
- package/src/animation/xstate-animation-meta.ts +50 -13
- package/src/character/cloth-sim.ts +533 -0
- package/src/character/spring-chain.ts +307 -0
- package/src/core/game-loop.ts +41 -3
- package/src/core/seeded-random.ts +161 -0
- package/src/core/system-runner.ts +20 -3
- package/src/core/types.ts +37 -0
- package/src/data/data-asset.ts +1 -1
- package/src/dev/performance-profiler.ts +213 -0
- package/src/dev/webgl-gpu-timer.ts +53 -0
- package/src/ecs/component-manager.ts +45 -12
- package/src/ecs/game-component.ts +95 -11
- package/src/humanoid/bake.operation.ts +326 -0
- package/src/humanoid/body.ts +663 -0
- package/src/humanoid/clips.ts +149 -0
- package/src/humanoid/compose.ts +209 -0
- package/src/humanoid/generate.ts +189 -0
- package/src/humanoid/index.ts +36 -0
- package/src/humanoid/schema.ts +108 -0
- package/src/humanoid/skeleton.ts +345 -0
- package/src/index.ts +5 -5
- package/src/input/input-manager.ts +701 -22
- package/src/input/input-types.ts +5 -2
- package/src/manifest/index.ts +5 -5
- package/src/manifest/load.ts +125 -72
- package/src/manifest/schema.ts +362 -255
- package/src/react/game-state.tsx +135 -32
- package/src/react/root-adapter.tsx +49 -0
- package/src/react/unmanaged-root-detector.ts +66 -0
- package/src/react/use-data.ts +12 -2
- package/src/runtime/create-runtime.ts +100 -282
- package/src/runtime/debug-bridge.ts +483 -0
- package/src/runtime/debug-registry.ts +856 -0
- package/src/runtime/game.ts +342 -93
- package/src/runtime/gameplay-rng-trap.ts +134 -0
- package/src/runtime/input-router.ts +7 -7
- package/src/runtime/mount-game.ts +40 -38
- package/src/runtime/mount-manifest.ts +169 -37
- package/src/runtime/render-control.ts +13 -13
- package/src/runtime/render-seed.ts +1 -1
- package/src/runtime/state-bridge.ts +24 -10
- package/src/runtime/types.ts +110 -28
- package/src/scene/asset-registry.ts +22 -0
- package/src/scene/component-registry.ts +14 -3
- package/src/scene/defaults.ts +1 -0
- package/src/scene/light-camera-factory.ts +11 -3
- package/src/scene/scene-apply.ts +55 -4
- package/src/scene/scene-loader.ts +10 -27
- package/src/scene/scene-types.ts +0 -1
- package/src/scene/schema/index.ts +0 -34
- package/src/scene/schema/light.ts +16 -1
- package/src/scene/schema/material.ts +96 -91
- package/src/scene/schema/scene-file.ts +1 -7
- package/src/scene/user-data.ts +14 -1
- package/src/setup/setup-renderer.ts +1 -1
- package/src/tools/define-tool.ts +50 -11
- package/src/world2d/authoring-2d.ts +17 -1
- package/src/world2d/collision-2d.ts +1 -1
- package/src/world2d/pixi-game-adapter.ts +19 -17
- package/src/world2d/scene2d-loader.ts +1 -0
- package/src/world2d/types.ts +8 -2
- package/dist/adapter/authoring.d.ts +0 -404
- package/dist/adapter/authoring.d.ts.map +0 -1
- package/dist/adapter/authoring.js +0 -22
- package/dist/adapter/colyseus-networking-adapter.d.ts +0 -43
- package/dist/adapter/colyseus-networking-adapter.d.ts.map +0 -1
- package/dist/adapter/colyseus-networking-adapter.js +0 -38
- package/dist/adapter/first-party-systems.d.ts +0 -38
- package/dist/adapter/first-party-systems.d.ts.map +0 -1
- package/dist/adapter/first-party-systems.js +0 -77
- package/dist/adapter/game-adapter.d.ts +0 -133
- package/dist/adapter/game-adapter.d.ts.map +0 -1
- package/dist/adapter/game-adapter.js +0 -10
- package/dist/adapter/host-context.d.ts +0 -73
- package/dist/adapter/host-context.d.ts.map +0 -1
- package/dist/adapter/host-context.js +0 -16
- package/dist/adapter/index.d.ts +0 -22
- package/dist/adapter/index.d.ts.map +0 -1
- package/dist/adapter/index.js +0 -15
- package/dist/adapter/ingest/game-contract.d.ts +0 -53
- package/dist/adapter/ingest/game-contract.d.ts.map +0 -1
- package/dist/adapter/ingest/game-contract.js +0 -30
- package/dist/adapter/ingest/overlay-applier.d.ts +0 -118
- package/dist/adapter/ingest/overlay-applier.d.ts.map +0 -1
- package/dist/adapter/ingest/overlay-applier.js +0 -132
- package/dist/adapter/ingest/overlay-apply.d.ts +0 -60
- package/dist/adapter/ingest/overlay-apply.d.ts.map +0 -1
- package/dist/adapter/ingest/overlay-apply.js +0 -101
- package/dist/adapter/ingest/overlay-file.d.ts +0 -79
- package/dist/adapter/ingest/overlay-file.d.ts.map +0 -1
- package/dist/adapter/ingest/overlay-file.js +0 -66
- package/dist/adapter/ingest/overlay-report.d.ts +0 -113
- package/dist/adapter/ingest/overlay-report.d.ts.map +0 -1
- package/dist/adapter/ingest/overlay-report.js +0 -103
- package/dist/adapter/ingest/scene-capture.d.ts +0 -97
- package/dist/adapter/ingest/scene-capture.d.ts.map +0 -1
- package/dist/adapter/ingest/scene-capture.js +0 -248
- package/dist/adapter/ingest/upstream-pin.d.ts +0 -47
- package/dist/adapter/ingest/upstream-pin.d.ts.map +0 -1
- package/dist/adapter/ingest/upstream-pin.js +0 -50
- package/dist/adapter/loop-gate-report.d.ts +0 -34
- package/dist/adapter/loop-gate-report.d.ts.map +0 -1
- package/dist/adapter/loop-gate-report.js +0 -37
- package/dist/adapter/rapier-physics-adapter.d.ts +0 -12
- package/dist/adapter/rapier-physics-adapter.d.ts.map +0 -1
- package/dist/adapter/rapier-physics-adapter.js +0 -46
- package/dist/adapter/system-adapter.d.ts +0 -133
- package/dist/adapter/system-adapter.d.ts.map +0 -1
- package/dist/adapter/system-adapter.js +0 -13
- package/dist/adapter/transform.d.ts +0 -18
- package/dist/adapter/transform.d.ts.map +0 -1
- package/dist/adapter/transform.js +0 -1
- package/dist/adapter/vgai-scene-game-adapter.d.ts +0 -116
- package/dist/adapter/vgai-scene-game-adapter.d.ts.map +0 -1
- package/dist/adapter/vgai-scene-game-adapter.js +0 -714
- package/dist/adapter/world-kind.d.ts +0 -30
- package/dist/adapter/world-kind.d.ts.map +0 -1
- package/dist/adapter/world-kind.js +0 -18
- package/dist/ai/navigation.d.ts +0 -64
- package/dist/ai/navigation.d.ts.map +0 -1
- package/dist/ai/navigation.js +0 -133
- package/dist/animation/anim-graph-types.d.ts +0 -25
- package/dist/animation/anim-graph-types.d.ts.map +0 -1
- package/dist/animation/anim-graph-types.js +0 -1
- package/dist/animation/animation-clock.d.ts +0 -213
- package/dist/animation/animation-clock.d.ts.map +0 -1
- package/dist/animation/animation-clock.js +0 -301
- package/dist/animation/blend-node.d.ts +0 -22
- package/dist/animation/blend-node.d.ts.map +0 -1
- package/dist/animation/blend-node.js +0 -97
- package/dist/animation/camera-ownership.d.ts +0 -250
- package/dist/animation/camera-ownership.d.ts.map +0 -1
- package/dist/animation/camera-ownership.js +0 -169
- package/dist/animation/cinematic-cues.d.ts +0 -200
- package/dist/animation/cinematic-cues.d.ts.map +0 -1
- package/dist/animation/cinematic-cues.js +0 -213
- 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 -37
- package/dist/animation/gsap-registration.d.ts +0 -119
- package/dist/animation/gsap-registration.d.ts.map +0 -1
- package/dist/animation/gsap-registration.js +0 -92
- package/dist/animation/theatre-clock-binding.d.ts +0 -89
- package/dist/animation/theatre-clock-binding.d.ts.map +0 -1
- package/dist/animation/theatre-clock-binding.js +0 -29
- package/dist/animation/theatre-director.d.ts +0 -242
- package/dist/animation/theatre-director.d.ts.map +0 -1
- package/dist/animation/theatre-director.js +0 -235
- package/dist/animation/theatre-object-binding.d.ts +0 -305
- package/dist/animation/theatre-object-binding.d.ts.map +0 -1
- package/dist/animation/theatre-object-binding.js +0 -351
- package/dist/animation/xstate-animation-binding.d.ts +0 -111
- package/dist/animation/xstate-animation-binding.d.ts.map +0 -1
- package/dist/animation/xstate-animation-binding.js +0 -307
- package/dist/animation/xstate-animation-meta.d.ts +0 -228
- package/dist/animation/xstate-animation-meta.d.ts.map +0 -1
- package/dist/animation/xstate-animation-meta.js +0 -221
- package/dist/assets.d.ts +0 -26
- package/dist/assets.d.ts.map +0 -1
- package/dist/assets.js +0 -55
- package/dist/audio/index.d.ts +0 -4
- package/dist/audio/index.d.ts.map +0 -1
- package/dist/audio/index.js +0 -24
- package/dist/audio/tone-clock-binding.d.ts +0 -75
- package/dist/audio/tone-clock-binding.d.ts.map +0 -1
- package/dist/audio/tone-clock-binding.js +0 -29
- package/dist/audio/tone-context.d.ts +0 -114
- package/dist/audio/tone-context.d.ts.map +0 -1
- package/dist/audio/tone-context.js +0 -39
- package/dist/audio/tone-offline-render.d.ts +0 -90
- package/dist/audio/tone-offline-render.d.ts.map +0 -1
- package/dist/audio/tone-offline-render.js +0 -56
- package/dist/audio/wav-encode.d.ts +0 -38
- package/dist/audio/wav-encode.d.ts.map +0 -1
- package/dist/audio/wav-encode.js +0 -97
- package/dist/core/game-loop.d.ts +0 -21
- package/dist/core/game-loop.d.ts.map +0 -1
- package/dist/core/game-loop.js +0 -130
- package/dist/core/system-runner.d.ts +0 -120
- package/dist/core/system-runner.d.ts.map +0 -1
- package/dist/core/system-runner.js +0 -286
- package/dist/core/types.d.ts +0 -58
- package/dist/core/types.d.ts.map +0 -1
- package/dist/core/types.js +0 -25
- package/dist/data/data-asset.d.ts +0 -101
- package/dist/data/data-asset.d.ts.map +0 -1
- package/dist/data/data-asset.js +0 -122
- package/dist/data/data-check-core.d.ts +0 -110
- package/dist/data/data-check-core.d.ts.map +0 -1
- package/dist/data/data-check-core.js +0 -178
- package/dist/data/data-ref.d.ts +0 -79
- package/dist/data/data-ref.d.ts.map +0 -1
- package/dist/data/data-ref.js +0 -130
- package/dist/data/vite-plugin-data.d.ts +0 -79
- package/dist/data/vite-plugin-data.d.ts.map +0 -1
- package/dist/data/vite-plugin-data.js +0 -217
- package/dist/dev/console-bridge.d.ts +0 -22
- package/dist/dev/console-bridge.d.ts.map +0 -1
- package/dist/dev/console-bridge.js +0 -71
- 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/dev/logger.d.ts +0 -30
- package/dist/dev/logger.d.ts.map +0 -1
- package/dist/dev/logger.js +0 -90
- package/dist/ecs/component-manager.d.ts +0 -189
- package/dist/ecs/component-manager.d.ts.map +0 -1
- package/dist/ecs/component-manager.js +0 -676
- package/dist/ecs/game-component.d.ts +0 -97
- package/dist/ecs/game-component.d.ts.map +0 -1
- package/dist/ecs/game-component.js +0 -80
- package/dist/ecs/hmr-swap-report.d.ts +0 -53
- package/dist/ecs/hmr-swap-report.d.ts.map +0 -1
- package/dist/ecs/hmr-swap-report.js +0 -55
- package/dist/index.d.ts +0 -37
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -30
- package/dist/input/input-manager.d.ts +0 -596
- package/dist/input/input-manager.d.ts.map +0 -1
- package/dist/input/input-manager.js +0 -1564
- package/dist/input/input-types.d.ts +0 -171
- package/dist/input/input-types.d.ts.map +0 -1
- package/dist/input/input-types.js +0 -1
- package/dist/input/prompt-labels.d.ts +0 -21
- package/dist/input/prompt-labels.d.ts.map +0 -1
- package/dist/input/prompt-labels.js +0 -121
- package/dist/input/rebind-controller.d.ts +0 -59
- package/dist/input/rebind-controller.d.ts.map +0 -1
- package/dist/input/rebind-controller.js +0 -85
- package/dist/input/schema.d.ts +0 -16
- package/dist/input/schema.d.ts.map +0 -1
- package/dist/input/schema.js +0 -228
- package/dist/loader.d.ts +0 -43
- package/dist/loader.d.ts.map +0 -1
- package/dist/loader.js +0 -59
- package/dist/manifest/index.d.ts +0 -5
- package/dist/manifest/index.d.ts.map +0 -1
- package/dist/manifest/index.js +0 -8
- package/dist/manifest/load-file.d.ts +0 -4
- package/dist/manifest/load-file.d.ts.map +0 -1
- package/dist/manifest/load-file.js +0 -14
- package/dist/manifest/load.d.ts +0 -117
- package/dist/manifest/load.d.ts.map +0 -1
- package/dist/manifest/load.js +0 -255
- package/dist/manifest/schema.d.ts +0 -173
- package/dist/manifest/schema.d.ts.map +0 -1
- package/dist/manifest/schema.js +0 -302
- package/dist/physics/collision-system.d.ts +0 -41
- package/dist/physics/collision-system.d.ts.map +0 -1
- package/dist/physics/collision-system.js +0 -64
- package/dist/physics/physics-registry.d.ts +0 -45
- package/dist/physics/physics-registry.d.ts.map +0 -1
- package/dist/physics/physics-registry.js +0 -65
- package/dist/physics/transform-writer.d.ts +0 -16
- package/dist/physics/transform-writer.d.ts.map +0 -1
- package/dist/physics/transform-writer.js +0 -38
- package/dist/physics/trigger-dispatch.d.ts +0 -24
- package/dist/physics/trigger-dispatch.d.ts.map +0 -1
- package/dist/physics/trigger-dispatch.js +0 -80
- package/dist/react/game-state.d.ts +0 -105
- package/dist/react/game-state.d.ts.map +0 -1
- package/dist/react/game-state.js +0 -144
- package/dist/react/use-data.d.ts +0 -60
- package/dist/react/use-data.d.ts.map +0 -1
- package/dist/react/use-data.js +0 -96
- package/dist/react/use-selection.d.ts +0 -75
- package/dist/react/use-selection.d.ts.map +0 -1
- package/dist/react/use-selection.js +0 -90
- 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/render-batch-system.d.ts +0 -33
- package/dist/render/render-batch-system.d.ts.map +0 -1
- package/dist/render/render-batch-system.js +0 -230
- package/dist/render/render-features.d.ts +0 -47
- package/dist/render/render-features.d.ts.map +0 -1
- package/dist/render/render-features.js +0 -105
- package/dist/render/render-settings.d.ts +0 -36
- package/dist/render/render-settings.d.ts.map +0 -1
- package/dist/render/render-settings.js +0 -51
- package/dist/runtime/create-runtime.d.ts +0 -280
- package/dist/runtime/create-runtime.d.ts.map +0 -1
- package/dist/runtime/create-runtime.js +0 -795
- package/dist/runtime/frame-selector-cache.d.ts +0 -41
- package/dist/runtime/frame-selector-cache.d.ts.map +0 -1
- package/dist/runtime/frame-selector-cache.js +0 -65
- package/dist/runtime/game.d.ts +0 -433
- package/dist/runtime/game.d.ts.map +0 -1
- package/dist/runtime/game.js +0 -569
- package/dist/runtime/input-router.d.ts +0 -78
- package/dist/runtime/input-router.d.ts.map +0 -1
- package/dist/runtime/input-router.js +0 -171
- package/dist/runtime/mount-game.d.ts +0 -129
- package/dist/runtime/mount-game.d.ts.map +0 -1
- package/dist/runtime/mount-game.js +0 -152
- package/dist/runtime/mount-manifest.d.ts +0 -119
- package/dist/runtime/mount-manifest.d.ts.map +0 -1
- package/dist/runtime/mount-manifest.js +0 -204
- package/dist/runtime/render-audio-control.d.ts +0 -110
- package/dist/runtime/render-audio-control.d.ts.map +0 -1
- package/dist/runtime/render-audio-control.js +0 -111
- package/dist/runtime/render-control.d.ts +0 -291
- package/dist/runtime/render-control.d.ts.map +0 -1
- package/dist/runtime/render-control.js +0 -264
- package/dist/runtime/render-seed.d.ts +0 -57
- package/dist/runtime/render-seed.d.ts.map +0 -1
- package/dist/runtime/render-seed.js +0 -74
- package/dist/runtime/scene-ui-bridge.d.ts +0 -69
- package/dist/runtime/scene-ui-bridge.d.ts.map +0 -1
- package/dist/runtime/scene-ui-bridge.js +0 -23
- package/dist/runtime/scene-ui-data.d.ts +0 -13
- package/dist/runtime/scene-ui-data.d.ts.map +0 -1
- package/dist/runtime/scene-ui-data.js +0 -92
- package/dist/runtime/state-bridge.d.ts +0 -47
- package/dist/runtime/state-bridge.d.ts.map +0 -1
- package/dist/runtime/state-bridge.js +0 -53
- package/dist/runtime/types.d.ts +0 -179
- package/dist/runtime/types.d.ts.map +0 -1
- package/dist/runtime/types.js +0 -1
- package/dist/scene/asset-loaders.d.ts +0 -79
- package/dist/scene/asset-loaders.d.ts.map +0 -1
- package/dist/scene/asset-loaders.js +0 -141
- package/dist/scene/asset-paths.d.ts +0 -11
- package/dist/scene/asset-paths.d.ts.map +0 -1
- package/dist/scene/asset-paths.js +0 -108
- package/dist/scene/asset-ref-check.d.ts +0 -88
- package/dist/scene/asset-ref-check.d.ts.map +0 -1
- package/dist/scene/asset-ref-check.js +0 -214
- package/dist/scene/asset-registry.d.ts +0 -30
- package/dist/scene/asset-registry.d.ts.map +0 -1
- package/dist/scene/asset-registry.js +0 -50
- package/dist/scene/collider-dimensions.d.ts +0 -63
- package/dist/scene/collider-dimensions.d.ts.map +0 -1
- package/dist/scene/collider-dimensions.js +0 -98
- package/dist/scene/component-registry.d.ts +0 -17
- package/dist/scene/component-registry.d.ts.map +0 -1
- package/dist/scene/component-registry.js +0 -28
- package/dist/scene/defaults.d.ts +0 -252
- package/dist/scene/defaults.d.ts.map +0 -1
- package/dist/scene/defaults.js +0 -151
- package/dist/scene/geometries/index.d.ts +0 -8
- package/dist/scene/geometries/index.d.ts.map +0 -1
- package/dist/scene/geometries/index.js +0 -7
- package/dist/scene/geometries/terrain.d.ts +0 -2
- package/dist/scene/geometries/terrain.d.ts.map +0 -1
- package/dist/scene/geometries/terrain.js +0 -37
- package/dist/scene/geometry-registry.d.ts +0 -24
- package/dist/scene/geometry-registry.d.ts.map +0 -1
- package/dist/scene/geometry-registry.js +0 -20
- package/dist/scene/instance-registry.d.ts +0 -36
- package/dist/scene/instance-registry.d.ts.map +0 -1
- package/dist/scene/instance-registry.js +0 -55
- package/dist/scene/instancers/grid.d.ts +0 -2
- package/dist/scene/instancers/grid.d.ts.map +0 -1
- package/dist/scene/instancers/grid.js +0 -36
- package/dist/scene/instancers/index.d.ts +0 -8
- package/dist/scene/instancers/index.d.ts.map +0 -1
- package/dist/scene/instancers/index.js +0 -7
- package/dist/scene/light-camera-factory.d.ts +0 -23
- package/dist/scene/light-camera-factory.d.ts.map +0 -1
- package/dist/scene/light-camera-factory.js +0 -68
- package/dist/scene/material-factory.d.ts +0 -17
- package/dist/scene/material-factory.d.ts.map +0 -1
- package/dist/scene/material-factory.js +0 -197
- package/dist/scene/material-registry.d.ts +0 -40
- package/dist/scene/material-registry.d.ts.map +0 -1
- package/dist/scene/material-registry.js +0 -44
- package/dist/scene/materials/index.d.ts +0 -8
- package/dist/scene/materials/index.d.ts.map +0 -1
- package/dist/scene/materials/index.js +0 -7
- package/dist/scene/materials/water.d.ts +0 -2
- package/dist/scene/materials/water.d.ts.map +0 -1
- package/dist/scene/materials/water.js +0 -54
- package/dist/scene/parse.d.ts +0 -23
- package/dist/scene/parse.d.ts.map +0 -1
- package/dist/scene/parse.js +0 -179
- package/dist/scene/particles-factory.d.ts +0 -33
- package/dist/scene/particles-factory.d.ts.map +0 -1
- package/dist/scene/particles-factory.js +0 -282
- package/dist/scene/scene-apply.d.ts +0 -109
- package/dist/scene/scene-apply.d.ts.map +0 -1
- package/dist/scene/scene-apply.js +0 -326
- package/dist/scene/scene-diff-schema.d.ts +0 -285
- package/dist/scene/scene-diff-schema.d.ts.map +0 -1
- package/dist/scene/scene-diff-schema.js +0 -92
- package/dist/scene/scene-diff-types.d.ts +0 -40
- package/dist/scene/scene-diff-types.d.ts.map +0 -1
- package/dist/scene/scene-diff-types.js +0 -14
- package/dist/scene/scene-loader.d.ts +0 -177
- package/dist/scene/scene-loader.d.ts.map +0 -1
- package/dist/scene/scene-loader.js +0 -1213
- package/dist/scene/scene-query.d.ts +0 -11
- package/dist/scene/scene-query.d.ts.map +0 -1
- package/dist/scene/scene-query.js +0 -63
- package/dist/scene/scene-types.d.ts +0 -10
- package/dist/scene/scene-types.d.ts.map +0 -1
- package/dist/scene/scene-types.js +0 -8
- package/dist/scene/scene-version.d.ts +0 -26
- package/dist/scene/scene-version.d.ts.map +0 -1
- package/dist/scene/scene-version.js +0 -34
- package/dist/scene/schema/animation.d.ts +0 -8
- package/dist/scene/schema/animation.d.ts.map +0 -1
- package/dist/scene/schema/animation.js +0 -42
- package/dist/scene/schema/audio.d.ts +0 -13
- package/dist/scene/schema/audio.d.ts.map +0 -1
- package/dist/scene/schema/audio.js +0 -22
- package/dist/scene/schema/camera.d.ts +0 -28
- package/dist/scene/schema/camera.d.ts.map +0 -1
- package/dist/scene/schema/camera.js +0 -17
- package/dist/scene/schema/collider.d.ts +0 -40
- package/dist/scene/schema/collider.d.ts.map +0 -1
- package/dist/scene/schema/collider.js +0 -55
- package/dist/scene/schema/entity-ref.d.ts +0 -31
- package/dist/scene/schema/entity-ref.d.ts.map +0 -1
- package/dist/scene/schema/entity-ref.js +0 -61
- package/dist/scene/schema/entity.d.ts +0 -1036
- package/dist/scene/schema/entity.d.ts.map +0 -1
- package/dist/scene/schema/entity.js +0 -153
- package/dist/scene/schema/environment.d.ts +0 -425
- package/dist/scene/schema/environment.d.ts.map +0 -1
- package/dist/scene/schema/environment.js +0 -357
- package/dist/scene/schema/index.d.ts +0 -39
- package/dist/scene/schema/index.d.ts.map +0 -1
- package/dist/scene/schema/index.js +0 -20
- package/dist/scene/schema/instances.d.ts +0 -14
- package/dist/scene/schema/instances.d.ts.map +0 -1
- package/dist/scene/schema/instances.js +0 -28
- package/dist/scene/schema/joint.d.ts +0 -23
- package/dist/scene/schema/joint.d.ts.map +0 -1
- package/dist/scene/schema/joint.js +0 -23
- package/dist/scene/schema/light.d.ts +0 -38
- package/dist/scene/schema/light.d.ts.map +0 -1
- package/dist/scene/schema/light.js +0 -26
- package/dist/scene/schema/material.d.ts +0 -199
- package/dist/scene/schema/material.d.ts.map +0 -1
- package/dist/scene/schema/material.js +0 -99
- package/dist/scene/schema/mesh.d.ts +0 -48
- package/dist/scene/schema/mesh.d.ts.map +0 -1
- package/dist/scene/schema/mesh.js +0 -82
- package/dist/scene/schema/particles.d.ts +0 -2178
- package/dist/scene/schema/particles.d.ts.map +0 -1
- package/dist/scene/schema/particles.js +0 -321
- package/dist/scene/schema/physics.d.ts +0 -56
- package/dist/scene/schema/physics.d.ts.map +0 -1
- package/dist/scene/schema/physics.js +0 -37
- package/dist/scene/schema/scene-file.d.ts +0 -304
- package/dist/scene/schema/scene-file.d.ts.map +0 -1
- package/dist/scene/schema/scene-file.js +0 -262
- package/dist/scene/schema/shadow.d.ts +0 -28
- package/dist/scene/schema/shadow.d.ts.map +0 -1
- package/dist/scene/schema/shadow.js +0 -20
- package/dist/scene/schema/spline.d.ts +0 -25
- package/dist/scene/schema/spline.d.ts.map +0 -1
- package/dist/scene/schema/spline.js +0 -15
- package/dist/scene/schema/tuples.d.ts +0 -12
- package/dist/scene/schema/tuples.d.ts.map +0 -1
- package/dist/scene/schema/tuples.js +0 -14
- package/dist/scene/schema/ui.d.ts +0 -880
- package/dist/scene/schema/ui.d.ts.map +0 -1
- package/dist/scene/schema/ui.js +0 -506
- package/dist/scene/user-data.d.ts +0 -171
- package/dist/scene/user-data.d.ts.map +0 -1
- package/dist/scene/user-data.js +0 -137
- package/dist/setup/setup-audio.d.ts +0 -20
- package/dist/setup/setup-audio.d.ts.map +0 -1
- package/dist/setup/setup-audio.js +0 -41
- package/dist/setup/setup-particles.d.ts +0 -17
- package/dist/setup/setup-particles.d.ts.map +0 -1
- package/dist/setup/setup-particles.js +0 -16
- package/dist/setup/setup-physics.d.ts +0 -25
- package/dist/setup/setup-physics.d.ts.map +0 -1
- package/dist/setup/setup-physics.js +0 -51
- package/dist/setup/setup-renderer.d.ts +0 -69
- package/dist/setup/setup-renderer.d.ts.map +0 -1
- package/dist/setup/setup-renderer.js +0 -363
- package/dist/tools/define-tool.d.ts +0 -105
- package/dist/tools/define-tool.d.ts.map +0 -1
- package/dist/tools/define-tool.js +0 -82
- package/dist/world2d/authoring-2d.d.ts +0 -76
- package/dist/world2d/authoring-2d.d.ts.map +0 -1
- package/dist/world2d/authoring-2d.js +0 -176
- package/dist/world2d/capture-to-scene2d.d.ts +0 -5
- package/dist/world2d/capture-to-scene2d.d.ts.map +0 -1
- package/dist/world2d/capture-to-scene2d.js +0 -49
- package/dist/world2d/collision-2d.d.ts +0 -52
- package/dist/world2d/collision-2d.d.ts.map +0 -1
- package/dist/world2d/collision-2d.js +0 -70
- package/dist/world2d/components-2d.d.ts +0 -47
- package/dist/world2d/components-2d.d.ts.map +0 -1
- package/dist/world2d/components-2d.js +0 -77
- package/dist/world2d/index.d.ts +0 -34
- package/dist/world2d/index.d.ts.map +0 -1
- package/dist/world2d/index.js +0 -32
- package/dist/world2d/ingest-iframe-2d.d.ts +0 -82
- package/dist/world2d/ingest-iframe-2d.d.ts.map +0 -1
- package/dist/world2d/ingest-iframe-2d.js +0 -166
- package/dist/world2d/ingest2d.d.ts +0 -97
- package/dist/world2d/ingest2d.d.ts.map +0 -1
- package/dist/world2d/ingest2d.js +0 -40
- package/dist/world2d/physics2d-registry.d.ts +0 -24
- package/dist/world2d/physics2d-registry.d.ts.map +0 -1
- package/dist/world2d/physics2d-registry.js +0 -38
- package/dist/world2d/pixi-game-adapter.d.ts +0 -107
- package/dist/world2d/pixi-game-adapter.d.ts.map +0 -1
- package/dist/world2d/pixi-game-adapter.js +0 -211
- package/dist/world2d/pixi-surface.d.ts +0 -39
- package/dist/world2d/pixi-surface.d.ts.map +0 -1
- package/dist/world2d/pixi-surface.js +0 -47
- package/dist/world2d/scene-capture-2d.d.ts +0 -43
- package/dist/world2d/scene-capture-2d.d.ts.map +0 -1
- package/dist/world2d/scene-capture-2d.js +0 -92
- package/dist/world2d/scene2d-loader.d.ts +0 -27
- package/dist/world2d/scene2d-loader.d.ts.map +0 -1
- package/dist/world2d/scene2d-loader.js +0 -274
- package/dist/world2d/schema/entity2d.d.ts +0 -102
- package/dist/world2d/schema/entity2d.d.ts.map +0 -1
- package/dist/world2d/schema/entity2d.js +0 -119
- package/dist/world2d/schema/physics2d.d.ts +0 -46
- package/dist/world2d/schema/physics2d.d.ts.map +0 -1
- package/dist/world2d/schema/physics2d.js +0 -45
- package/dist/world2d/schema/sprite.d.ts +0 -42
- package/dist/world2d/schema/sprite.d.ts.map +0 -1
- package/dist/world2d/schema/sprite.js +0 -63
- package/dist/world2d/schema/tilemap.d.ts +0 -15
- package/dist/world2d/schema/tilemap.d.ts.map +0 -1
- package/dist/world2d/schema/tilemap.js +0 -19
- package/dist/world2d/schema/tuples2d.d.ts +0 -20
- package/dist/world2d/schema/tuples2d.d.ts.map +0 -1
- package/dist/world2d/schema/tuples2d.js +0 -19
- package/dist/world2d/system-adapters-2d.d.ts +0 -16
- package/dist/world2d/system-adapters-2d.d.ts.map +0 -1
- package/dist/world2d/system-adapters-2d.js +0 -37
- package/dist/world2d/transform-writer-2d.d.ts +0 -16
- package/dist/world2d/transform-writer-2d.d.ts.map +0 -1
- package/dist/world2d/transform-writer-2d.js +0 -22
- package/dist/world2d/types.d.ts +0 -53
- package/dist/world2d/types.d.ts.map +0 -1
- package/dist/world2d/types.js +0 -1
- package/src/runtime/scene-ui-bridge.ts +0 -86
- package/src/runtime/scene-ui-data.ts +0 -119
- package/src/scene/schema/ui.ts +0 -602
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `
|
|
2
|
+
* `AdapterSurface` — the kinds of render surface a world can be (T7.1/T7.3/T6.2).
|
|
3
3
|
*
|
|
4
4
|
* Moved here (T7.5, `docs/BACKBONE-TASKS.md`'s D6 row) from `runtime/game.ts`
|
|
5
5
|
* so `adapter/game-adapter.ts`'s kind-tagged `MountedWorld` types can name it
|
|
6
6
|
* without a value-level import cycle (`runtime/game.ts` type-imports from
|
|
7
7
|
* `adapter/game-adapter.ts` already). This is a leaf module — it imports
|
|
8
8
|
* nothing — so anything may import it with zero risk of a cycle.
|
|
9
|
-
* `runtime/game.ts` re-exports this SAME type (`export type {
|
|
10
|
-
* so no existing `import type {
|
|
9
|
+
* `runtime/game.ts` re-exports this SAME type (`export type { AdapterSurface }`),
|
|
10
|
+
* so no existing `import type { AdapterSurface } from '../runtime/game'` call site
|
|
11
11
|
* needed to change.
|
|
12
12
|
*/
|
|
13
|
-
export type
|
|
13
|
+
export type AdapterSurface = 'threejs' | 'pixijs' | 'react';
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
|
-
* Exhaustiveness guard for `
|
|
16
|
+
* Exhaustiveness guard for `AdapterSurface` dispatch (v4 architecture-review
|
|
17
17
|
* §7.4-2: a hypothetical 4th kind must fail to COMPILE at every kind-dispatch
|
|
18
18
|
* site, not silently contribute nothing or silently default to an existing
|
|
19
19
|
* kind). Lives here — colocated with the kind vocabulary itself, not in a
|
|
20
20
|
* generic util module — so the three call sites that need it
|
|
21
21
|
* (`runtime/create-runtime.ts`'s mount loop, `editor/adapter-resolver.ts`'s
|
|
22
22
|
* `resolveAllWorlds`, `editor/play-mode.ts`'s `installMultiWorldAuthoring`)
|
|
23
|
-
* import it from the same leaf module that defines `
|
|
23
|
+
* import it from the same leaf module that defines `AdapterSurface`, keeping the
|
|
24
24
|
* type and its guard from drifting apart. The `never` parameter is the
|
|
25
25
|
* compile-time half of the guard (TS refuses to call this with anything the
|
|
26
26
|
* compiler hasn't already narrowed to zero remaining variants); the thrown
|
package/src/adapter/authoring.ts
CHANGED
|
@@ -42,11 +42,68 @@ export interface AuthoringCapabilities {
|
|
|
42
42
|
layout?: boolean;
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
+
/**
|
|
46
|
+
* The adapter's own answer to "what is truth behind these rows, and how
|
|
47
|
+
* writable is it" (spec 29 §5, docs/unified-world-editor/
|
|
48
|
+
* 29-hierarchy-philosophy.md). Provenance never varies WITHIN one adapter's
|
|
49
|
+
* rows — it is a property of the world boundary — so it is declared ONCE per
|
|
50
|
+
* adapter and rendered at the SEAM (the composite's `world:<id>` group row,
|
|
51
|
+
* or the panel header for a bare adapter), never per row. Only the adapter
|
|
52
|
+
* knows its truth: the shell must read this field, never guess from adapter
|
|
53
|
+
* identity (rule zero). Machine-readable operation gates stay in
|
|
54
|
+
* {@link AuthoringCapabilities}/provider presence — this type carries the
|
|
55
|
+
* HUMAN explanation those gates can point at when an affordance is present
|
|
56
|
+
* but unavailable.
|
|
57
|
+
*/
|
|
58
|
+
export interface AuthoringProvenance {
|
|
59
|
+
/**
|
|
60
|
+
* What the rows project:
|
|
61
|
+
* - `document` — an authored data file the editor owns (e.g. a scene file);
|
|
62
|
+
* - `source-code` — the game's own source is the document (e.g. JSX);
|
|
63
|
+
* - `foreign` — a live tree the editor does not own (an unmodified external
|
|
64
|
+
* game, or any world edited only through an overlay); edits go to the
|
|
65
|
+
* overlay, never the source;
|
|
66
|
+
* - `live` — a running game adopted at play time; edits are not persisted;
|
|
67
|
+
* - `boundary` — a declared world with no live editing surface here.
|
|
68
|
+
*/
|
|
69
|
+
source: 'document' | 'source-code' | 'foreign' | 'live' | 'boundary';
|
|
70
|
+
/** Short badge text the shell shows verbatim at the seam (e.g. "scene",
|
|
71
|
+
* "jsx", "overlay", "read-only", "live"). */
|
|
72
|
+
label: string;
|
|
73
|
+
/** One sentence explaining the truth/writability — shown as the seam
|
|
74
|
+
* badge's tooltip and as the reason on disabled affordances. */
|
|
75
|
+
detail: string;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Semantic place a node occupies in the universal authoring hierarchy.
|
|
80
|
+
*
|
|
81
|
+
* `kind` below remains the adapter's native kind (`mesh`, `button`,
|
|
82
|
+
* `pixi-container`, ...). `role` says what the row MEANS to the editor shell,
|
|
83
|
+
* so presentation and interaction never have to infer semantics from an id,
|
|
84
|
+
* label, or substrate-specific kind string.
|
|
85
|
+
*/
|
|
86
|
+
export type EditorNodeRole =
|
|
87
|
+
| 'folder'
|
|
88
|
+
| 'root'
|
|
89
|
+
| 'document'
|
|
90
|
+
| 'story'
|
|
91
|
+
| 'component'
|
|
92
|
+
| 'element'
|
|
93
|
+
| 'entity'
|
|
94
|
+
| 'boundary';
|
|
95
|
+
|
|
45
96
|
/** A node in the authoring hierarchy — format-neutral (not a `SceneEntity`). */
|
|
46
97
|
export interface EditorNode {
|
|
47
98
|
/** STABLE id — survives reload (see ingest structural-path ids). */
|
|
48
99
|
id: string;
|
|
49
100
|
label: string;
|
|
101
|
+
/** Adapter-declared semantic role. Optional for third-party/older adapters;
|
|
102
|
+
* the shell falls back to the native `kind` only for icon selection. */
|
|
103
|
+
role?: EditorNodeRole;
|
|
104
|
+
/** Optional source-owned context kept visually subordinate to `label`, such
|
|
105
|
+
* as `<header>` beneath a React component name or a document's file path. */
|
|
106
|
+
secondaryLabel?: string;
|
|
50
107
|
kind: 'mesh' | 'light' | 'camera' | 'group' | 'object' | (string & {});
|
|
51
108
|
parentId: string | null;
|
|
52
109
|
childIds: string[];
|
|
@@ -56,6 +113,12 @@ export interface EditorNode {
|
|
|
56
113
|
transformOwner?: TransformOwner;
|
|
57
114
|
/** D8 — member of a RootGroup, not the active one; children may be unloaded. */
|
|
58
115
|
inactiveRoot?: boolean;
|
|
116
|
+
/** Design state currently projected into the live authoring surface. */
|
|
117
|
+
active?: boolean;
|
|
118
|
+
/** The adapter resolved this boundary, but it is not editable here. */
|
|
119
|
+
readOnly?: boolean;
|
|
120
|
+
/** The adapter could not resolve the declared authoring boundary. */
|
|
121
|
+
error?: boolean;
|
|
59
122
|
};
|
|
60
123
|
}
|
|
61
124
|
|
|
@@ -371,6 +434,10 @@ export interface ColorSampleProvider {
|
|
|
371
434
|
|
|
372
435
|
export interface AuthoringAdapter {
|
|
373
436
|
readonly capabilities: AuthoringCapabilities;
|
|
437
|
+
/** Spec 29 §5 — seam-level provenance ("what is truth behind these rows").
|
|
438
|
+
* Absent ⇒ the shell shows no provenance badge (degrade silently — never
|
|
439
|
+
* fabricate a claim the adapter didn't make). */
|
|
440
|
+
readonly provenance?: AuthoringProvenance;
|
|
374
441
|
readonly hierarchy: HierarchyProvider; // required — minimum is "read the tree"
|
|
375
442
|
readonly selection?: SelectionProvider;
|
|
376
443
|
readonly transforms?: TransformProvider;
|
|
@@ -10,10 +10,10 @@
|
|
|
10
10
|
|
|
11
11
|
import type { Container } from 'pixi.js';
|
|
12
12
|
import type * as THREE from 'three';
|
|
13
|
+
import type { AdapterSurface } from './adapter-surface';
|
|
13
14
|
import type { AuthoringAdapter } from './authoring';
|
|
14
15
|
import type { HostContext } from './host-context';
|
|
15
16
|
import type { SystemAdapters } from './system-adapter';
|
|
16
|
-
import type { WorldKind } from './world-kind';
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
19
|
* The ingested-world observation contract (T7.4 slice 2 — `docs/
|
|
@@ -29,8 +29,8 @@ import type { WorldKind } from './world-kind';
|
|
|
29
29
|
export interface WorldStateObserver {
|
|
30
30
|
/**
|
|
31
31
|
* Notified at most once per frame IF the adapter can hook the game's own
|
|
32
|
-
* update (`loop: 'gated'`
|
|
33
|
-
* self-driven
|
|
32
|
+
* update (`loop: 'gated'` roots, `docs/CAPABILITY-TIERS.md` §(d));
|
|
33
|
+
* self-driven roots (`loop: 'self-driven'`, raw-rAF) may notify on their
|
|
34
34
|
* OWN rAF cadence instead — consumers must not assume our frame timing.
|
|
35
35
|
* Returns an unsubscribe function.
|
|
36
36
|
*/
|
|
@@ -119,10 +119,10 @@ export interface MountedReactWorld extends MountedWorldBase {
|
|
|
119
119
|
* is typed against now, replacing the THREE-only `MountedGame`. */
|
|
120
120
|
export type MountedWorld = MountedThreeWorld | MountedPixiWorld | MountedReactWorld;
|
|
121
121
|
|
|
122
|
-
/** Map a {@link
|
|
122
|
+
/** Map a {@link AdapterSurface} to its mounted-world shape (mirrors `NodeOf`/
|
|
123
123
|
* `BodyOf`/`ColliderOf` in `ecs/game-component.ts`) — lets generic code over
|
|
124
|
-
* `K extends
|
|
125
|
-
export type MountedWorldFor<K extends
|
|
124
|
+
* `K extends AdapterSurface` name the right surface without a manual union. */
|
|
125
|
+
export type MountedWorldFor<K extends AdapterSurface> = K extends 'threejs'
|
|
126
126
|
? MountedThreeWorld
|
|
127
127
|
: K extends 'pixijs'
|
|
128
128
|
? MountedPixiWorld
|
|
@@ -139,11 +139,11 @@ export type MountedWorldFor<K extends WorldKind> = K extends 'threejs'
|
|
|
139
139
|
export type MountedGame = MountedThreeWorld;
|
|
140
140
|
|
|
141
141
|
/** The interface every game implements to run on the host. Generic over
|
|
142
|
-
* {@link
|
|
142
|
+
* {@link AdapterSurface} (T7.5) so a non-threejs implementer's `mount` returns its
|
|
143
143
|
* OWN kind-tagged surface instead of being cast through the threejs shape —
|
|
144
144
|
* defaults to `'threejs'` so every pre-T7.5 implementer/call site
|
|
145
145
|
* (`GameAdapter`, unparameterized) keeps compiling unchanged. */
|
|
146
|
-
export interface GameAdapter<K extends
|
|
146
|
+
export interface GameAdapter<K extends AdapterSurface = 'threejs'> {
|
|
147
147
|
/** Stable id (telemetry/registry/conformance). */
|
|
148
148
|
readonly id: string;
|
|
149
149
|
/** Build/start the game against a host-provided context; return the handle. */
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* This generalizes the old `GameContext`, which baked in first-party system
|
|
5
5
|
* choices (a Rapier world, the postprocessing composer, the InputManager, …).
|
|
6
6
|
* `HostContext` provides only what ANY game needs — the shared three instance, a
|
|
7
|
-
* surface, a renderer, a loop, assets
|
|
7
|
+
* surface, a renderer, a loop, and assets — and lets a game *ask* for
|
|
8
8
|
* a first-party subsystem via `requestSystem`, which the host may or may not
|
|
9
9
|
* supply. The host never assumes Rapier/Colyseus; those live behind
|
|
10
10
|
* `SystemAdapters` owned by the first-party implementer.
|
|
@@ -54,8 +54,6 @@ export interface HostContext {
|
|
|
54
54
|
readonly loop: LoopHandle;
|
|
55
55
|
/** Shared GLTF/texture cache. */
|
|
56
56
|
readonly assets: AssetCache;
|
|
57
|
-
/** HUD overlay container (pointer-events:none by default). */
|
|
58
|
-
readonly ui: HTMLElement;
|
|
59
57
|
/**
|
|
60
58
|
* No GPU/DOM/audio available (Node conformance tests). A first-party adapter
|
|
61
59
|
* skips postprocessing/render/audio/input-map loading but still builds the
|
|
@@ -68,7 +66,7 @@ export interface HostContext {
|
|
|
68
66
|
/**
|
|
69
67
|
* The Game root (T7.1 slice 1 — GAME-ROOT-DESIGN.md D6). The host
|
|
70
68
|
* constructs the Game shell BEFORE mounting a `GameAdapter` and hands it
|
|
71
|
-
* down here so an adapter can expose `ctx.game`/`ctx.
|
|
69
|
+
* down here so an adapter can expose `ctx.game`/`ctx.roots` to the game it
|
|
72
70
|
* mounts. Absent in headless harnesses and foreign hosts that predate the
|
|
73
71
|
* Game root — everything must keep working when this is undefined (the
|
|
74
72
|
* zero-break guarantee for this slice).
|
package/src/adapter/index.ts
CHANGED
|
@@ -10,15 +10,18 @@
|
|
|
10
10
|
* docs/ADAPTER-ARCHITECTURE.md.
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
+
export type { AdapterSurface } from './adapter-surface';
|
|
13
14
|
export type {
|
|
14
15
|
AssetDropProvider,
|
|
15
16
|
AuthoringAdapter,
|
|
16
17
|
AuthoringCapabilities,
|
|
18
|
+
AuthoringProvenance,
|
|
17
19
|
BoxEditProvider,
|
|
18
20
|
ColorSampleProvider,
|
|
19
21
|
ComponentsProvider,
|
|
20
22
|
DOMRectLike,
|
|
21
23
|
EditorNode,
|
|
24
|
+
EditorNodeRole,
|
|
22
25
|
FileMapProvider,
|
|
23
26
|
HierarchyProvider,
|
|
24
27
|
InspectorProvider,
|
|
@@ -80,4 +83,3 @@ export {
|
|
|
80
83
|
type VgaiSceneConfig,
|
|
81
84
|
VgaiSceneGameAdapter,
|
|
82
85
|
} from './vgai-scene-game-adapter';
|
|
83
|
-
export type { WorldKind } from './world-kind';
|
|
@@ -133,6 +133,78 @@ export interface AudioAdapter {
|
|
|
133
133
|
isMuted(): boolean;
|
|
134
134
|
}
|
|
135
135
|
|
|
136
|
+
/** One tick-stamped debug event (`ctx.debug.emit`, spec §3.3): `tick`/`simT`
|
|
137
|
+
* are the engine's own counters AT EMISSION, so events and state reads
|
|
138
|
+
* correlate frame-exactly across every door (in-page bridge, relay, panels).
|
|
139
|
+
*
|
|
140
|
+
* `seq` (run-4 friction #5 fix) is a registry-lifetime MONOTONIC counter,
|
|
141
|
+
* strictly increasing by one per `emit()` call regardless of `tick` —
|
|
142
|
+
* unlike `tick`, it is never shared by two events, which is what makes it
|
|
143
|
+
* safe to fence on. A debug command handler runs BETWEEN ticks (its
|
|
144
|
+
* emissions carry whatever `tick` is current at that instant, same as every
|
|
145
|
+
* other emission at that instant would), so two DIFFERENT events — or an
|
|
146
|
+
* event and a consumer's fence point — can legitimately share one `tick`;
|
|
147
|
+
* `seq` never collides the same way, so "everything after what I've already
|
|
148
|
+
* observed" is unambiguous. See `events(sinceTick, sinceSeq)` below. */
|
|
149
|
+
export interface TickStampedEvent {
|
|
150
|
+
tick: number;
|
|
151
|
+
simT: number;
|
|
152
|
+
event: string;
|
|
153
|
+
detail?: unknown;
|
|
154
|
+
seq: number;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/** One registered debug command's listing shape — `locus` is always present
|
|
158
|
+
* (defaults to `'client'` when a command didn't declare one) so every
|
|
159
|
+
* listing surface can print it without a fallback of its own. */
|
|
160
|
+
export interface DebugCommandInfo {
|
|
161
|
+
name: string;
|
|
162
|
+
description?: string | undefined;
|
|
163
|
+
/** JSON-Schema projection of the command's Zod args tuple, when declared. */
|
|
164
|
+
argsJsonSchema?: unknown;
|
|
165
|
+
locus: 'client' | 'server';
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* The debug/synthetic-player seam (`docs/SYNTHETIC-PLAYER-SPEC.md` §3.1):
|
|
170
|
+
* game-scoped introspection + actuation over whatever a game registers via
|
|
171
|
+
* `ctx.debug` (`registerStateProvider`/`registerCommand`/`emit`). NOT a
|
|
172
|
+
* gameplay API — this is the one seam the debug bridge, the editor's Debug
|
|
173
|
+
* Console/State Watch panels, and `@vgai/probe` all read/drive through.
|
|
174
|
+
*/
|
|
175
|
+
export interface DebugAdapter {
|
|
176
|
+
providers(): { name: string; tier: 'observable' | 'assisted' }[];
|
|
177
|
+
/** One provider's current value. Throws `DebugError` code
|
|
178
|
+
* `STATE_PROVIDER_NOT_FOUND` (`data.registered`) for an unknown name. */
|
|
179
|
+
state(name: string): unknown;
|
|
180
|
+
/** One coherent snapshot of every registered provider — a throwing
|
|
181
|
+
* provider contributes `{ __error: String(err) }` for its own key rather
|
|
182
|
+
* than failing the whole snapshot. */
|
|
183
|
+
stateAll(): Record<string, unknown>;
|
|
184
|
+
commands(): DebugCommandInfo[];
|
|
185
|
+
/** Validates `args` against the command's declared Zod tuple (when
|
|
186
|
+
* present), then awaits the registered fn. Throws `DebugError` code
|
|
187
|
+
* `DEBUG_COMMAND_NOT_REGISTERED` for an unknown name,
|
|
188
|
+
* `DEBUG_COMMAND_ARGS_INVALID` for a validation failure, or
|
|
189
|
+
* `DEBUG_COMMAND_FAILED` wrapping anything the command itself threw. */
|
|
190
|
+
invoke(name: string, args: unknown[]): Promise<unknown>;
|
|
191
|
+
/** The tick-stamped event ring (cap 500, drops oldest).
|
|
192
|
+
*
|
|
193
|
+
* - `sinceSeq` given (run-4 friction #5 fix): filters to `seq > sinceSeq`
|
|
194
|
+
* — the unambiguous fence a consumer should use to mean "everything
|
|
195
|
+
* emitted after what I've already observed" (see `TickStampedEvent.seq`'s
|
|
196
|
+
* doc comment for why `tick` alone can't do this: a debug-command
|
|
197
|
+
* emission and a consumer's fence point can share one tick, and the
|
|
198
|
+
* old `tick > sinceTick` filter silently dropped same-tick events).
|
|
199
|
+
* Takes precedence over `sinceTick` when both are given.
|
|
200
|
+
* - `sinceTick` only: the ORIGINAL (pre-fix) filter, `tick > sinceTick` —
|
|
201
|
+
* kept for back-compat callers that only ever had a tick to fence on;
|
|
202
|
+
* still has the same-tick blind spot by construction, so a new caller
|
|
203
|
+
* should prefer `sinceSeq`.
|
|
204
|
+
* - Neither given: the whole ring. */
|
|
205
|
+
events(sinceTick?: number, sinceSeq?: number): TickStampedEvent[];
|
|
206
|
+
}
|
|
207
|
+
|
|
136
208
|
/**
|
|
137
209
|
* The set of optional subsystem providers a mounted game may expose. Absence of
|
|
138
210
|
* a provider means "capability not supported" — the editor degrades gracefully.
|
|
@@ -144,4 +216,5 @@ export interface SystemAdapters {
|
|
|
144
216
|
assets?: AssetAdapter;
|
|
145
217
|
navigation?: NavigationAdapter;
|
|
146
218
|
audio?: AudioAdapter;
|
|
219
|
+
debug?: DebugAdapter;
|
|
147
220
|
}
|