@vgai/engine 0.2.0 → 0.3.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/README.md +3 -1
- package/dist/adapter/authoring.d.ts +404 -0
- package/dist/adapter/authoring.d.ts.map +1 -0
- package/dist/adapter/authoring.js +22 -0
- package/dist/adapter/colyseus-networking-adapter.d.ts +43 -0
- package/dist/adapter/colyseus-networking-adapter.d.ts.map +1 -0
- package/dist/adapter/colyseus-networking-adapter.js +38 -0
- package/dist/adapter/first-party-systems.d.ts +38 -0
- package/dist/adapter/first-party-systems.d.ts.map +1 -0
- package/dist/adapter/first-party-systems.js +77 -0
- package/dist/adapter/game-adapter.d.ts +133 -0
- package/dist/adapter/game-adapter.d.ts.map +1 -0
- package/dist/adapter/game-adapter.js +10 -0
- package/dist/adapter/host-context.d.ts +73 -0
- package/dist/adapter/host-context.d.ts.map +1 -0
- package/dist/adapter/host-context.js +16 -0
- package/dist/adapter/index.d.ts +22 -0
- package/dist/adapter/index.d.ts.map +1 -0
- package/dist/adapter/index.js +15 -0
- package/dist/adapter/ingest/game-contract.d.ts +53 -0
- package/dist/adapter/ingest/game-contract.d.ts.map +1 -0
- package/dist/adapter/ingest/game-contract.js +30 -0
- package/dist/adapter/ingest/overlay-applier.d.ts +118 -0
- package/dist/adapter/ingest/overlay-applier.d.ts.map +1 -0
- package/dist/adapter/ingest/overlay-applier.js +132 -0
- package/dist/adapter/ingest/overlay-apply.d.ts +60 -0
- package/dist/adapter/ingest/overlay-apply.d.ts.map +1 -0
- package/dist/adapter/ingest/overlay-apply.js +101 -0
- package/dist/adapter/ingest/overlay-file.d.ts +79 -0
- package/dist/adapter/ingest/overlay-file.d.ts.map +1 -0
- package/dist/adapter/ingest/overlay-file.js +66 -0
- package/dist/adapter/ingest/overlay-report.d.ts +113 -0
- package/dist/adapter/ingest/overlay-report.d.ts.map +1 -0
- package/dist/adapter/ingest/overlay-report.js +103 -0
- package/dist/adapter/ingest/scene-capture.d.ts +97 -0
- package/dist/adapter/ingest/scene-capture.d.ts.map +1 -0
- package/dist/adapter/ingest/scene-capture.js +248 -0
- package/dist/adapter/ingest/upstream-pin.d.ts +47 -0
- package/dist/adapter/ingest/upstream-pin.d.ts.map +1 -0
- package/dist/adapter/ingest/upstream-pin.js +50 -0
- package/dist/adapter/loop-gate-report.d.ts +34 -0
- package/dist/adapter/loop-gate-report.d.ts.map +1 -0
- package/dist/adapter/loop-gate-report.js +37 -0
- package/dist/adapter/rapier-physics-adapter.d.ts +12 -0
- package/dist/adapter/rapier-physics-adapter.d.ts.map +1 -0
- package/dist/adapter/rapier-physics-adapter.js +46 -0
- package/dist/adapter/system-adapter.d.ts +133 -0
- package/dist/adapter/system-adapter.d.ts.map +1 -0
- package/dist/adapter/system-adapter.js +13 -0
- package/dist/adapter/transform.d.ts +18 -0
- package/dist/adapter/transform.d.ts.map +1 -0
- package/dist/adapter/transform.js +1 -0
- package/dist/adapter/vgai-scene-game-adapter.d.ts +116 -0
- package/dist/adapter/vgai-scene-game-adapter.d.ts.map +1 -0
- package/dist/adapter/vgai-scene-game-adapter.js +714 -0
- package/dist/adapter/world-kind.d.ts +30 -0
- package/dist/adapter/world-kind.d.ts.map +1 -0
- package/dist/adapter/world-kind.js +18 -0
- package/dist/ai/navigation.d.ts +64 -0
- package/dist/ai/navigation.d.ts.map +1 -0
- package/dist/ai/navigation.js +133 -0
- package/dist/animation/anim-graph-types.d.ts +25 -0
- package/dist/animation/anim-graph-types.d.ts.map +1 -0
- package/dist/animation/anim-graph-types.js +1 -0
- package/dist/animation/animation-clock.d.ts +213 -0
- package/dist/animation/animation-clock.d.ts.map +1 -0
- package/dist/animation/animation-clock.js +301 -0
- package/dist/animation/blend-node.d.ts +22 -0
- package/dist/animation/blend-node.d.ts.map +1 -0
- package/dist/animation/blend-node.js +97 -0
- package/dist/animation/camera-ownership.d.ts +250 -0
- package/dist/animation/camera-ownership.d.ts.map +1 -0
- package/dist/animation/camera-ownership.js +169 -0
- package/dist/animation/cinematic-cues.d.ts +200 -0
- package/dist/animation/cinematic-cues.d.ts.map +1 -0
- package/dist/animation/cinematic-cues.js +213 -0
- package/dist/animation/clip-map.d.ts +12 -0
- package/dist/animation/clip-map.d.ts.map +1 -0
- package/dist/animation/clip-map.js +37 -0
- package/dist/animation/gsap-registration.d.ts +119 -0
- package/dist/animation/gsap-registration.d.ts.map +1 -0
- package/dist/animation/gsap-registration.js +92 -0
- package/dist/animation/theatre-clock-binding.d.ts +89 -0
- package/dist/animation/theatre-clock-binding.d.ts.map +1 -0
- package/dist/animation/theatre-clock-binding.js +29 -0
- package/dist/animation/theatre-director.d.ts +242 -0
- package/dist/animation/theatre-director.d.ts.map +1 -0
- package/dist/animation/theatre-director.js +235 -0
- package/dist/animation/theatre-object-binding.d.ts +305 -0
- package/dist/animation/theatre-object-binding.d.ts.map +1 -0
- package/dist/animation/theatre-object-binding.js +351 -0
- package/dist/animation/xstate-animation-binding.d.ts +111 -0
- package/dist/animation/xstate-animation-binding.d.ts.map +1 -0
- package/dist/animation/xstate-animation-binding.js +307 -0
- package/dist/animation/xstate-animation-meta.d.ts +228 -0
- package/dist/animation/xstate-animation-meta.d.ts.map +1 -0
- package/dist/animation/xstate-animation-meta.js +221 -0
- package/dist/assets.d.ts +26 -0
- package/dist/assets.d.ts.map +1 -0
- package/dist/assets.js +55 -0
- package/dist/audio/index.d.ts +4 -0
- package/dist/audio/index.d.ts.map +1 -0
- package/dist/audio/index.js +24 -0
- package/dist/audio/tone-clock-binding.d.ts +75 -0
- package/dist/audio/tone-clock-binding.d.ts.map +1 -0
- package/dist/audio/tone-clock-binding.js +29 -0
- package/dist/audio/tone-context.d.ts +114 -0
- package/dist/audio/tone-context.d.ts.map +1 -0
- package/dist/audio/tone-context.js +39 -0
- package/dist/audio/tone-offline-render.d.ts +90 -0
- package/dist/audio/tone-offline-render.d.ts.map +1 -0
- package/dist/audio/tone-offline-render.js +56 -0
- package/dist/audio/wav-encode.d.ts +38 -0
- package/dist/audio/wav-encode.d.ts.map +1 -0
- package/dist/audio/wav-encode.js +97 -0
- package/dist/core/game-loop.d.ts +21 -0
- package/dist/core/game-loop.d.ts.map +1 -0
- package/dist/core/game-loop.js +130 -0
- package/dist/core/system-runner.d.ts +120 -0
- package/dist/core/system-runner.d.ts.map +1 -0
- package/dist/core/system-runner.js +286 -0
- package/dist/core/types.d.ts +58 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +25 -0
- package/dist/data/data-asset.d.ts +101 -0
- package/dist/data/data-asset.d.ts.map +1 -0
- package/dist/data/data-asset.js +122 -0
- package/dist/data/data-check-core.d.ts +110 -0
- package/dist/data/data-check-core.d.ts.map +1 -0
- package/dist/data/data-check-core.js +178 -0
- package/dist/data/data-ref.d.ts +79 -0
- package/dist/data/data-ref.d.ts.map +1 -0
- package/dist/data/data-ref.js +130 -0
- package/dist/data/vite-plugin-data.d.ts +79 -0
- package/dist/data/vite-plugin-data.d.ts.map +1 -0
- package/dist/data/vite-plugin-data.js +217 -0
- package/dist/dev/console-bridge.d.ts +22 -0
- package/dist/dev/console-bridge.d.ts.map +1 -0
- package/dist/dev/console-bridge.js +71 -0
- package/dist/dev/debug-draw.d.ts +24 -0
- package/dist/dev/debug-draw.d.ts.map +1 -0
- package/dist/dev/debug-draw.js +73 -0
- package/dist/dev/logger.d.ts +30 -0
- package/dist/dev/logger.d.ts.map +1 -0
- package/dist/dev/logger.js +90 -0
- package/dist/ecs/component-manager.d.ts +189 -0
- package/dist/ecs/component-manager.d.ts.map +1 -0
- package/dist/ecs/component-manager.js +676 -0
- package/dist/ecs/game-component.d.ts +97 -0
- package/dist/ecs/game-component.d.ts.map +1 -0
- package/dist/ecs/game-component.js +80 -0
- package/dist/ecs/hmr-swap-report.d.ts +53 -0
- package/dist/ecs/hmr-swap-report.d.ts.map +1 -0
- package/dist/ecs/hmr-swap-report.js +55 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/input/input-manager.d.ts +596 -0
- package/dist/input/input-manager.d.ts.map +1 -0
- package/dist/input/input-manager.js +1564 -0
- package/dist/input/input-types.d.ts +171 -0
- package/dist/input/input-types.d.ts.map +1 -0
- package/dist/input/input-types.js +1 -0
- package/dist/input/prompt-labels.d.ts +21 -0
- package/dist/input/prompt-labels.d.ts.map +1 -0
- package/dist/input/prompt-labels.js +121 -0
- package/dist/input/rebind-controller.d.ts +59 -0
- package/dist/input/rebind-controller.d.ts.map +1 -0
- package/dist/input/rebind-controller.js +85 -0
- package/dist/input/schema.d.ts +16 -0
- package/dist/input/schema.d.ts.map +1 -0
- package/dist/input/schema.js +228 -0
- package/dist/loader.d.ts +43 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +59 -0
- package/dist/manifest/index.d.ts +5 -0
- package/dist/manifest/index.d.ts.map +1 -0
- package/dist/manifest/index.js +8 -0
- package/dist/manifest/load-file.d.ts +4 -0
- package/dist/manifest/load-file.d.ts.map +1 -0
- package/dist/manifest/load-file.js +14 -0
- package/dist/manifest/load.d.ts +117 -0
- package/dist/manifest/load.d.ts.map +1 -0
- package/dist/manifest/load.js +255 -0
- package/dist/manifest/schema.d.ts +173 -0
- package/dist/manifest/schema.d.ts.map +1 -0
- package/dist/manifest/schema.js +302 -0
- package/dist/physics/collision-system.d.ts +41 -0
- package/dist/physics/collision-system.d.ts.map +1 -0
- package/dist/physics/collision-system.js +64 -0
- package/dist/physics/physics-registry.d.ts +45 -0
- package/dist/physics/physics-registry.d.ts.map +1 -0
- package/dist/physics/physics-registry.js +65 -0
- package/dist/physics/transform-writer.d.ts +16 -0
- package/dist/physics/transform-writer.d.ts.map +1 -0
- package/dist/physics/transform-writer.js +38 -0
- package/dist/physics/trigger-dispatch.d.ts +24 -0
- package/dist/physics/trigger-dispatch.d.ts.map +1 -0
- package/dist/physics/trigger-dispatch.js +80 -0
- package/dist/react/game-state.d.ts +105 -0
- package/dist/react/game-state.d.ts.map +1 -0
- package/dist/react/game-state.js +144 -0
- package/dist/react/use-data.d.ts +60 -0
- package/dist/react/use-data.d.ts.map +1 -0
- package/dist/react/use-data.js +96 -0
- package/dist/react/use-selection.d.ts +75 -0
- package/dist/react/use-selection.d.ts.map +1 -0
- package/dist/react/use-selection.js +90 -0
- package/dist/render/auto-batcher.d.ts +34 -0
- package/dist/render/auto-batcher.d.ts.map +1 -0
- package/dist/render/auto-batcher.js +140 -0
- package/dist/render/render-batch-system.d.ts +33 -0
- package/dist/render/render-batch-system.d.ts.map +1 -0
- package/dist/render/render-batch-system.js +230 -0
- package/dist/render/render-features.d.ts +47 -0
- package/dist/render/render-features.d.ts.map +1 -0
- package/dist/render/render-features.js +105 -0
- package/dist/render/render-settings.d.ts +36 -0
- package/dist/render/render-settings.d.ts.map +1 -0
- package/dist/render/render-settings.js +51 -0
- package/dist/runtime/create-runtime.d.ts +280 -0
- package/dist/runtime/create-runtime.d.ts.map +1 -0
- package/dist/runtime/create-runtime.js +795 -0
- package/dist/runtime/frame-selector-cache.d.ts +41 -0
- package/dist/runtime/frame-selector-cache.d.ts.map +1 -0
- package/dist/runtime/frame-selector-cache.js +65 -0
- package/dist/runtime/game.d.ts +433 -0
- package/dist/runtime/game.d.ts.map +1 -0
- package/dist/runtime/game.js +569 -0
- package/dist/runtime/input-router.d.ts +78 -0
- package/dist/runtime/input-router.d.ts.map +1 -0
- package/dist/runtime/input-router.js +171 -0
- package/dist/runtime/mount-game.d.ts +129 -0
- package/dist/runtime/mount-game.d.ts.map +1 -0
- package/dist/runtime/mount-game.js +152 -0
- package/dist/runtime/mount-manifest.d.ts +119 -0
- package/dist/runtime/mount-manifest.d.ts.map +1 -0
- package/dist/runtime/mount-manifest.js +204 -0
- package/dist/runtime/render-audio-control.d.ts +110 -0
- package/dist/runtime/render-audio-control.d.ts.map +1 -0
- package/dist/runtime/render-audio-control.js +111 -0
- package/dist/runtime/render-control.d.ts +291 -0
- package/dist/runtime/render-control.d.ts.map +1 -0
- package/dist/runtime/render-control.js +264 -0
- package/dist/runtime/render-seed.d.ts +57 -0
- package/dist/runtime/render-seed.d.ts.map +1 -0
- package/dist/runtime/render-seed.js +74 -0
- package/dist/runtime/scene-ui-bridge.d.ts +69 -0
- package/dist/runtime/scene-ui-bridge.d.ts.map +1 -0
- package/dist/runtime/scene-ui-bridge.js +23 -0
- package/dist/runtime/scene-ui-data.d.ts +13 -0
- package/dist/runtime/scene-ui-data.d.ts.map +1 -0
- package/dist/runtime/scene-ui-data.js +92 -0
- package/dist/runtime/state-bridge.d.ts +47 -0
- package/dist/runtime/state-bridge.d.ts.map +1 -0
- package/dist/runtime/state-bridge.js +53 -0
- package/dist/runtime/types.d.ts +179 -0
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/runtime/types.js +1 -0
- package/dist/scene/asset-loaders.d.ts +79 -0
- package/dist/scene/asset-loaders.d.ts.map +1 -0
- package/dist/scene/asset-loaders.js +141 -0
- package/dist/scene/asset-paths.d.ts +11 -0
- package/dist/scene/asset-paths.d.ts.map +1 -0
- package/dist/scene/asset-paths.js +108 -0
- package/dist/scene/asset-ref-check.d.ts +88 -0
- package/dist/scene/asset-ref-check.d.ts.map +1 -0
- package/dist/scene/asset-ref-check.js +214 -0
- package/dist/scene/asset-registry.d.ts +30 -0
- package/dist/scene/asset-registry.d.ts.map +1 -0
- package/dist/scene/asset-registry.js +50 -0
- package/dist/scene/collider-dimensions.d.ts +63 -0
- package/dist/scene/collider-dimensions.d.ts.map +1 -0
- package/dist/scene/collider-dimensions.js +98 -0
- package/dist/scene/component-registry.d.ts +17 -0
- package/dist/scene/component-registry.d.ts.map +1 -0
- package/dist/scene/component-registry.js +28 -0
- package/dist/scene/defaults.d.ts +252 -0
- package/dist/scene/defaults.d.ts.map +1 -0
- package/dist/scene/defaults.js +151 -0
- package/dist/scene/geometries/index.d.ts +8 -0
- package/dist/scene/geometries/index.d.ts.map +1 -0
- package/dist/scene/geometries/index.js +7 -0
- package/dist/scene/geometries/terrain.d.ts +2 -0
- package/dist/scene/geometries/terrain.d.ts.map +1 -0
- package/dist/scene/geometries/terrain.js +37 -0
- package/dist/scene/geometry-registry.d.ts +24 -0
- package/dist/scene/geometry-registry.d.ts.map +1 -0
- package/dist/scene/geometry-registry.js +20 -0
- package/dist/scene/instance-registry.d.ts +36 -0
- package/dist/scene/instance-registry.d.ts.map +1 -0
- package/dist/scene/instance-registry.js +55 -0
- package/dist/scene/instancers/grid.d.ts +2 -0
- package/dist/scene/instancers/grid.d.ts.map +1 -0
- package/dist/scene/instancers/grid.js +36 -0
- package/dist/scene/instancers/index.d.ts +8 -0
- package/dist/scene/instancers/index.d.ts.map +1 -0
- package/dist/scene/instancers/index.js +7 -0
- package/dist/scene/light-camera-factory.d.ts +23 -0
- package/dist/scene/light-camera-factory.d.ts.map +1 -0
- package/dist/scene/light-camera-factory.js +68 -0
- package/dist/scene/material-factory.d.ts +17 -0
- package/dist/scene/material-factory.d.ts.map +1 -0
- package/dist/scene/material-factory.js +197 -0
- package/dist/scene/material-registry.d.ts +40 -0
- package/dist/scene/material-registry.d.ts.map +1 -0
- package/dist/scene/material-registry.js +44 -0
- package/dist/scene/materials/index.d.ts +8 -0
- package/dist/scene/materials/index.d.ts.map +1 -0
- package/dist/scene/materials/index.js +7 -0
- package/dist/scene/materials/water.d.ts +2 -0
- package/dist/scene/materials/water.d.ts.map +1 -0
- package/dist/scene/materials/water.js +54 -0
- package/dist/scene/parse.d.ts +23 -0
- package/dist/scene/parse.d.ts.map +1 -0
- package/dist/scene/parse.js +179 -0
- package/dist/scene/particles-factory.d.ts +33 -0
- package/dist/scene/particles-factory.d.ts.map +1 -0
- package/dist/scene/particles-factory.js +282 -0
- package/dist/scene/scene-apply.d.ts +109 -0
- package/dist/scene/scene-apply.d.ts.map +1 -0
- package/dist/scene/scene-apply.js +326 -0
- package/dist/scene/scene-diff-schema.d.ts +285 -0
- package/dist/scene/scene-diff-schema.d.ts.map +1 -0
- package/dist/scene/scene-diff-schema.js +92 -0
- package/dist/scene/scene-diff-types.d.ts +40 -0
- package/dist/scene/scene-diff-types.d.ts.map +1 -0
- package/dist/scene/scene-diff-types.js +14 -0
- package/dist/scene/scene-loader.d.ts +177 -0
- package/dist/scene/scene-loader.d.ts.map +1 -0
- package/dist/scene/scene-loader.js +1213 -0
- package/dist/scene/scene-query.d.ts +11 -0
- package/dist/scene/scene-query.d.ts.map +1 -0
- package/dist/scene/scene-query.js +63 -0
- package/dist/scene/scene-types.d.ts +10 -0
- package/dist/scene/scene-types.d.ts.map +1 -0
- package/dist/scene/scene-types.js +8 -0
- package/dist/scene/scene-version.d.ts +26 -0
- package/dist/scene/scene-version.d.ts.map +1 -0
- package/dist/scene/scene-version.js +34 -0
- package/dist/scene/schema/animation.d.ts +8 -0
- package/dist/scene/schema/animation.d.ts.map +1 -0
- package/dist/scene/schema/animation.js +42 -0
- package/dist/scene/schema/audio.d.ts +13 -0
- package/dist/scene/schema/audio.d.ts.map +1 -0
- package/dist/scene/schema/audio.js +22 -0
- package/dist/scene/schema/camera.d.ts +28 -0
- package/dist/scene/schema/camera.d.ts.map +1 -0
- package/dist/scene/schema/camera.js +17 -0
- package/dist/scene/schema/collider.d.ts +40 -0
- package/dist/scene/schema/collider.d.ts.map +1 -0
- package/dist/scene/schema/collider.js +55 -0
- package/dist/scene/schema/entity-ref.d.ts +31 -0
- package/dist/scene/schema/entity-ref.d.ts.map +1 -0
- package/dist/scene/schema/entity-ref.js +61 -0
- package/dist/scene/schema/entity.d.ts +1036 -0
- package/dist/scene/schema/entity.d.ts.map +1 -0
- package/dist/scene/schema/entity.js +153 -0
- package/dist/scene/schema/environment.d.ts +425 -0
- package/dist/scene/schema/environment.d.ts.map +1 -0
- package/dist/scene/schema/environment.js +357 -0
- package/dist/scene/schema/index.d.ts +39 -0
- package/dist/scene/schema/index.d.ts.map +1 -0
- package/dist/scene/schema/index.js +20 -0
- package/dist/scene/schema/instances.d.ts +14 -0
- package/dist/scene/schema/instances.d.ts.map +1 -0
- package/dist/scene/schema/instances.js +28 -0
- package/dist/scene/schema/joint.d.ts +23 -0
- package/dist/scene/schema/joint.d.ts.map +1 -0
- package/dist/scene/schema/joint.js +23 -0
- package/dist/scene/schema/light.d.ts +38 -0
- package/dist/scene/schema/light.d.ts.map +1 -0
- package/dist/scene/schema/light.js +26 -0
- package/dist/scene/schema/material.d.ts +199 -0
- package/dist/scene/schema/material.d.ts.map +1 -0
- package/dist/scene/schema/material.js +99 -0
- package/dist/scene/schema/mesh.d.ts +48 -0
- package/dist/scene/schema/mesh.d.ts.map +1 -0
- package/dist/scene/schema/mesh.js +82 -0
- package/dist/scene/schema/particles.d.ts +2178 -0
- package/dist/scene/schema/particles.d.ts.map +1 -0
- package/dist/scene/schema/particles.js +321 -0
- package/dist/scene/schema/physics.d.ts +56 -0
- package/dist/scene/schema/physics.d.ts.map +1 -0
- package/dist/scene/schema/physics.js +37 -0
- package/dist/scene/schema/scene-file.d.ts +304 -0
- package/dist/scene/schema/scene-file.d.ts.map +1 -0
- package/dist/scene/schema/scene-file.js +262 -0
- package/dist/scene/schema/shadow.d.ts +28 -0
- package/dist/scene/schema/shadow.d.ts.map +1 -0
- package/dist/scene/schema/shadow.js +20 -0
- package/dist/scene/schema/spline.d.ts +25 -0
- package/dist/scene/schema/spline.d.ts.map +1 -0
- package/dist/scene/schema/spline.js +15 -0
- package/dist/scene/schema/tuples.d.ts +12 -0
- package/dist/scene/schema/tuples.d.ts.map +1 -0
- package/dist/scene/schema/tuples.js +14 -0
- package/dist/scene/schema/ui.d.ts +880 -0
- package/dist/scene/schema/ui.d.ts.map +1 -0
- package/dist/scene/schema/ui.js +506 -0
- package/dist/scene/user-data.d.ts +171 -0
- package/dist/scene/user-data.d.ts.map +1 -0
- package/dist/scene/user-data.js +137 -0
- package/dist/setup/setup-audio.d.ts +20 -0
- package/dist/setup/setup-audio.d.ts.map +1 -0
- package/dist/setup/setup-audio.js +41 -0
- package/dist/setup/setup-particles.d.ts +17 -0
- package/dist/setup/setup-particles.d.ts.map +1 -0
- package/dist/setup/setup-particles.js +16 -0
- package/dist/setup/setup-physics.d.ts +25 -0
- package/dist/setup/setup-physics.d.ts.map +1 -0
- package/dist/setup/setup-physics.js +51 -0
- package/dist/setup/setup-renderer.d.ts +69 -0
- package/dist/setup/setup-renderer.d.ts.map +1 -0
- package/dist/setup/setup-renderer.js +363 -0
- package/dist/tools/define-tool.d.ts +105 -0
- package/dist/tools/define-tool.d.ts.map +1 -0
- package/dist/tools/define-tool.js +82 -0
- package/dist/world2d/authoring-2d.d.ts +76 -0
- package/dist/world2d/authoring-2d.d.ts.map +1 -0
- package/dist/world2d/authoring-2d.js +176 -0
- package/dist/world2d/capture-to-scene2d.d.ts +5 -0
- package/dist/world2d/capture-to-scene2d.d.ts.map +1 -0
- package/dist/world2d/capture-to-scene2d.js +49 -0
- package/dist/world2d/collision-2d.d.ts +52 -0
- package/dist/world2d/collision-2d.d.ts.map +1 -0
- package/dist/world2d/collision-2d.js +70 -0
- package/dist/world2d/components-2d.d.ts +47 -0
- package/dist/world2d/components-2d.d.ts.map +1 -0
- package/dist/world2d/components-2d.js +77 -0
- package/dist/world2d/index.d.ts +34 -0
- package/dist/world2d/index.d.ts.map +1 -0
- package/dist/world2d/index.js +32 -0
- package/dist/world2d/ingest-iframe-2d.d.ts +82 -0
- package/dist/world2d/ingest-iframe-2d.d.ts.map +1 -0
- package/dist/world2d/ingest-iframe-2d.js +166 -0
- package/dist/world2d/ingest2d.d.ts +97 -0
- package/dist/world2d/ingest2d.d.ts.map +1 -0
- package/dist/world2d/ingest2d.js +40 -0
- package/dist/world2d/physics2d-registry.d.ts +24 -0
- package/dist/world2d/physics2d-registry.d.ts.map +1 -0
- package/dist/world2d/physics2d-registry.js +38 -0
- package/dist/world2d/pixi-game-adapter.d.ts +107 -0
- package/dist/world2d/pixi-game-adapter.d.ts.map +1 -0
- package/dist/world2d/pixi-game-adapter.js +211 -0
- package/dist/world2d/pixi-surface.d.ts +39 -0
- package/dist/world2d/pixi-surface.d.ts.map +1 -0
- package/dist/world2d/pixi-surface.js +47 -0
- package/dist/world2d/scene-capture-2d.d.ts +43 -0
- package/dist/world2d/scene-capture-2d.d.ts.map +1 -0
- package/dist/world2d/scene-capture-2d.js +92 -0
- package/dist/world2d/scene2d-loader.d.ts +27 -0
- package/dist/world2d/scene2d-loader.d.ts.map +1 -0
- package/dist/world2d/scene2d-loader.js +274 -0
- package/dist/world2d/schema/entity2d.d.ts +102 -0
- package/dist/world2d/schema/entity2d.d.ts.map +1 -0
- package/dist/world2d/schema/entity2d.js +119 -0
- package/dist/world2d/schema/physics2d.d.ts +46 -0
- package/dist/world2d/schema/physics2d.d.ts.map +1 -0
- package/dist/world2d/schema/physics2d.js +45 -0
- package/dist/world2d/schema/sprite.d.ts +42 -0
- package/dist/world2d/schema/sprite.d.ts.map +1 -0
- package/dist/world2d/schema/sprite.js +63 -0
- package/dist/world2d/schema/tilemap.d.ts +15 -0
- package/dist/world2d/schema/tilemap.d.ts.map +1 -0
- package/dist/world2d/schema/tilemap.js +19 -0
- package/dist/world2d/schema/tuples2d.d.ts +20 -0
- package/dist/world2d/schema/tuples2d.d.ts.map +1 -0
- package/dist/world2d/schema/tuples2d.js +19 -0
- package/dist/world2d/system-adapters-2d.d.ts +16 -0
- package/dist/world2d/system-adapters-2d.d.ts.map +1 -0
- package/dist/world2d/system-adapters-2d.js +37 -0
- package/dist/world2d/transform-writer-2d.d.ts +16 -0
- package/dist/world2d/transform-writer-2d.d.ts.map +1 -0
- package/dist/world2d/transform-writer-2d.js +22 -0
- package/dist/world2d/types.d.ts +53 -0
- package/dist/world2d/types.d.ts.map +1 -0
- package/dist/world2d/types.js +1 -0
- package/package.json +18 -4
- package/src/adapter/authoring.ts +10 -0
- package/src/adapter/first-party-systems.ts +23 -34
- package/src/adapter/index.ts +1 -3
- package/src/adapter/system-adapter.ts +15 -22
- package/src/adapter/vgai-scene-game-adapter.ts +5 -14
- package/src/animation/anim-graph-types.ts +12 -43
- package/src/animation/animation-clock.ts +479 -0
- package/src/animation/camera-ownership.ts +467 -0
- package/src/animation/cinematic-cues.ts +451 -0
- package/src/animation/clip-map.ts +41 -0
- package/src/animation/gsap-registration.ts +184 -0
- package/src/animation/theatre-clock-binding.ts +111 -0
- package/src/animation/theatre-director.ts +347 -0
- package/src/animation/theatre-object-binding.ts +661 -0
- package/src/animation/xstate-animation-binding.ts +398 -0
- package/src/animation/xstate-animation-meta.ts +282 -0
- package/src/audio/index.ts +39 -7
- package/src/audio/tone-clock-binding.ts +98 -0
- package/src/audio/tone-context.ts +129 -0
- package/src/audio/tone-offline-render.ts +167 -0
- package/src/audio/wav-encode.ts +119 -0
- package/src/core/game-loop.ts +17 -0
- package/src/core/types.ts +13 -0
- package/src/data/data-asset.ts +167 -0
- package/src/data/data-check-core.ts +242 -0
- package/src/data/data-ref.ts +145 -0
- package/src/data/vite-plugin-data.ts +290 -0
- package/src/index.ts +48 -0
- package/src/input/input-manager.ts +1206 -32
- package/src/input/input-types.ts +155 -3
- package/src/input/prompt-labels.ts +122 -0
- package/src/input/rebind-controller.ts +105 -0
- package/src/input/schema.ts +206 -52
- package/src/react/use-data.ts +114 -0
- package/src/react/use-selection.tsx +135 -0
- package/src/runtime/create-runtime.ts +30 -9
- package/src/runtime/render-audio-control.ts +168 -0
- package/src/runtime/render-control.ts +522 -0
- package/src/runtime/render-seed.ts +79 -0
- package/src/runtime/types.ts +0 -5
- package/src/scene/asset-loaders.ts +10 -36
- package/src/scene/asset-paths.ts +0 -2
- package/src/scene/asset-ref-check.ts +248 -0
- package/src/scene/parse.ts +133 -0
- package/src/scene/scene-loader.ts +81 -96
- package/src/scene/schema/animation.ts +30 -79
- package/src/scene/schema/entity.ts +20 -0
- package/src/scene/schema/index.ts +2 -12
- package/src/scene/user-data.ts +8 -9
- package/src/setup/setup-renderer.ts +9 -2
- package/src/tools/define-tool.ts +152 -0
- package/src/animation/anim-graph.ts +0 -406
- package/src/animation/anim-system.ts +0 -28
- package/src/animation/property-track.ts +0 -178
- package/src/animation/schema.ts +0 -204
- package/src/audio/ambient.ts +0 -300
- package/src/audio/impacts.ts +0 -212
- package/src/audio/movement.ts +0 -140
- package/src/audio/musical.ts +0 -200
- package/src/audio/ui-sounds.ts +0 -171
- package/src/audio/vehicle.ts +0 -235
- package/src/audio/weapons.ts +0 -152
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `applyVgaiOverlay` — the T3.8 deliverable (docs/DECISIONS-PENDING.md §D9):
|
|
3
|
+
* the opt-in runtime overlay applier a game owner adds to THEIR OWN deployment
|
|
4
|
+
* so an adapted (ingested-then-edited) game ships with the editor's edits
|
|
5
|
+
* visible, with zero involvement from the editor at runtime.
|
|
6
|
+
*
|
|
7
|
+
* The opt-in shape (D9's "minimal source opt-in, consistent with the
|
|
8
|
+
* zero-diff-unless-opted-in invariant"): one import + one call, placed before
|
|
9
|
+
* the game's own entry point runs (so the capture trap below is installed
|
|
10
|
+
* before the game's `WebGLRenderer` is constructed):
|
|
11
|
+
*
|
|
12
|
+
* import * as THREE from 'three';
|
|
13
|
+
* import { applyVgaiOverlay } from '@vgai/engine/adapter/ingest/overlay-applier';
|
|
14
|
+
*
|
|
15
|
+
* applyVgaiOverlay({ three: THREE, gameId: 'my-game' }); // fire-and-forget
|
|
16
|
+
* import('./my-game-entry.js'); // the UNMODIFIED game, unchanged
|
|
17
|
+
*
|
|
18
|
+
* No scene is passed manually — this reuses the SAME render-accessor trap
|
|
19
|
+
* (`./scene-capture.ts`) the editor's ingest mode uses to obtain the game's
|
|
20
|
+
* live `Scene`/camera the moment it first renders, so this works for ANY
|
|
21
|
+
* unmodified three.js game the SAME way ingestion already captures it (per
|
|
22
|
+
* `scene-capture.ts`'s own caveat, this requires the game to share the host's
|
|
23
|
+
* `three` module instance — a bundled/vendored copy of `three` cannot be
|
|
24
|
+
* captured this way, matching the editor's own capture ceiling).
|
|
25
|
+
*
|
|
26
|
+
* Failure modes are all graceful (the game always keeps running unmodified)
|
|
27
|
+
* but never silent — every one is logged via `console.warn` under the shared
|
|
28
|
+
* `overlay-report` prefix (`./overlay-report.ts`) so ops can grep one string
|
|
29
|
+
* for every overlay-related issue across both the editor and the ship path:
|
|
30
|
+
* - no overlay file at `overlayUrl` (never authored, or a 404/network
|
|
31
|
+
* error) → nothing applied, logged, scene never even captured;
|
|
32
|
+
* - the game never renders within `captureTimeoutMs` (bundled/non-shared
|
|
33
|
+
* three, or the game simply never boots) → nothing applied, logged;
|
|
34
|
+
* - a version mismatch and/or orphaned overlay ids (D9) → whatever DOES
|
|
35
|
+
* resolve is still applied; the report names what didn't.
|
|
36
|
+
*
|
|
37
|
+
* Precedence (D9 "overlay-vs-game-save-system precedence"): the overlay is
|
|
38
|
+
* applied exactly ONCE, synchronously, in the continuation of the game's
|
|
39
|
+
* FIRST captured render call — i.e. between that frame finishing and the
|
|
40
|
+
* game's own next frame starting. Any later mutation of the SAME
|
|
41
|
+
* property by the game's own logic (its own save/load system, a per-frame
|
|
42
|
+
* animation, etc.) therefore wins from then on purely by construction: this
|
|
43
|
+
* applier never re-applies and never re-reads the overlay after this one
|
|
44
|
+
* pass. A property the game's own logic never revisits stays overlaid for
|
|
45
|
+
* the life of the session; a property the game's own logic re-derives every
|
|
46
|
+
* frame reverts to the game's own value on the very next frame. This
|
|
47
|
+
* ordering is exercised directly by `overlay-applier.test.ts`'s "precedence"
|
|
48
|
+
* case (apply, then simulate one more game-owned mutation frame).
|
|
49
|
+
*/
|
|
50
|
+
import { applyOverlayToObjects, assignStructuralIds } from './overlay-apply';
|
|
51
|
+
import { overlayPath, parseOverlayFile } from './overlay-file';
|
|
52
|
+
import { buildOverlayApplyReport, logOverlayApplyReport, OVERLAY_REPORT_PREFIX, } from './overlay-report';
|
|
53
|
+
import { installSceneCapture } from './scene-capture';
|
|
54
|
+
/** Shared warn helper — every graceful-failure path below logs through here. */
|
|
55
|
+
function warn(gameId, message) {
|
|
56
|
+
// biome-ignore lint/suspicious/noConsole: deliberate, greppable (mirrors overlay-report.ts's own console.warn)
|
|
57
|
+
console.warn(`${OVERLAY_REPORT_PREFIX} game "${gameId}": ${message}`);
|
|
58
|
+
}
|
|
59
|
+
async function fetchOverlayFile(url, gameId, fetchImpl) {
|
|
60
|
+
const doFetch = fetchImpl ?? (typeof fetch === 'function' ? fetch : undefined);
|
|
61
|
+
if (!doFetch) {
|
|
62
|
+
warn(gameId, 'no fetch implementation available — overlay not applied, running unmodified.');
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
try {
|
|
66
|
+
const res = await doFetch(url);
|
|
67
|
+
if (!res.ok)
|
|
68
|
+
throw new Error(`HTTP ${res.status}`);
|
|
69
|
+
const raw = await res.json();
|
|
70
|
+
return parseOverlayFile(raw);
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
74
|
+
warn(gameId, `no overlay applied (${reason}) — running unmodified.`);
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* The opt-in ship-path applier — see this module's header for the full
|
|
80
|
+
* contract. Installs the scene-capture trap SYNCHRONOUSLY (before the first
|
|
81
|
+
* `await`), so a caller that follows the documented pattern (call this, THEN
|
|
82
|
+
* import/boot the game) never races the trap against the game's first frame
|
|
83
|
+
* — the trap's `captured` slot latches on the game's first render regardless
|
|
84
|
+
* of when (or whether) this function later calls `waitForCapture` on it.
|
|
85
|
+
* Only PROCEEDS to actually wait for that capture once an overlay has been
|
|
86
|
+
* found (fetched first, deliberately) — the common "never edited this game"
|
|
87
|
+
* case then costs one fetch, never a multi-second capture-timeout wait.
|
|
88
|
+
*/
|
|
89
|
+
export async function applyVgaiOverlay(options) {
|
|
90
|
+
const { three, gameId, gameVersion = null, upstreamPin = null, fetchImpl } = options;
|
|
91
|
+
const overlayUrl = options.overlayUrl ?? overlayPath(gameId);
|
|
92
|
+
// Install the capture trap before anything else in this function (and
|
|
93
|
+
// before returning control to the caller's microtask queue) — see the
|
|
94
|
+
// header comment's ordering guarantee.
|
|
95
|
+
const capture = installSceneCapture(three);
|
|
96
|
+
const overlayFile = await fetchOverlayFile(overlayUrl, gameId, fetchImpl);
|
|
97
|
+
if (!overlayFile) {
|
|
98
|
+
// Nothing to apply (never authored, 404, network error — already logged
|
|
99
|
+
// by fetchOverlayFile) — don't bother waiting for a render at all.
|
|
100
|
+
capture.uninstall();
|
|
101
|
+
return { captured: false, report: null };
|
|
102
|
+
}
|
|
103
|
+
let rt;
|
|
104
|
+
try {
|
|
105
|
+
rt = await capture.waitForCapture(options.captureTimeoutMs);
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
capture.uninstall();
|
|
109
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
110
|
+
warn(gameId, `scene capture failed (${reason}) — overlay not applied, running unmodified.`);
|
|
111
|
+
return { captured: false, report: null };
|
|
112
|
+
}
|
|
113
|
+
capture.uninstall(); // one-shot: we have what we need, stop wrapping future renders.
|
|
114
|
+
const { byId } = assignStructuralIds(rt.scene, rt.camera);
|
|
115
|
+
const { applied, orphanedIds } = applyOverlayToObjects(byId, overlayFile.overrides);
|
|
116
|
+
const report = buildOverlayApplyReport({
|
|
117
|
+
gameId,
|
|
118
|
+
authoredAgainst: overlayFile.authoredAgainst.gameVersion,
|
|
119
|
+
currentVersion: gameVersion,
|
|
120
|
+
applied,
|
|
121
|
+
orphanedIds,
|
|
122
|
+
// R5: `authoredUpstreamPin` passes through undefined for a legacy overlay
|
|
123
|
+
// (the key was never in `authoredAgainst` at all — see overlay-file.ts),
|
|
124
|
+
// preserving the "never checked" vs. "checked, found nothing" distinction
|
|
125
|
+
// all the way from disk. `currentUpstreamPin` is this no-op-by-default
|
|
126
|
+
// option (see its doc comment above) — `null` unless a game owner passes it.
|
|
127
|
+
authoredUpstreamPin: overlayFile.authoredAgainst.upstreamPin,
|
|
128
|
+
currentUpstreamPin: upstreamPin,
|
|
129
|
+
});
|
|
130
|
+
logOverlayApplyReport(report);
|
|
131
|
+
return { captured: true, report, scene: rt.scene, camera: rt.camera };
|
|
132
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ingest overlay application core — the structural-path identity scheme and
|
|
3
|
+
* override-application loop shared by the EDITOR's `IngestAuthoringAdapter`
|
|
4
|
+
* (`packages/editor/src/authoring/ingest-authoring-adapter.ts`, which layers
|
|
5
|
+
* hierarchy/selection/undo bookkeeping over it) and the T3.8 runtime ship-path
|
|
6
|
+
* applier (`./overlay-applier.ts`, which uses it directly with none of that
|
|
7
|
+
* editor bookkeeping). Extracted here (rather than duplicated) per D9's task
|
|
8
|
+
* split (docs/DECISIONS-PENDING.md §D9) — the editor re-exports/reuses this
|
|
9
|
+
* module so its behavior (and the ids it mints) stay byte-for-byte identical
|
|
10
|
+
* between "authored in the editor" and "reapplied at ship time".
|
|
11
|
+
*
|
|
12
|
+
* Identity: each object gets a deterministic **structural-path id** — stable
|
|
13
|
+
* for a given scene shape (position in the tree + three.js type + name), so
|
|
14
|
+
* the SAME id re-binds to the SAME object after an independent fresh walk of
|
|
15
|
+
* an unmodified game's rebuilt scene (a reload, or a separate page entirely —
|
|
16
|
+
* this is what lets an overlay authored in the editor apply cleanly in a
|
|
17
|
+
* shipped build that never ran the editor). It is also written to
|
|
18
|
+
* `userData.entityId` so the editor's object map / gizmo / selection (which
|
|
19
|
+
* key on `entityId`) bind to foreign objects with no further shim.
|
|
20
|
+
*/
|
|
21
|
+
import type * as THREE from 'three';
|
|
22
|
+
import type { IngestOverlay } from './overlay-file';
|
|
23
|
+
/** Fixed id for the captured render camera (not a scene child, so no structural path). */
|
|
24
|
+
export declare const CAMERA_ID = "ingest:camera";
|
|
25
|
+
/** The single (non-array) standard-ish material of a mesh, if it has a color. */
|
|
26
|
+
export declare function colorMaterialOf(o: THREE.Object3D): THREE.MeshStandardMaterial | null;
|
|
27
|
+
/** Result of a structural-path walk: the id→object map plus a few reflection stats. */
|
|
28
|
+
export interface StructuralIdWalk {
|
|
29
|
+
byId: Map<string, THREE.Object3D>;
|
|
30
|
+
count: number;
|
|
31
|
+
meshes: number;
|
|
32
|
+
lights: number;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* (Re)assign structural-path ids to every object under `scene` (and, if
|
|
36
|
+
* given, the separately-captured render `camera`, under the fixed
|
|
37
|
+
* {@link CAMERA_ID}). Idempotent and deterministic from scene structure
|
|
38
|
+
* (position + type + name) — the prerequisite for overlay reapplication
|
|
39
|
+
* across an independent fresh walk (editor reload, or a shipped build that
|
|
40
|
+
* never ran the editor at all).
|
|
41
|
+
*/
|
|
42
|
+
export declare function assignStructuralIds(scene: THREE.Object3D, camera?: THREE.Object3D | undefined): StructuralIdWalk;
|
|
43
|
+
/** Result of applying a saved overlay onto a structural-id-walked scene. */
|
|
44
|
+
export interface OverlayApplyOutcome {
|
|
45
|
+
applied: number;
|
|
46
|
+
orphanedIds: string[];
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Apply a saved overlay's overrides onto the live objects in `byId` (from
|
|
50
|
+
* {@link assignStructuralIds}). Ids absent from the map are "orphaned" — e.g. a
|
|
51
|
+
* dynamic child that didn't respawn, or the vendored game was bumped and
|
|
52
|
+
* restructured — never an error; the caller reports them (never silently) via
|
|
53
|
+
* `./overlay-report.ts`. Mutates matched objects in place; does not mutate
|
|
54
|
+
* `overlay` itself or track dirty/undo state — that bookkeeping is the
|
|
55
|
+
* editor-side `IngestAuthoringAdapter`'s job (persistable-edit tracking, so
|
|
56
|
+
* orphans round-trip on the next save) and is irrelevant to the ship-path
|
|
57
|
+
* applier (which never saves).
|
|
58
|
+
*/
|
|
59
|
+
export declare function applyOverlayToObjects(byId: Map<string, THREE.Object3D>, overlay: IngestOverlay): OverlayApplyOutcome;
|
|
60
|
+
//# sourceMappingURL=overlay-apply.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overlay-apply.d.ts","sourceRoot":"","sources":["../../../src/adapter/ingest/overlay-apply.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAEpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,0FAA0F;AAC1F,eAAO,MAAM,SAAS,kBAAkB,CAAC;AAEzC,iFAAiF;AACjF,wBAAgB,eAAe,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAKpF;AAED,uFAAuF;AACvF,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,KAAK,CAAC,QAAQ,EACrB,MAAM,CAAC,EAAE,KAAK,CAAC,QAAQ,GAAG,SAAS,GAClC,gBAAgB,CA4BlB;AAED,4EAA4E;AAC5E,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,EACjC,OAAO,EAAE,aAAa,GACrB,mBAAmB,CAkBrB"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ingest overlay application core — the structural-path identity scheme and
|
|
3
|
+
* override-application loop shared by the EDITOR's `IngestAuthoringAdapter`
|
|
4
|
+
* (`packages/editor/src/authoring/ingest-authoring-adapter.ts`, which layers
|
|
5
|
+
* hierarchy/selection/undo bookkeeping over it) and the T3.8 runtime ship-path
|
|
6
|
+
* applier (`./overlay-applier.ts`, which uses it directly with none of that
|
|
7
|
+
* editor bookkeeping). Extracted here (rather than duplicated) per D9's task
|
|
8
|
+
* split (docs/DECISIONS-PENDING.md §D9) — the editor re-exports/reuses this
|
|
9
|
+
* module so its behavior (and the ids it mints) stay byte-for-byte identical
|
|
10
|
+
* between "authored in the editor" and "reapplied at ship time".
|
|
11
|
+
*
|
|
12
|
+
* Identity: each object gets a deterministic **structural-path id** — stable
|
|
13
|
+
* for a given scene shape (position in the tree + three.js type + name), so
|
|
14
|
+
* the SAME id re-binds to the SAME object after an independent fresh walk of
|
|
15
|
+
* an unmodified game's rebuilt scene (a reload, or a separate page entirely —
|
|
16
|
+
* this is what lets an overlay authored in the editor apply cleanly in a
|
|
17
|
+
* shipped build that never ran the editor). It is also written to
|
|
18
|
+
* `userData.entityId` so the editor's object map / gizmo / selection (which
|
|
19
|
+
* key on `entityId`) bind to foreign objects with no further shim.
|
|
20
|
+
*/
|
|
21
|
+
import { setUserData } from '../../scene/user-data';
|
|
22
|
+
/** Fixed id for the captured render camera (not a scene child, so no structural path). */
|
|
23
|
+
export const CAMERA_ID = 'ingest:camera';
|
|
24
|
+
/** The single (non-array) standard-ish material of a mesh, if it has a color. */
|
|
25
|
+
export function colorMaterialOf(o) {
|
|
26
|
+
const mat = o.material;
|
|
27
|
+
if (!mat || Array.isArray(mat))
|
|
28
|
+
return null;
|
|
29
|
+
const m = mat;
|
|
30
|
+
return m.color ? m : null;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* (Re)assign structural-path ids to every object under `scene` (and, if
|
|
34
|
+
* given, the separately-captured render `camera`, under the fixed
|
|
35
|
+
* {@link CAMERA_ID}). Idempotent and deterministic from scene structure
|
|
36
|
+
* (position + type + name) — the prerequisite for overlay reapplication
|
|
37
|
+
* across an independent fresh walk (editor reload, or a shipped build that
|
|
38
|
+
* never ran the editor at all).
|
|
39
|
+
*/
|
|
40
|
+
export function assignStructuralIds(scene, camera) {
|
|
41
|
+
const byId = new Map();
|
|
42
|
+
let count = 0;
|
|
43
|
+
let meshes = 0;
|
|
44
|
+
let lights = 0;
|
|
45
|
+
const visit = (o, path) => {
|
|
46
|
+
const id = `ingest:${path}:${o.type}:${o.name || ''}`;
|
|
47
|
+
setUserData(o, 'entityId', id);
|
|
48
|
+
byId.set(id, o);
|
|
49
|
+
count++;
|
|
50
|
+
if (o.isLight)
|
|
51
|
+
lights++;
|
|
52
|
+
else if (o.isMesh)
|
|
53
|
+
meshes++;
|
|
54
|
+
o.children.forEach((c, i) => {
|
|
55
|
+
visit(c, `${path}/${i}`);
|
|
56
|
+
});
|
|
57
|
+
};
|
|
58
|
+
scene.children.forEach((c, i) => {
|
|
59
|
+
visit(c, `${i}`);
|
|
60
|
+
});
|
|
61
|
+
if (camera) {
|
|
62
|
+
setUserData(camera, 'entityId', CAMERA_ID);
|
|
63
|
+
byId.set(CAMERA_ID, camera);
|
|
64
|
+
count++;
|
|
65
|
+
}
|
|
66
|
+
return { byId, count, meshes, lights };
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Apply a saved overlay's overrides onto the live objects in `byId` (from
|
|
70
|
+
* {@link assignStructuralIds}). Ids absent from the map are "orphaned" — e.g. a
|
|
71
|
+
* dynamic child that didn't respawn, or the vendored game was bumped and
|
|
72
|
+
* restructured — never an error; the caller reports them (never silently) via
|
|
73
|
+
* `./overlay-report.ts`. Mutates matched objects in place; does not mutate
|
|
74
|
+
* `overlay` itself or track dirty/undo state — that bookkeeping is the
|
|
75
|
+
* editor-side `IngestAuthoringAdapter`'s job (persistable-edit tracking, so
|
|
76
|
+
* orphans round-trip on the next save) and is irrelevant to the ship-path
|
|
77
|
+
* applier (which never saves).
|
|
78
|
+
*/
|
|
79
|
+
export function applyOverlayToObjects(byId, overlay) {
|
|
80
|
+
let applied = 0;
|
|
81
|
+
const orphanedIds = [];
|
|
82
|
+
for (const [id, ov] of Object.entries(overlay)) {
|
|
83
|
+
const o = byId.get(id);
|
|
84
|
+
if (!o) {
|
|
85
|
+
orphanedIds.push(id);
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
if (ov.position)
|
|
89
|
+
o.position.set(ov.position[0], ov.position[1], ov.position[2]);
|
|
90
|
+
if (ov.rotation)
|
|
91
|
+
o.quaternion.set(ov.rotation[0], ov.rotation[1], ov.rotation[2], ov.rotation[3]);
|
|
92
|
+
if (ov.scale)
|
|
93
|
+
o.scale.set(ov.scale[0], ov.scale[1], ov.scale[2]);
|
|
94
|
+
if (ov.color)
|
|
95
|
+
colorMaterialOf(o)?.color.set(ov.color);
|
|
96
|
+
if (ov.visible !== undefined)
|
|
97
|
+
o.visible = ov.visible;
|
|
98
|
+
applied++;
|
|
99
|
+
}
|
|
100
|
+
return { applied, orphanedIds };
|
|
101
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ingest overlay envelope — the on-disk shape shared by every consumer of a
|
|
3
|
+
* saved ingest overlay: the editor (`packages/editor/src/authoring/ingest-overlay.ts`,
|
|
4
|
+
* which persists it through the storage-backend seam) AND the T3.8 runtime ship-path
|
|
5
|
+
* applier (`./overlay-applier.ts`, which fetches it over plain HTTP in a deployed
|
|
6
|
+
* game with no editor/storage-backend dependency at all).
|
|
7
|
+
*
|
|
8
|
+
* This module is the dependency-free core (types + pure parsing) both share — moved
|
|
9
|
+
* here (from the editor-only module that used to own it) per D9's task split
|
|
10
|
+
* (docs/DECISIONS-PENDING.md §D9): the editor keeps the storage-backend-aware
|
|
11
|
+
* `loadOverlay`/`saveOverlay` and re-exports everything below unchanged so its
|
|
12
|
+
* existing import sites don't churn.
|
|
13
|
+
*/
|
|
14
|
+
/** A single object's persisted overrides (only the fields the user changed). */
|
|
15
|
+
export interface IngestOverride {
|
|
16
|
+
position?: [number, number, number];
|
|
17
|
+
rotation?: [number, number, number, number];
|
|
18
|
+
scale?: [number, number, number];
|
|
19
|
+
color?: string;
|
|
20
|
+
visible?: boolean;
|
|
21
|
+
}
|
|
22
|
+
/** id (structural-path) → overrides. */
|
|
23
|
+
export type IngestOverlay = Record<string, IngestOverride>;
|
|
24
|
+
/** Current on-disk envelope format version (D9, docs/DECISIONS-PENDING.md §D9). */
|
|
25
|
+
export declare const OVERLAY_FORMAT_VERSION = 1;
|
|
26
|
+
/**
|
|
27
|
+
* The on-disk overlay envelope (D9 — overlay versioning + orphan reporting).
|
|
28
|
+
* Wraps the flat `IngestOverlay` (id → overrides) with save-time provenance:
|
|
29
|
+
* which game version the edits were authored against, so a later mount (editor
|
|
30
|
+
* OR shipped runtime) can detect drift and report it (`./overlay-report.ts`'s
|
|
31
|
+
* `OverlayApplyReport`).
|
|
32
|
+
*
|
|
33
|
+
* `formatVersion` distinguishes this from the PRE-D9 flat file (the whole JSON
|
|
34
|
+
* file WAS the `IngestOverlay`): {@link parseOverlayFile} recognizes both. An
|
|
35
|
+
* object with `formatVersion` + `overrides` parses as the real envelope; any
|
|
36
|
+
* other shape (or unparseable content) parses as a legacy flat file, wrapped as
|
|
37
|
+
* `{ formatVersion: 0, authoredAgainst: { gameVersion: null }, overrides: <the flat object> }`
|
|
38
|
+
* — never rejected, never warned about by itself.
|
|
39
|
+
*
|
|
40
|
+
* `authoredAgainst.upstreamPin` (R5, docs/MASTER-ARCHITECTURE-REVIEW.md
|
|
41
|
+
* §4(c)/§7.1 item 9 — the overlay-identity gap `gameVersion` alone doesn't
|
|
42
|
+
* close: `gameVersion` is the manifest's own `version` field, which a
|
|
43
|
+
* re-vendor of the upstream game need not bump — see every `public/ingest/*`
|
|
44
|
+
* game's `vgai.game.json`, all pinned at `"version": "0.1.0"` regardless of
|
|
45
|
+
* upstream commit) is an OPTIONAL sibling key, deliberately absent from this
|
|
46
|
+
* type's older call sites' literal shape: its ABSENCE (the key missing from
|
|
47
|
+
* `authoredAgainst` entirely) is the "legacy overlay" signal — saved by code
|
|
48
|
+
* that predates this field, so the pin concept never existed for it, and
|
|
49
|
+
* `./overlay-report.ts`'s apply-time check must skip it (not treat it as a
|
|
50
|
+
* guaranteed mismatch OR a guaranteed match — anti-shim, no guessing). A
|
|
51
|
+
* `null` VALUE (key present, value `null`) means R5-aware save-time code DID
|
|
52
|
+
* look for a pin and honestly found none (e.g. an externally-authored,
|
|
53
|
+
* non-vendored project opened via the CLI-on-folder route, which has no
|
|
54
|
+
* `UPSTREAM.md` at all). See `./upstream-pin.ts` for the pure extraction, and
|
|
55
|
+
* `packages/editor/src/ingest-mode.ts` for where it's read at save/apply
|
|
56
|
+
* time. This is purely additive — {@link parseOverlayFile} never invents the
|
|
57
|
+
* key for an envelope that didn't have it.
|
|
58
|
+
*/
|
|
59
|
+
export interface OverlayFile {
|
|
60
|
+
formatVersion: number;
|
|
61
|
+
authoredAgainst: {
|
|
62
|
+
gameVersion: string | null;
|
|
63
|
+
upstreamPin?: string | null;
|
|
64
|
+
};
|
|
65
|
+
overrides: IngestOverlay;
|
|
66
|
+
}
|
|
67
|
+
/** Where a game's overlay lives, project-root-relative (also the ship path's default fetch URL). */
|
|
68
|
+
export declare function overlayPath(gameId: string): string;
|
|
69
|
+
/** The empty envelope — no overlay found / nothing authored yet. */
|
|
70
|
+
export declare function emptyOverlayFile(): OverlayFile;
|
|
71
|
+
/**
|
|
72
|
+
* Parse a loaded/fetched overlay's raw JSON into the {@link OverlayFile} shape,
|
|
73
|
+
* transparently upgrading a legacy (pre-D9) flat file — the whole parsed value
|
|
74
|
+
* IS the `IngestOverlay` in that case. Pure — no I/O, no storage backend, so
|
|
75
|
+
* it's usable from any context (editor `loadOverlay`, the ship-path applier's
|
|
76
|
+
* `fetch().then(r => r.json())`).
|
|
77
|
+
*/
|
|
78
|
+
export declare function parseOverlayFile(raw: unknown): OverlayFile;
|
|
79
|
+
//# sourceMappingURL=overlay-file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overlay-file.d.ts","sourceRoot":"","sources":["../../../src/adapter/ingest/overlay-file.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,gFAAgF;AAChF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wCAAwC;AACxC,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAE3D,mFAAmF;AACnF,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE;QAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAC7E,SAAS,EAAE,aAAa,CAAC;CAC1B;AAED,oGAAoG;AACpG,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,oEAAoE;AACpE,wBAAgB,gBAAgB,IAAI,WAAW,CAM9C;AAYD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW,CA0B1D"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ingest overlay envelope — the on-disk shape shared by every consumer of a
|
|
3
|
+
* saved ingest overlay: the editor (`packages/editor/src/authoring/ingest-overlay.ts`,
|
|
4
|
+
* which persists it through the storage-backend seam) AND the T3.8 runtime ship-path
|
|
5
|
+
* applier (`./overlay-applier.ts`, which fetches it over plain HTTP in a deployed
|
|
6
|
+
* game with no editor/storage-backend dependency at all).
|
|
7
|
+
*
|
|
8
|
+
* This module is the dependency-free core (types + pure parsing) both share — moved
|
|
9
|
+
* here (from the editor-only module that used to own it) per D9's task split
|
|
10
|
+
* (docs/DECISIONS-PENDING.md §D9): the editor keeps the storage-backend-aware
|
|
11
|
+
* `loadOverlay`/`saveOverlay` and re-exports everything below unchanged so its
|
|
12
|
+
* existing import sites don't churn.
|
|
13
|
+
*/
|
|
14
|
+
/** Current on-disk envelope format version (D9, docs/DECISIONS-PENDING.md §D9). */
|
|
15
|
+
export const OVERLAY_FORMAT_VERSION = 1;
|
|
16
|
+
/** Where a game's overlay lives, project-root-relative (also the ship path's default fetch URL). */
|
|
17
|
+
export function overlayPath(gameId) {
|
|
18
|
+
return `.vgai/overlays/${gameId}.json`;
|
|
19
|
+
}
|
|
20
|
+
/** The empty envelope — no overlay found / nothing authored yet. */
|
|
21
|
+
export function emptyOverlayFile() {
|
|
22
|
+
return {
|
|
23
|
+
formatVersion: OVERLAY_FORMAT_VERSION,
|
|
24
|
+
authoredAgainst: { gameVersion: null },
|
|
25
|
+
overrides: {},
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/** An envelope has both its distinguishing keys — anything else is a legacy flat file. */
|
|
29
|
+
function isEnvelope(raw) {
|
|
30
|
+
return (!!raw &&
|
|
31
|
+
typeof raw === 'object' &&
|
|
32
|
+
'formatVersion' in raw &&
|
|
33
|
+
'overrides' in raw);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Parse a loaded/fetched overlay's raw JSON into the {@link OverlayFile} shape,
|
|
37
|
+
* transparently upgrading a legacy (pre-D9) flat file — the whole parsed value
|
|
38
|
+
* IS the `IngestOverlay` in that case. Pure — no I/O, no storage backend, so
|
|
39
|
+
* it's usable from any context (editor `loadOverlay`, the ship-path applier's
|
|
40
|
+
* `fetch().then(r => r.json())`).
|
|
41
|
+
*/
|
|
42
|
+
export function parseOverlayFile(raw) {
|
|
43
|
+
if (isEnvelope(raw)) {
|
|
44
|
+
const rawAuthored = (raw.authoredAgainst ?? { gameVersion: null });
|
|
45
|
+
const authoredAgainst = {
|
|
46
|
+
gameVersion: rawAuthored.gameVersion ?? null,
|
|
47
|
+
};
|
|
48
|
+
// Preserve ABSENCE vs. explicit `null` (see this field's doc comment
|
|
49
|
+
// above) — only copy the key over if the raw JSON actually had it, rather
|
|
50
|
+
// than defaulting it in (which would make every pre-R5 saved overlay look
|
|
51
|
+
// like a "checked, found nothing" R5 save instead of "never checked").
|
|
52
|
+
if ('upstreamPin' in rawAuthored)
|
|
53
|
+
authoredAgainst.upstreamPin = rawAuthored.upstreamPin ?? null;
|
|
54
|
+
return {
|
|
55
|
+
formatVersion: raw.formatVersion,
|
|
56
|
+
authoredAgainst,
|
|
57
|
+
overrides: raw.overrides ?? {},
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
// Legacy flat file (pre-D9): the whole parsed object IS the overrides map.
|
|
61
|
+
return {
|
|
62
|
+
formatVersion: 0,
|
|
63
|
+
authoredAgainst: { gameVersion: null },
|
|
64
|
+
overrides: (raw ?? {}),
|
|
65
|
+
};
|
|
66
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Overlay apply report — D9 (docs/DECISIONS-PENDING.md §D9): decide + surface
|
|
3
|
+
* what happens when a saved ingest overlay is reapplied onto a scene that may
|
|
4
|
+
* have moved on since the overlay was authored (a vendored game bump, or a
|
|
5
|
+
* dynamic subtree that never respawned). Two independent signals, either of
|
|
6
|
+
* which is worth a loud (never silent) structured warning:
|
|
7
|
+
* - a GAME-VERSION mismatch: the overlay's `authoredAgainst.gameVersion`
|
|
8
|
+
* (`./overlay-file.ts`'s envelope, stamped from the manifest's `version`
|
|
9
|
+
* at save time) disagrees with the currently-mounted game's version;
|
|
10
|
+
* - ORPHANED ids: structural-path ids in the overlay that resolved to
|
|
11
|
+
* nothing on the current scene walk (`./overlay-apply.ts`'s
|
|
12
|
+
* `applyOverlayToObjects`).
|
|
13
|
+
*
|
|
14
|
+
* Neither condition blocks mounting — the overlay still applies everything it
|
|
15
|
+
* CAN; this module only decides whether/how to report what it couldn't.
|
|
16
|
+
*
|
|
17
|
+
* This is the SEAM T3.8 (the runtime overlay applier, i.e. reapplying an
|
|
18
|
+
* ingest overlay against a shipped/played build rather than the editor)
|
|
19
|
+
* reuses: `./overlay-applier.ts`'s `applyVgaiOverlay` builds + logs this EXACT
|
|
20
|
+
* report shape, same as the editor does. Moved here from the editor-only
|
|
21
|
+
* module that used to own it (`packages/editor/src/authoring/overlay-report.ts`,
|
|
22
|
+
* which now re-exports everything below unchanged plus the editor-only
|
|
23
|
+
* "active report" banner slot) — kept dependency-free (no `editor-console`/
|
|
24
|
+
* `window` import) so it stays importable from a headless runtime context —
|
|
25
|
+
* same discipline as `../achieved-tier.ts`.
|
|
26
|
+
*
|
|
27
|
+
* R5 (docs/MASTER-ARCHITECTURE-REVIEW.md §4(c)/§7.1 item 9) adds a THIRD
|
|
28
|
+
* independent signal alongside version-mismatch/orphans: an UPSTREAM-PIN
|
|
29
|
+
* mismatch. `gameVersion` alone cannot catch a same-slot substitution after a
|
|
30
|
+
* re-vendor (structural ids are position+type+name; a re-vendor that keeps a
|
|
31
|
+
* slot's shape reapplies the overlay onto a semantically different object
|
|
32
|
+
* with `applied:1, orphanedIds:[]`, and every vendored game's manifest
|
|
33
|
+
* `version` is hand-set and need not change on a re-vendor). The upstream pin
|
|
34
|
+
* (`./upstream-pin.ts`, read from the vendored game's `UPSTREAM.md`) is bound
|
|
35
|
+
* to the thing that actually changes. Like the other two signals, a mismatch
|
|
36
|
+
* never blocks application — it's a report, not a block (matching orphan
|
|
37
|
+
* semantics) — so a re-vendor surfaces as an explicit "authored against pin
|
|
38
|
+
* X, applying onto pin Y" instead of silent success.
|
|
39
|
+
*/
|
|
40
|
+
/** One mount's version + orphan findings — the D9 acceptance-criteria shape. */
|
|
41
|
+
export interface OverlayApplyReport {
|
|
42
|
+
gameId: string;
|
|
43
|
+
/** `authoredAgainst.gameVersion` from the loaded overlay envelope, or `null` if never stamped. */
|
|
44
|
+
authoredAgainst: string | null;
|
|
45
|
+
/** The currently-mounted game's manifest `version`, or `null` if unknown at this call site. */
|
|
46
|
+
currentVersion: string | null;
|
|
47
|
+
/** Both sides known AND different — never true if either side is `null` (anti-shim: no guessing). */
|
|
48
|
+
versionMismatch: boolean;
|
|
49
|
+
applied: number;
|
|
50
|
+
/** Structural-path ids present in the overlay that resolved to nothing on this scene walk. */
|
|
51
|
+
orphanedIds: string[];
|
|
52
|
+
/**
|
|
53
|
+
* R5 — upstream-pin identity check (see this module's header). Distinct
|
|
54
|
+
* from `versionMismatch`/`orphanedIds`: it catches a same-slot
|
|
55
|
+
* SUBSTITUTION (id persists, meaning changed) that those two cannot.
|
|
56
|
+
*/
|
|
57
|
+
upstreamPin: {
|
|
58
|
+
/** The pin the overlay was authored against, or `null` if never recorded/discoverable. */
|
|
59
|
+
authored: string | null;
|
|
60
|
+
/** The currently-mounted game's own discoverable pin, or `null` if undiscoverable here
|
|
61
|
+
* (e.g. the runtime ship-path applier, which has no `UPSTREAM.md` access at all — a
|
|
62
|
+
* documented no-op there — or an externally-authored, non-vendored project). */
|
|
63
|
+
current: string | null;
|
|
64
|
+
/**
|
|
65
|
+
* Whether the SAVED overlay envelope recorded the upstream-pin concept at
|
|
66
|
+
* all (i.e. `authoredAgainst.upstreamPin` was a present key, even if its
|
|
67
|
+
* value was `null`). `false` means a legacy overlay — saved by pre-R5
|
|
68
|
+
* code (or the pre-D9 flat-file shape) — for which the pin check is
|
|
69
|
+
* skipped entirely, not silently treated as a match. This is the
|
|
70
|
+
* "explicit legacy indication" the report surfaces so a legacy overlay's
|
|
71
|
+
* clean apply doesn't read as "verified" when it was never checked.
|
|
72
|
+
*/
|
|
73
|
+
recorded: boolean;
|
|
74
|
+
/** `recorded` AND both sides known AND different — never true otherwise (anti-shim). */
|
|
75
|
+
mismatch: boolean;
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/** Greppable prefix shared by every overlay-related log line (mirrors `achieved-tier.ts`'s `TIER_SHORTFALL_PREFIX`). */
|
|
79
|
+
export declare const OVERLAY_REPORT_PREFIX = "overlay-report";
|
|
80
|
+
/** Build the report from a mount's raw findings — pure, no logging. */
|
|
81
|
+
export declare function buildOverlayApplyReport(args: {
|
|
82
|
+
gameId: string;
|
|
83
|
+
authoredAgainst: string | null;
|
|
84
|
+
currentVersion: string | null;
|
|
85
|
+
applied: number;
|
|
86
|
+
orphanedIds: string[];
|
|
87
|
+
/**
|
|
88
|
+
* R5: the loaded overlay's `authoredAgainst.upstreamPin`. Pass `undefined`
|
|
89
|
+
* (or omit) when the saved envelope never had the key at all (legacy
|
|
90
|
+
* overlay — `upstreamPin.recorded` becomes `false`); pass `null` when the
|
|
91
|
+
* envelope DID have the key but its value was `null` (R5-aware code
|
|
92
|
+
* looked, found nothing — `recorded` is `true`, `authored` is `null`); pass
|
|
93
|
+
* the pin string otherwise.
|
|
94
|
+
*/
|
|
95
|
+
authoredUpstreamPin?: string | null | undefined;
|
|
96
|
+
/**
|
|
97
|
+
* R5: the currently-mounted game's own discoverable pin, or `null`/omitted
|
|
98
|
+
* when undiscoverable at this call site (anti-shim: never fabricated).
|
|
99
|
+
*/
|
|
100
|
+
currentUpstreamPin?: string | null | undefined;
|
|
101
|
+
}): OverlayApplyReport;
|
|
102
|
+
/** Whether this report is worth surfacing (mismatch OR any orphan) — pure, no logging. */
|
|
103
|
+
export declare function overlayReportWarrants(report: OverlayApplyReport): boolean;
|
|
104
|
+
/** The one shared message shape — greppable on the prefix, JSON-parseable on the trailing payload. */
|
|
105
|
+
export declare function formatOverlayApplyReportMessage(report: OverlayApplyReport): string;
|
|
106
|
+
/**
|
|
107
|
+
* Emit the ONE structured `console.warn` this report warrants (mirroring the
|
|
108
|
+
* tier-shortfall pattern), or do nothing when neither signal fires. Returns
|
|
109
|
+
* whether it warned (callers that also want the panel-visible `editorConsole`
|
|
110
|
+
* echo, or the inline banner, use the return value / the report itself).
|
|
111
|
+
*/
|
|
112
|
+
export declare function logOverlayApplyReport(report: OverlayApplyReport): boolean;
|
|
113
|
+
//# sourceMappingURL=overlay-report.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overlay-report.d.ts","sourceRoot":"","sources":["../../../src/adapter/ingest/overlay-report.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,gFAAgF;AAChF,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,kGAAkG;IAClG,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,+FAA+F;IAC/F,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,qGAAqG;IACrG,eAAe,EAAE,OAAO,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,8FAA8F;IAC9F,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB;;;;OAIG;IACH,WAAW,EAAE;QACX,0FAA0F;QAC1F,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB;;wFAEgF;QAChF,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB;;;;;;;;WAQG;QACH,QAAQ,EAAE,OAAO,CAAC;QAClB,wFAAwF;QACxF,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC;CACH;AAED,wHAAwH;AACxH,eAAO,MAAM,qBAAqB,mBAAmB,CAAC;AAEtD,uEAAuE;AACvE,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB;;;;;;;OAOG;IACH,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAChD;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CAChD,GAAG,kBAAkB,CAwBrB;AAED,0FAA0F;AAC1F,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAEzE;AAED,sGAAsG;AACtG,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAuBlF;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CASzE"}
|