@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,176 @@
|
|
|
1
|
+
function kindOf(o) {
|
|
2
|
+
const ctor = o.constructor?.name?.toLowerCase() ?? 'container';
|
|
3
|
+
if (ctor.includes('animatedsprite'))
|
|
4
|
+
return 'animatedsprite';
|
|
5
|
+
if (ctor.includes('sprite'))
|
|
6
|
+
return 'sprite';
|
|
7
|
+
if (ctor.includes('text'))
|
|
8
|
+
return 'text';
|
|
9
|
+
return 'container';
|
|
10
|
+
}
|
|
11
|
+
export class AuthoringAdapter2D {
|
|
12
|
+
root;
|
|
13
|
+
byId = new Map();
|
|
14
|
+
overlay = {};
|
|
15
|
+
dirty = false;
|
|
16
|
+
constructor(root, opts = {}) {
|
|
17
|
+
this.root = root;
|
|
18
|
+
if (opts.overlay)
|
|
19
|
+
this.overlay = opts.overlay;
|
|
20
|
+
this.refresh();
|
|
21
|
+
}
|
|
22
|
+
/** Walk the live tree assigning deterministic structural-path ids, reapply overlay. */
|
|
23
|
+
refresh() {
|
|
24
|
+
this.byId.clear();
|
|
25
|
+
let count = 0;
|
|
26
|
+
let sprites = 0;
|
|
27
|
+
const visit = (o, path) => {
|
|
28
|
+
const id = `w2d:${path}:${kindOf(o)}:${o.label ?? ''}`;
|
|
29
|
+
o.__authId = id;
|
|
30
|
+
this.byId.set(id, o);
|
|
31
|
+
count++;
|
|
32
|
+
if (kindOf(o).includes('sprite'))
|
|
33
|
+
sprites++;
|
|
34
|
+
o.children.forEach((c, i) => {
|
|
35
|
+
visit(c, `${path}/${i}`);
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
this.root.children.forEach((c, i) => {
|
|
39
|
+
visit(c, `${i}`);
|
|
40
|
+
});
|
|
41
|
+
// Reapply any saved overlay edits to the live tree.
|
|
42
|
+
for (const [id, ov] of Object.entries(this.overlay))
|
|
43
|
+
this.applyOverride(id, ov);
|
|
44
|
+
return { count, sprites };
|
|
45
|
+
}
|
|
46
|
+
roots() {
|
|
47
|
+
return this.root.children.map((c) => this.toNode(c));
|
|
48
|
+
}
|
|
49
|
+
node(id) {
|
|
50
|
+
const o = this.byId.get(id);
|
|
51
|
+
return o ? this.toNode(o) : null;
|
|
52
|
+
}
|
|
53
|
+
displayObject(id) {
|
|
54
|
+
return this.byId.get(id) ?? null;
|
|
55
|
+
}
|
|
56
|
+
toNode(o) {
|
|
57
|
+
const self = o;
|
|
58
|
+
return {
|
|
59
|
+
id: self.__authId ?? '',
|
|
60
|
+
label: o.label ?? kindOf(o),
|
|
61
|
+
kind: kindOf(o),
|
|
62
|
+
parentId: o.parent?.__authId ?? null,
|
|
63
|
+
childIds: o.children.map((c) => c.__authId ?? ''),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
// --- Transforms ---
|
|
67
|
+
getTransform(id) {
|
|
68
|
+
const o = this.byId.get(id);
|
|
69
|
+
if (!o)
|
|
70
|
+
return null;
|
|
71
|
+
return {
|
|
72
|
+
position: [o.position.x, o.position.y],
|
|
73
|
+
rotation: o.rotation,
|
|
74
|
+
scale: [o.scale.x, o.scale.y],
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
setTransform(id, t) {
|
|
78
|
+
const o = this.byId.get(id);
|
|
79
|
+
if (!o)
|
|
80
|
+
return;
|
|
81
|
+
if (t.position)
|
|
82
|
+
o.position.set(t.position[0], t.position[1]);
|
|
83
|
+
if (t.rotation !== undefined)
|
|
84
|
+
o.rotation = t.rotation;
|
|
85
|
+
if (t.scale)
|
|
86
|
+
o.scale.set(t.scale[0], t.scale[1]);
|
|
87
|
+
this.overlay[id] ??= {};
|
|
88
|
+
const ov = this.overlay[id];
|
|
89
|
+
if (t.position)
|
|
90
|
+
ov.position = t.position;
|
|
91
|
+
if (t.rotation !== undefined)
|
|
92
|
+
ov.rotation = t.rotation;
|
|
93
|
+
if (t.scale)
|
|
94
|
+
ov.scale = t.scale;
|
|
95
|
+
this.dirty = true;
|
|
96
|
+
}
|
|
97
|
+
// --- Inspector (reflected fields) ---
|
|
98
|
+
properties(id) {
|
|
99
|
+
const o = this.byId.get(id);
|
|
100
|
+
if (!o)
|
|
101
|
+
return [];
|
|
102
|
+
const props = [
|
|
103
|
+
{ path: 'label', label: 'Name', type: 'string', value: o.label ?? '' },
|
|
104
|
+
{ path: 'visible', label: 'Visible', type: 'boolean', value: o.visible },
|
|
105
|
+
{ path: 'alpha', label: 'Alpha', type: 'number', value: o.alpha },
|
|
106
|
+
];
|
|
107
|
+
if ('tint' in o)
|
|
108
|
+
props.push({
|
|
109
|
+
path: 'tint',
|
|
110
|
+
label: 'Tint',
|
|
111
|
+
type: 'color',
|
|
112
|
+
value: o.tint,
|
|
113
|
+
});
|
|
114
|
+
return props;
|
|
115
|
+
}
|
|
116
|
+
set(id, path, value) {
|
|
117
|
+
const o = this.byId.get(id);
|
|
118
|
+
if (!o)
|
|
119
|
+
return;
|
|
120
|
+
o[path] = value;
|
|
121
|
+
this.overlay[id] ??= {};
|
|
122
|
+
if (path === 'tint')
|
|
123
|
+
this.overlay[id].tint = value;
|
|
124
|
+
if (path === 'visible')
|
|
125
|
+
this.overlay[id].visible = value;
|
|
126
|
+
this.dirty = true;
|
|
127
|
+
}
|
|
128
|
+
applyOverride(id, ov) {
|
|
129
|
+
const o = this.byId.get(id);
|
|
130
|
+
if (!o)
|
|
131
|
+
return;
|
|
132
|
+
if (ov.position)
|
|
133
|
+
o.position.set(ov.position[0], ov.position[1]);
|
|
134
|
+
if (ov.rotation !== undefined)
|
|
135
|
+
o.rotation = ov.rotation;
|
|
136
|
+
if (ov.scale)
|
|
137
|
+
o.scale.set(ov.scale[0], ov.scale[1]);
|
|
138
|
+
if (ov.tint !== undefined && 'tint' in o)
|
|
139
|
+
o.tint = ov.tint;
|
|
140
|
+
if (ov.visible !== undefined)
|
|
141
|
+
o.visible = ov.visible;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Re-apply a saved/external overlay onto the (already-walked) live tree, merging
|
|
145
|
+
* it into the in-memory overlay so a later `serializeOverlay()`/save preserves it
|
|
146
|
+
* and a later `refresh()` re-applies it again. Ids absent from the current tree
|
|
147
|
+
* are skipped (orphaned, not an error) — the 2D analog of
|
|
148
|
+
* `IngestAuthoringAdapter.applyOverlay` (T3.2 slice 3). Used both for the initial
|
|
149
|
+
* reload (constructor `opts.overlay`) and for `PersistenceProvider.applyExternal`
|
|
150
|
+
* (re-apply a changed overlay file without a full remount).
|
|
151
|
+
*/
|
|
152
|
+
applyOverlay(overlay) {
|
|
153
|
+
let applied = 0;
|
|
154
|
+
let orphaned = 0;
|
|
155
|
+
for (const [id, ov] of Object.entries(overlay)) {
|
|
156
|
+
if (!this.byId.has(id)) {
|
|
157
|
+
orphaned++;
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
this.applyOverride(id, ov);
|
|
161
|
+
this.overlay[id] = { ...this.overlay[id], ...ov };
|
|
162
|
+
applied++;
|
|
163
|
+
}
|
|
164
|
+
return { applied, orphaned };
|
|
165
|
+
}
|
|
166
|
+
isDirty() {
|
|
167
|
+
return this.dirty;
|
|
168
|
+
}
|
|
169
|
+
serializeOverlay() {
|
|
170
|
+
return this.overlay;
|
|
171
|
+
}
|
|
172
|
+
/** Clear the dirty flag after a successful save (mirrors IngestAuthoringAdapter). */
|
|
173
|
+
markClean() {
|
|
174
|
+
this.dirty = false;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Container } from 'pixi.js';
|
|
2
|
+
import type { Scene2DFile } from './schema/entity2d';
|
|
3
|
+
/** Capture selected subtree roots (by display object) into a Scene2D file. */
|
|
4
|
+
export declare function captureToScene2D(roots: Container[], name?: string): Scene2DFile;
|
|
5
|
+
//# sourceMappingURL=capture-to-scene2d.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture-to-scene2d.d.ts","sourceRoot":"","sources":["../../src/world2d/capture-to-scene2d.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,EAAY,WAAW,EAAE,MAAM,mBAAmB,CAAC;AA0C/D,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,IAAI,SAAqB,GAAG,WAAW,CAO3F"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Capture an ingested/live PixiJS subtree into authored Scene2D entities — the
|
|
3
|
+
* world2d analog of capture-to-vscn (`ingest-capture.ts`). Recognizable sprites/
|
|
4
|
+
* text/containers map to first-party `sprite`/`text`/`transform2d` sections;
|
|
5
|
+
* turns inspection into portable authored content.
|
|
6
|
+
*
|
|
7
|
+
* Honest ceiling (mirrors the 3D one): a Scene2D `sprite` expresses tint + size +
|
|
8
|
+
* anchor, not an arbitrary texture/GraphicsContext, so a captured display keeps its
|
|
9
|
+
* transform + tint + size; bespoke Graphics geometry is captured as a plain tinted
|
|
10
|
+
* sprite placeholder.
|
|
11
|
+
*/
|
|
12
|
+
function numToHex(n) {
|
|
13
|
+
return `#${((n ?? 0xffffff) & 0xffffff).toString(16).padStart(6, '0')}`;
|
|
14
|
+
}
|
|
15
|
+
function captureNode(o) {
|
|
16
|
+
const ctor = o.constructor?.name?.toLowerCase() ?? '';
|
|
17
|
+
const entity = {
|
|
18
|
+
name: o.label ?? ctor ?? 'entity',
|
|
19
|
+
surface: 'world2d',
|
|
20
|
+
transform2d: {
|
|
21
|
+
position: [o.position.x, o.position.y],
|
|
22
|
+
rotation: o.rotation,
|
|
23
|
+
scale: [o.scale.x, o.scale.y],
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
if (ctor.includes('text')) {
|
|
27
|
+
entity.text = { text: o.text ?? '' };
|
|
28
|
+
}
|
|
29
|
+
else if (ctor.includes('sprite')) {
|
|
30
|
+
entity.sprite = {
|
|
31
|
+
tint: numToHex(o.tint),
|
|
32
|
+
width: Math.round(o.width),
|
|
33
|
+
height: Math.round(o.height),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
const kids = o.children?.filter((c) => c.label !== undefined) ?? [];
|
|
37
|
+
if (kids.length)
|
|
38
|
+
entity.children = kids.map((c) => captureNode(c));
|
|
39
|
+
return entity;
|
|
40
|
+
}
|
|
41
|
+
/** Capture selected subtree roots (by display object) into a Scene2D file. */
|
|
42
|
+
export function captureToScene2D(roots, name = 'captured-world2d') {
|
|
43
|
+
return {
|
|
44
|
+
version: 1,
|
|
45
|
+
name,
|
|
46
|
+
surface: 'world2d',
|
|
47
|
+
entities: roots.map(captureNode),
|
|
48
|
+
};
|
|
49
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type RAPIER from '@dimforge/rapier2d-compat';
|
|
2
|
+
import type { NodeOf } from '../ecs/game-component';
|
|
3
|
+
import type { GameContext } from '../runtime/types';
|
|
4
|
+
import type { Physics2DRegistry } from './physics2d-registry';
|
|
5
|
+
export type Collision2DHandler = (handleA: number, handleB: number, started: boolean) => void;
|
|
6
|
+
/**
|
|
7
|
+
* Drains the Rapier 2D event queue each postPhysics and dispatches collision
|
|
8
|
+
* events — the world2d analog of `createCollisionSystem`. Events are buffered then
|
|
9
|
+
* handlers run after the drain returns (same re-entrancy guard as the 3D system:
|
|
10
|
+
* a handler must not call back into Rapier while the queue is borrowed).
|
|
11
|
+
*/
|
|
12
|
+
export declare function createCollision2DSystem(rapierWorld: RAPIER.World, eventQueue: RAPIER.EventQueue): {
|
|
13
|
+
onCollision(handler: Collision2DHandler): void;
|
|
14
|
+
offCollision(handler: Collision2DHandler): void;
|
|
15
|
+
drain(): void;
|
|
16
|
+
getBodyHandleFromCollider(colliderHandle: number): number | undefined;
|
|
17
|
+
};
|
|
18
|
+
export type Collision2DSystem = ReturnType<typeof createCollision2DSystem>;
|
|
19
|
+
/**
|
|
20
|
+
* The minimal component-manager capability `createTriggerDispatch2D` needs —
|
|
21
|
+
* `getComponents` returning instances with optional trigger callbacks, typed
|
|
22
|
+
* honestly against `NodeOf<'pixijs'>` (T7.2, D8 — this dispatch is always
|
|
23
|
+
* pixi-world-scoped) rather than the full manager type. Deliberately a
|
|
24
|
+
* structural slice: the unified `ComponentManager` (`ecs/component-manager.ts`,
|
|
25
|
+
* what production wires up since T7.3 slice 1, and the only manager left —
|
|
26
|
+
* the world2d silo's manager is deleted, T7.3 slice 2) satisfies it — this
|
|
27
|
+
* dispatcher has no dependency on which `WorldKind` a caller's manager was
|
|
28
|
+
* constructed for.
|
|
29
|
+
*/
|
|
30
|
+
export interface TriggerDispatchComponents {
|
|
31
|
+
getComponents(node: NodeOf<'pixijs'>): ReadonlyArray<{
|
|
32
|
+
onTriggerEnter?(other: NodeOf<'pixijs'>, ctx: GameContext): void;
|
|
33
|
+
onTriggerExit?(other: NodeOf<'pixijs'>, ctx: GameContext): void;
|
|
34
|
+
}>;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Turn Rapier 2D sensor overlaps into `onTriggerEnter`/`onTriggerExit` callbacks on
|
|
38
|
+
* the GameComponents of the two involved display objects — the 2D analog of
|
|
39
|
+
* `createTriggerDispatch`. Only sensor-involved collisions dispatch triggers.
|
|
40
|
+
*
|
|
41
|
+
* `ctx` is typed `GameContext` (the unified manager's typing) — production
|
|
42
|
+
* (`pixi-game-adapter.ts`) casts its real `World2DContext` to `GameContext`
|
|
43
|
+
* before passing it here; individual `GameComponent<'pixijs'>` subclasses
|
|
44
|
+
* that need real 2D fields off `ctx` widen their own lifecycle-method
|
|
45
|
+
* signature to `GameContext | World2DContext` and narrow back down (see
|
|
46
|
+
* `Camera2DFollow.update` in `./components-2d.ts` — the worked example of
|
|
47
|
+
* the pattern since the world2d-demo silo and its `first-party-scene.ts`
|
|
48
|
+
* were deleted, T6.1 slice 4). This function only ever forwards `ctx` — it
|
|
49
|
+
* never reads a field off it itself.
|
|
50
|
+
*/
|
|
51
|
+
export declare function createTriggerDispatch2D(physics: Physics2DRegistry, components: TriggerDispatchComponents, rapierWorld: RAPIER.World, ctx: GameContext): Collision2DHandler;
|
|
52
|
+
//# sourceMappingURL=collision-2d.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collision-2d.d.ts","sourceRoot":"","sources":["../../src/world2d/collision-2d.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,2BAA2B,CAAC;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;AAE9F;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU;yBAGvE,kBAAkB;0BAGjB,kBAAkB;;8CAaE,MAAM,GAAG,MAAM,GAAG,SAAS;EAKxE;AAED,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAE3E;;;;;;;;;;GAUG;AACH,MAAM,WAAW,yBAAyB;IACxC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC;QACnD,cAAc,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAAC;QACjE,aAAa,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAAC;KACjE,CAAC,CAAC;CACJ;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,iBAAiB,EAC1B,UAAU,EAAE,yBAAyB,EACrC,WAAW,EAAE,MAAM,CAAC,KAAK,EACzB,GAAG,EAAE,WAAW,GACf,kBAAkB,CAapB"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Drains the Rapier 2D event queue each postPhysics and dispatches collision
|
|
3
|
+
* events — the world2d analog of `createCollisionSystem`. Events are buffered then
|
|
4
|
+
* handlers run after the drain returns (same re-entrancy guard as the 3D system:
|
|
5
|
+
* a handler must not call back into Rapier while the queue is borrowed).
|
|
6
|
+
*/
|
|
7
|
+
export function createCollision2DSystem(rapierWorld, eventQueue) {
|
|
8
|
+
const handlers = [];
|
|
9
|
+
return {
|
|
10
|
+
onCollision(handler) {
|
|
11
|
+
handlers.push(handler);
|
|
12
|
+
},
|
|
13
|
+
offCollision(handler) {
|
|
14
|
+
const idx = handlers.indexOf(handler);
|
|
15
|
+
if (idx !== -1)
|
|
16
|
+
handlers.splice(idx, 1);
|
|
17
|
+
},
|
|
18
|
+
drain() {
|
|
19
|
+
const events = [];
|
|
20
|
+
eventQueue.drainCollisionEvents((h1, h2, started) => {
|
|
21
|
+
events.push([h1, h2, started]);
|
|
22
|
+
});
|
|
23
|
+
for (const [h1, h2, started] of events) {
|
|
24
|
+
for (let i = 0; i < handlers.length; i++)
|
|
25
|
+
handlers[i](h1, h2, started);
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
getBodyHandleFromCollider(colliderHandle) {
|
|
29
|
+
const collider = rapierWorld.getCollider(colliderHandle);
|
|
30
|
+
return collider?.parent()?.handle;
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Turn Rapier 2D sensor overlaps into `onTriggerEnter`/`onTriggerExit` callbacks on
|
|
36
|
+
* the GameComponents of the two involved display objects — the 2D analog of
|
|
37
|
+
* `createTriggerDispatch`. Only sensor-involved collisions dispatch triggers.
|
|
38
|
+
*
|
|
39
|
+
* `ctx` is typed `GameContext` (the unified manager's typing) — production
|
|
40
|
+
* (`pixi-game-adapter.ts`) casts its real `World2DContext` to `GameContext`
|
|
41
|
+
* before passing it here; individual `GameComponent<'pixijs'>` subclasses
|
|
42
|
+
* that need real 2D fields off `ctx` widen their own lifecycle-method
|
|
43
|
+
* signature to `GameContext | World2DContext` and narrow back down (see
|
|
44
|
+
* `Camera2DFollow.update` in `./components-2d.ts` — the worked example of
|
|
45
|
+
* the pattern since the world2d-demo silo and its `first-party-scene.ts`
|
|
46
|
+
* were deleted, T6.1 slice 4). This function only ever forwards `ctx` — it
|
|
47
|
+
* never reads a field off it itself.
|
|
48
|
+
*/
|
|
49
|
+
export function createTriggerDispatch2D(physics, components, rapierWorld, ctx) {
|
|
50
|
+
return (handleA, handleB, started) => {
|
|
51
|
+
const colA = rapierWorld.getCollider(handleA);
|
|
52
|
+
const colB = rapierWorld.getCollider(handleB);
|
|
53
|
+
if (!colA?.isSensor() && !colB?.isSensor())
|
|
54
|
+
return;
|
|
55
|
+
const objA = physics.getByColliderHandle(handleA);
|
|
56
|
+
const objB = physics.getByColliderHandle(handleB);
|
|
57
|
+
if (!objA || !objB)
|
|
58
|
+
return;
|
|
59
|
+
notify(components, objA, objB, started, ctx);
|
|
60
|
+
notify(components, objB, objA, started, ctx);
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
function notify(components, self, other, started, ctx) {
|
|
64
|
+
for (const inst of components.getComponents(self)) {
|
|
65
|
+
if (started)
|
|
66
|
+
inst.onTriggerEnter?.(other, ctx);
|
|
67
|
+
else
|
|
68
|
+
inst.onTriggerExit?.(other, ctx);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { GameComponent } from '../ecs/game-component';
|
|
3
|
+
import type { GameContext } from '../runtime/types';
|
|
4
|
+
import type { World2DContext } from './types';
|
|
5
|
+
/**
|
|
6
|
+
* Camera2DFollow — the canonical 2D camera (spec backend-2d-camera): a 2D camera is
|
|
7
|
+
* a transform on the world Container (`ctx.stage`). Attached to the entity to follow;
|
|
8
|
+
* each frame it pans/zooms `ctx.stage` so the target display stays centered. Mirrors
|
|
9
|
+
* the 3D "camera GameComponent on a camera entity" canonical-way rule.
|
|
10
|
+
*/
|
|
11
|
+
export declare class Camera2DFollow extends GameComponent<'pixijs'> {
|
|
12
|
+
static declaredKind: "pixijs";
|
|
13
|
+
static phase: "preRender";
|
|
14
|
+
static schema: z.ZodObject<{
|
|
15
|
+
zoom: z.ZodDefault<z.ZodNumber>;
|
|
16
|
+
smoothing: z.ZodDefault<z.ZodNumber>;
|
|
17
|
+
}, z.core.$strip>;
|
|
18
|
+
zoom: number;
|
|
19
|
+
smoothing: number;
|
|
20
|
+
update(_dt: number, gameCtx: GameContext | World2DContext): void;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Clickable2D — federated-events picking (spec backend-2d-input-picking). The sprite
|
|
24
|
+
* must be authored `interactive: true` (loader sets eventMode='static'); on pointerdown
|
|
25
|
+
* the sprite cycles tint, proving Pixi world picking works and is independent of the
|
|
26
|
+
* React/DOM HUD layer.
|
|
27
|
+
*
|
|
28
|
+
* INPUT ROUTING RULE (resolves the headline open design question): the three surfaces
|
|
29
|
+
* are stacked DOM siblings — React/DOM HUD (top, z-index, pointer-events gated) gets the
|
|
30
|
+
* event first; if it doesn't consume it, the Pixi canvas's federated EventSystem hit-tests
|
|
31
|
+
* world2d display objects; Three's raycaster handles the world3d canvas. Because each
|
|
32
|
+
* surface owns its own canvas/DOM node, a click on the HUD does not also pick the Pixi
|
|
33
|
+
* world beneath it, and vice-versa — no cross-surface double-picking.
|
|
34
|
+
*/
|
|
35
|
+
export declare class Clickable2D extends GameComponent<'pixijs'> {
|
|
36
|
+
static declaredKind: "pixijs";
|
|
37
|
+
static schema: z.ZodObject<{
|
|
38
|
+
tints: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
39
|
+
}, z.core.$strip>;
|
|
40
|
+
tints: string[];
|
|
41
|
+
private idx;
|
|
42
|
+
private handler;
|
|
43
|
+
init(): void;
|
|
44
|
+
update(): void;
|
|
45
|
+
dispose(): void;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=components-2d.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components-2d.d.ts","sourceRoot":"","sources":["../../src/world2d/components-2d.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C;;;;;GAKG;AACH,qBAAa,cAAe,SAAQ,aAAa,CAAC,QAAQ,CAAC;IACzD,MAAM,CAAC,YAAY,EAAG,QAAQ,CAAU;IACxC,MAAM,CAAC,KAAK,EAAG,WAAW,CAAU;IACpC,MAAM,CAAC,MAAM;;;sBAGV;IACH,IAAI,SAAK;IACT,SAAS,SAAQ;IAcjB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,cAAc,GAAG,IAAI;CAUjE;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,WAAY,SAAQ,aAAa,CAAC,QAAQ,CAAC;IACtD,MAAM,CAAC,YAAY,EAAG,QAAQ,CAAU;IACxC,MAAM,CAAC,MAAM;;sBAKV;IACH,KAAK,EAAE,MAAM,EAAE,CAAgD;IAC/D,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,OAAO,CAMb;IAEF,IAAI,IAAI,IAAI;IAKZ,MAAM,IAAI,IAAI;IACd,OAAO,IAAI,IAAI;CAGhB"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { GameComponent } from '../ecs/game-component';
|
|
3
|
+
/**
|
|
4
|
+
* Camera2DFollow — the canonical 2D camera (spec backend-2d-camera): a 2D camera is
|
|
5
|
+
* a transform on the world Container (`ctx.stage`). Attached to the entity to follow;
|
|
6
|
+
* each frame it pans/zooms `ctx.stage` so the target display stays centered. Mirrors
|
|
7
|
+
* the 3D "camera GameComponent on a camera entity" canonical-way rule.
|
|
8
|
+
*/
|
|
9
|
+
export class Camera2DFollow extends GameComponent {
|
|
10
|
+
static declaredKind = 'pixijs';
|
|
11
|
+
static phase = 'preRender';
|
|
12
|
+
static schema = z.object({
|
|
13
|
+
zoom: z.number().default(1).describe('Camera zoom (world Container scale)'),
|
|
14
|
+
smoothing: z.number().default(0.12).describe('Follow lerp factor 0..1 (1 = instant)'),
|
|
15
|
+
});
|
|
16
|
+
zoom = 1;
|
|
17
|
+
smoothing = 0.12;
|
|
18
|
+
// CONFLICT (bridged, same mechanism the deleted `GameComponent2D` alias
|
|
19
|
+
// used — T7.3 slice 2): `GameComponent<K>`'s lifecycle methods are typed
|
|
20
|
+
// `ctx: GameContext` (D8 §2 — `ctx` always means the game-level context),
|
|
21
|
+
// but this component genuinely needs `World2DContext` fields (`app`/
|
|
22
|
+
// `stage`), which share no structure with `GameContext` (neither is
|
|
23
|
+
// assignable to the other) — a plain `ctx: World2DContext` override would
|
|
24
|
+
// fail even under method bivariance (TS2416). Widening the parameter to
|
|
25
|
+
// the union is a valid (non-bivariant) override on its own — accepting a
|
|
26
|
+
// superset of the base signature is always sound — then narrowing back
|
|
27
|
+
// down via the cast below. At runtime this always receives the real
|
|
28
|
+
// `World2DContext` (`pixi-game-adapter.ts` casts it to `GameContext` only
|
|
29
|
+
// for the unified manager's internal typing).
|
|
30
|
+
update(_dt, gameCtx) {
|
|
31
|
+
const ctx = gameCtx;
|
|
32
|
+
const screen = ctx.app.screen;
|
|
33
|
+
const targetX = screen.width / 2 - this.node.x * this.zoom;
|
|
34
|
+
const targetY = screen.height / 2 - this.node.y * this.zoom;
|
|
35
|
+
const stage = ctx.stage;
|
|
36
|
+
stage.scale.set(this.zoom);
|
|
37
|
+
stage.position.x += (targetX - stage.position.x) * this.smoothing;
|
|
38
|
+
stage.position.y += (targetY - stage.position.y) * this.smoothing;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Clickable2D — federated-events picking (spec backend-2d-input-picking). The sprite
|
|
43
|
+
* must be authored `interactive: true` (loader sets eventMode='static'); on pointerdown
|
|
44
|
+
* the sprite cycles tint, proving Pixi world picking works and is independent of the
|
|
45
|
+
* React/DOM HUD layer.
|
|
46
|
+
*
|
|
47
|
+
* INPUT ROUTING RULE (resolves the headline open design question): the three surfaces
|
|
48
|
+
* are stacked DOM siblings — React/DOM HUD (top, z-index, pointer-events gated) gets the
|
|
49
|
+
* event first; if it doesn't consume it, the Pixi canvas's federated EventSystem hit-tests
|
|
50
|
+
* world2d display objects; Three's raycaster handles the world3d canvas. Because each
|
|
51
|
+
* surface owns its own canvas/DOM node, a click on the HUD does not also pick the Pixi
|
|
52
|
+
* world beneath it, and vice-versa — no cross-surface double-picking.
|
|
53
|
+
*/
|
|
54
|
+
export class Clickable2D extends GameComponent {
|
|
55
|
+
static declaredKind = 'pixijs';
|
|
56
|
+
static schema = z.object({
|
|
57
|
+
tints: z
|
|
58
|
+
.array(z.string())
|
|
59
|
+
.default(['#ff6b6b', '#4ecdc4', '#ffd23f', '#a06bff'])
|
|
60
|
+
.describe('Tint cycle'),
|
|
61
|
+
});
|
|
62
|
+
tints = ['#ff6b6b', '#4ecdc4', '#ffd23f', '#a06bff'];
|
|
63
|
+
idx = 0;
|
|
64
|
+
handler = () => {
|
|
65
|
+
this.idx = (this.idx + 1) % this.tints.length;
|
|
66
|
+
this.node.tint = Number.parseInt(this.tints[this.idx].replace('#', ''), 16);
|
|
67
|
+
};
|
|
68
|
+
init() {
|
|
69
|
+
this.node.eventMode = 'static';
|
|
70
|
+
this.node.cursor = 'pointer';
|
|
71
|
+
this.node.on('pointerdown', this.handler);
|
|
72
|
+
}
|
|
73
|
+
update() { }
|
|
74
|
+
dispose() {
|
|
75
|
+
this.node.off('pointerdown', this.handler);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* world2d — the PixiJS 2D render surface for vgai.
|
|
3
|
+
*
|
|
4
|
+
* A peer to the Three.js world3d surface and the React UI surface (ARCHITECTURE.md
|
|
5
|
+
* §Render Surfaces). It LITERALLY reuses the engine's loop primitives (`createGameLoop`,
|
|
6
|
+
* `createSystemRunner`, `PHASE_ORDER`) and faithfully MIRRORS the entity / authored-data
|
|
7
|
+
* model as a 2D twin (`Scene2D`), instantiating entities as PixiJS display objects
|
|
8
|
+
* instead of Object3Ds, with 2D physics/collision via native Rapier 2D — built on
|
|
9
|
+
* native libraries with thin adapters. Gameplay behavior attaches via the SAME
|
|
10
|
+
* `GameComponent<'pixijs'>` (`ecs/game-component.ts`) and unified `ComponentManager`
|
|
11
|
+
* (`ecs/component-manager.ts`) every threejs world uses (T7.3).
|
|
12
|
+
*
|
|
13
|
+
* See docs/PIXI-WORLD2D-MAXIMAL-SPEC.json (FROZEN).
|
|
14
|
+
*/
|
|
15
|
+
export { AuthoringAdapter2D, type EditorNode2D, type Overlay2D, type Override2D, type Property2D, type Transform2DValue, } from './authoring-2d';
|
|
16
|
+
export { captureToScene2D } from './capture-to-scene2d';
|
|
17
|
+
export { type Collision2DSystem, createCollision2DSystem, createTriggerDispatch2D, } from './collision-2d';
|
|
18
|
+
export { Camera2DFollow, Clickable2D } from './components-2d';
|
|
19
|
+
export { type EmbedMount2D, type IframeReachableMount2D, mountIngestGame2DEmbed, mountIngestGame2DIframeReachable, } from './ingest-iframe-2d';
|
|
20
|
+
export { type IngestGame2D, type IngestMount2D, mountIngestGame2D } from './ingest2d';
|
|
21
|
+
export { createPhysics2DRegistry, type Physics2DRefs, type Physics2DRegistry, } from './physics2d-registry';
|
|
22
|
+
export { createWorld2DRuntime, type MountedGame2D, type PixiSceneConfig, PixiSceneGameAdapter, type World2DHost, type World2DSession, type World2DSetupFn, } from './pixi-game-adapter';
|
|
23
|
+
export { createPixiSurface, type PixiSurface, type PixiSurfaceOptions } from './pixi-surface';
|
|
24
|
+
export { type CapturedRuntime2D, installSceneCapture2D, type SceneCapture2DHandle, } from './scene-capture-2d';
|
|
25
|
+
export { loadScene2DFromData, type Scene2DInstance } from './scene2d-loader';
|
|
26
|
+
export * from './schema/entity2d';
|
|
27
|
+
export * from './schema/physics2d';
|
|
28
|
+
export * from './schema/sprite';
|
|
29
|
+
export * from './schema/tilemap';
|
|
30
|
+
export * from './schema/tuples2d';
|
|
31
|
+
export { createPhysicsAdapter2D, type PhysicsAdapter2D } from './system-adapters-2d';
|
|
32
|
+
export { createTransformWriter2D } from './transform-writer-2d';
|
|
33
|
+
export type { Component2DRegistry, World2DContext } from './types';
|
|
34
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/world2d/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EACL,kBAAkB,EAClB,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,gBAAgB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EACL,KAAK,iBAAiB,EACtB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAC3B,sBAAsB,EACtB,gCAAgC,GACjC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACtF,OAAO,EACL,uBAAuB,EACvB,KAAK,aAAa,EAClB,KAAK,iBAAiB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,oBAAoB,EACpB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,oBAAoB,EACpB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,cAAc,GACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,KAAK,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAC9F,OAAO,EACL,KAAK,iBAAiB,EACtB,qBAAqB,EACrB,KAAK,oBAAoB,GAC1B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC7E,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,sBAAsB,EAAE,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* world2d — the PixiJS 2D render surface for vgai.
|
|
3
|
+
*
|
|
4
|
+
* A peer to the Three.js world3d surface and the React UI surface (ARCHITECTURE.md
|
|
5
|
+
* §Render Surfaces). It LITERALLY reuses the engine's loop primitives (`createGameLoop`,
|
|
6
|
+
* `createSystemRunner`, `PHASE_ORDER`) and faithfully MIRRORS the entity / authored-data
|
|
7
|
+
* model as a 2D twin (`Scene2D`), instantiating entities as PixiJS display objects
|
|
8
|
+
* instead of Object3Ds, with 2D physics/collision via native Rapier 2D — built on
|
|
9
|
+
* native libraries with thin adapters. Gameplay behavior attaches via the SAME
|
|
10
|
+
* `GameComponent<'pixijs'>` (`ecs/game-component.ts`) and unified `ComponentManager`
|
|
11
|
+
* (`ecs/component-manager.ts`) every threejs world uses (T7.3).
|
|
12
|
+
*
|
|
13
|
+
* See docs/PIXI-WORLD2D-MAXIMAL-SPEC.json (FROZEN).
|
|
14
|
+
*/
|
|
15
|
+
export { AuthoringAdapter2D, } from './authoring-2d';
|
|
16
|
+
export { captureToScene2D } from './capture-to-scene2d';
|
|
17
|
+
export { createCollision2DSystem, createTriggerDispatch2D, } from './collision-2d';
|
|
18
|
+
export { Camera2DFollow, Clickable2D } from './components-2d';
|
|
19
|
+
export { mountIngestGame2DEmbed, mountIngestGame2DIframeReachable, } from './ingest-iframe-2d';
|
|
20
|
+
export { mountIngestGame2D } from './ingest2d';
|
|
21
|
+
export { createPhysics2DRegistry, } from './physics2d-registry';
|
|
22
|
+
export { createWorld2DRuntime, PixiSceneGameAdapter, } from './pixi-game-adapter';
|
|
23
|
+
export { createPixiSurface } from './pixi-surface';
|
|
24
|
+
export { installSceneCapture2D, } from './scene-capture-2d';
|
|
25
|
+
export { loadScene2DFromData } from './scene2d-loader';
|
|
26
|
+
export * from './schema/entity2d';
|
|
27
|
+
export * from './schema/physics2d';
|
|
28
|
+
export * from './schema/sprite';
|
|
29
|
+
export * from './schema/tilemap';
|
|
30
|
+
export * from './schema/tuples2d';
|
|
31
|
+
export { createPhysicsAdapter2D } from './system-adapters-2d';
|
|
32
|
+
export { createTransformWriter2D } from './transform-writer-2d';
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* world2d iframe ingest tiers — the PixiJS analogs of the 3D ingest-iframe adapters.
|
|
3
|
+
*
|
|
4
|
+
* - OPAQUE EMBED (tier 0-1): a prebuilt/self-contained bundle runs in a sandboxed
|
|
5
|
+
* iframe; hosted + sized + disposed, NOT introspectable.
|
|
6
|
+
* - IFRAME-REACHABLE (tier 2-3): a bundle runs in its own iframe realm, but its
|
|
7
|
+
* `import 'pixi.js'` is wired (via an importmap) to a blob module re-exporting the
|
|
8
|
+
* HOST's pixi instance, so every Application/Sprite it creates is a HOST-realm
|
|
9
|
+
* object → the host `Application.prototype.render` trap fires and capture works.
|
|
10
|
+
*/
|
|
11
|
+
import { type CapturedRuntime2D, type SceneCapture2DHandle } from './scene-capture-2d';
|
|
12
|
+
export interface EmbedMount2D {
|
|
13
|
+
iframe: HTMLIFrameElement;
|
|
14
|
+
dispose: () => void;
|
|
15
|
+
}
|
|
16
|
+
/** OPAQUE EMBED: sandboxed iframe, no scene introspection (tier 0-1). */
|
|
17
|
+
export declare function mountIngestGame2DEmbed(html: string, container: HTMLElement): EmbedMount2D;
|
|
18
|
+
export interface IframeReachableMultiOpts {
|
|
19
|
+
captureTimeoutMs?: number;
|
|
20
|
+
/**
|
|
21
|
+
* Bare-specifier → host module-namespace map. MUST include the pixi.js instance the trap is
|
|
22
|
+
* installed on (passed separately as `pixiNamespace`); list the game's OTHER shared bare deps
|
|
23
|
+
* here (@pixi/sound, @pixi/ui, gsap, pixi-filters) so they resolve to host instances and their
|
|
24
|
+
* extension side-effects register on the host pixi (the trapped instance).
|
|
25
|
+
*/
|
|
26
|
+
extraDeps?: Record<string, Record<string, unknown>>;
|
|
27
|
+
/**
|
|
28
|
+
* D-Z3 (docs/WAVE3-ADAPTER-PLUMBING-DESIGN.md) — bare-specifier -> VERBATIM
|
|
29
|
+
* URL importmap entries (the project-node_modules fallback for a specifier
|
|
30
|
+
* that isn't in the host-namespace registry but IS installed in the open
|
|
31
|
+
* project's own `node_modules`). Written into the importmap DIRECTLY
|
|
32
|
+
* alongside the `extraDeps` blob-namespace entries — no host-side import,
|
|
33
|
+
* no blob wrapping, no decision logic here: this function just merges
|
|
34
|
+
* whatever `Record<specifier, url>` the caller (editor-side
|
|
35
|
+
* `host-namespace-registry.ts`) already decided. The URL's own transitive
|
|
36
|
+
* `import 'pixi.js'` resolves through this SAME importmap back to the host
|
|
37
|
+
* pixi trap (§0.3), keeping module identity converged without a second pixi
|
|
38
|
+
* instance.
|
|
39
|
+
*/
|
|
40
|
+
extraDepUrls?: Record<string, string>;
|
|
41
|
+
/** <base href> for the iframe so the game's relative asset URLs (Assets basePath) resolve. */
|
|
42
|
+
baseHref?: string;
|
|
43
|
+
/**
|
|
44
|
+
* HOST-SIDE asset URL remap (the Pixi analog of the three.js DefaultLoadingManager.setURLModifier
|
|
45
|
+
* asset adapter). A document.write iframe keeps the PARENT's window.location, so PixiJS's Assets
|
|
46
|
+
* resolver (which builds absolute URLs from window.location, not document.baseURI) would resolve
|
|
47
|
+
* the game's relative `basePath:'assets'` against the parent page. Wrapping the host pixi's
|
|
48
|
+
* Assets.init to force this ABSOLUTE basePath fixes resolution without touching the game source —
|
|
49
|
+
* pure host library configuration, restored on dispose.
|
|
50
|
+
*/
|
|
51
|
+
assetBaseUrl?: string;
|
|
52
|
+
/** Load the game bundle from this absolute URL (a built multi-file game). */
|
|
53
|
+
bundleUrl?: string;
|
|
54
|
+
/** …or run this inline module source (a single-file game). One of bundleUrl/inlineSrc required. */
|
|
55
|
+
inlineSrc?: string;
|
|
56
|
+
/** DOM the game expects to find before it boots (e.g. a `<div id="game-root">` it appends to). */
|
|
57
|
+
bodyHtml?: string;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* IFRAME-REACHABLE for REAL MULTI-FILE GAMES (cov2d-bundled-dedupe): run a built game bundle
|
|
61
|
+
* (its OWN unaltered source, externalized against pixi at build time) in its own iframe realm
|
|
62
|
+
* whose importmap maps EVERY shared bare dep — pixi.js + @pixi/sound/@pixi/ui/gsap/… — to the
|
|
63
|
+
* HOST instances, and (optionally) a <base href> so its AssetPack/manifest URLs resolve. The
|
|
64
|
+
* host `Application.prototype.render` trap then captures the live stage IN-REALM. The game's
|
|
65
|
+
* source is never touched; all of this is host-side wiring.
|
|
66
|
+
*/
|
|
67
|
+
export declare function mountIngestGame2DIframeReachableMulti(pixiNamespace: unknown, container: HTMLElement, opts: IframeReachableMultiOpts): Promise<IframeReachableMount2D>;
|
|
68
|
+
export interface IframeReachableMount2D {
|
|
69
|
+
iframe: HTMLIFrameElement;
|
|
70
|
+
capture: SceneCapture2DHandle;
|
|
71
|
+
captured: CapturedRuntime2D | null;
|
|
72
|
+
dispose: () => void;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* IFRAME-REACHABLE (tier 2-3): run `gameModuleSrc` in an iframe whose importmap maps
|
|
76
|
+
* `pixi.js` to a host-pixi re-export blob, and trap the host `Application.prototype`
|
|
77
|
+
* so the bundle's render is captured in-realm.
|
|
78
|
+
*/
|
|
79
|
+
export declare function mountIngestGame2DIframeReachable(pixiNamespace: unknown, gameModuleSrc: string, container: HTMLElement, opts?: {
|
|
80
|
+
captureTimeoutMs?: number;
|
|
81
|
+
}): Promise<IframeReachableMount2D>;
|
|
82
|
+
//# sourceMappingURL=ingest-iframe-2d.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ingest-iframe-2d.d.ts","sourceRoot":"","sources":["../../src/world2d/ingest-iframe-2d.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EACL,KAAK,iBAAiB,EAEtB,KAAK,oBAAoB,EAC1B,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,yEAAyE;AACzE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,GAAG,YAAY,CASzF;AAsCD,MAAM,WAAW,wBAAwB;IACvC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD;;;;;;;;;;;;OAYG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,8FAA8F;IAC9F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6EAA6E;IAC7E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mGAAmG;IACnG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kGAAkG;IAClG,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,wBAAsB,qCAAqC,CACzD,aAAa,EAAE,OAAO,EACtB,SAAS,EAAE,WAAW,EACtB,IAAI,EAAE,wBAAwB,GAC7B,OAAO,CAAC,sBAAsB,CAAC,CA2EjC;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,OAAO,EAAE,oBAAoB,CAAC;IAC9B,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACnC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAsB,gCAAgC,CACpD,aAAa,EAAE,OAAO,EACtB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,WAAW,EACtB,IAAI,GAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAO,GACvC,OAAO,CAAC,sBAAsB,CAAC,CAqCjC"}
|