@vgai/engine 0.5.0 → 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/schemas/engine-capabilities.json +4 -4
- package/schemas/vgai-game.schema.json +2 -2
- package/src/adapter/authoring.ts +42 -0
- package/src/adapter/index.ts +3 -0
- package/src/adapter/ingest/overlay-apply.ts +50 -6
- package/src/adapter/ingest/scene-capture.ts +51 -2
- package/src/adapter/vgai-scene-game-adapter.ts +24 -0
- package/src/manifest/schema.ts +7 -3
- package/src/runtime/create-runtime.ts +97 -0
- package/src/runtime/game.ts +11 -1
- package/src/scene/asset-ref-check.ts +1 -1
- package/src/scene/scene-loader.ts +2 -2
- package/src/scene/user-data.ts +18 -0
- package/src/world3d-react/behavior.tsx +19 -11
- package/src/world3d-react/r3f-adapter.tsx +8 -0
- package/dist/adapter/adapter-surface.d.ts +0 -30
- package/dist/adapter/adapter-surface.d.ts.map +0 -1
- package/dist/adapter/adapter-surface.js +0 -18
- package/dist/adapter/authoring.d.ts +0 -461
- package/dist/adapter/authoring.d.ts.map +0 -1
- package/dist/adapter/authoring.js +0 -22
- package/dist/adapter/colyseus-networking-adapter.d.ts +0 -43
- package/dist/adapter/colyseus-networking-adapter.d.ts.map +0 -1
- package/dist/adapter/colyseus-networking-adapter.js +0 -38
- package/dist/adapter/first-party-systems.d.ts +0 -38
- package/dist/adapter/first-party-systems.d.ts.map +0 -1
- package/dist/adapter/first-party-systems.js +0 -77
- package/dist/adapter/game-adapter.d.ts +0 -133
- package/dist/adapter/game-adapter.d.ts.map +0 -1
- package/dist/adapter/game-adapter.js +0 -10
- package/dist/adapter/host-context.d.ts +0 -71
- package/dist/adapter/host-context.d.ts.map +0 -1
- package/dist/adapter/host-context.js +0 -16
- package/dist/adapter/index.d.ts +0 -22
- package/dist/adapter/index.d.ts.map +0 -1
- package/dist/adapter/index.js +0 -15
- package/dist/adapter/ingest/game-contract.d.ts +0 -53
- package/dist/adapter/ingest/game-contract.d.ts.map +0 -1
- package/dist/adapter/ingest/game-contract.js +0 -30
- package/dist/adapter/ingest/overlay-applier.d.ts +0 -118
- package/dist/adapter/ingest/overlay-applier.d.ts.map +0 -1
- package/dist/adapter/ingest/overlay-applier.js +0 -132
- package/dist/adapter/ingest/overlay-apply.d.ts +0 -60
- package/dist/adapter/ingest/overlay-apply.d.ts.map +0 -1
- package/dist/adapter/ingest/overlay-apply.js +0 -101
- package/dist/adapter/ingest/overlay-file.d.ts +0 -79
- package/dist/adapter/ingest/overlay-file.d.ts.map +0 -1
- package/dist/adapter/ingest/overlay-file.js +0 -66
- package/dist/adapter/ingest/overlay-report.d.ts +0 -113
- package/dist/adapter/ingest/overlay-report.d.ts.map +0 -1
- package/dist/adapter/ingest/overlay-report.js +0 -103
- package/dist/adapter/ingest/scene-capture.d.ts +0 -97
- package/dist/adapter/ingest/scene-capture.d.ts.map +0 -1
- package/dist/adapter/ingest/scene-capture.js +0 -248
- package/dist/adapter/ingest/upstream-pin.d.ts +0 -47
- package/dist/adapter/ingest/upstream-pin.d.ts.map +0 -1
- package/dist/adapter/ingest/upstream-pin.js +0 -50
- package/dist/adapter/loop-gate-report.d.ts +0 -34
- package/dist/adapter/loop-gate-report.d.ts.map +0 -1
- package/dist/adapter/loop-gate-report.js +0 -37
- package/dist/adapter/rapier-physics-adapter.d.ts +0 -12
- package/dist/adapter/rapier-physics-adapter.d.ts.map +0 -1
- package/dist/adapter/rapier-physics-adapter.js +0 -46
- package/dist/adapter/system-adapter.d.ts +0 -206
- package/dist/adapter/system-adapter.d.ts.map +0 -1
- package/dist/adapter/system-adapter.js +0 -13
- package/dist/adapter/transform.d.ts +0 -18
- package/dist/adapter/transform.d.ts.map +0 -1
- package/dist/adapter/transform.js +0 -1
- package/dist/adapter/vgai-scene-game-adapter.d.ts +0 -108
- package/dist/adapter/vgai-scene-game-adapter.d.ts.map +0 -1
- package/dist/adapter/vgai-scene-game-adapter.js +0 -762
- package/dist/ai/navigation.d.ts +0 -64
- package/dist/ai/navigation.d.ts.map +0 -1
- package/dist/ai/navigation.js +0 -133
- package/dist/animation/anim-graph-types.d.ts +0 -25
- package/dist/animation/anim-graph-types.d.ts.map +0 -1
- package/dist/animation/anim-graph-types.js +0 -1
- package/dist/animation/animation-clock.d.ts +0 -213
- package/dist/animation/animation-clock.d.ts.map +0 -1
- package/dist/animation/animation-clock.js +0 -301
- package/dist/animation/blend-node.d.ts +0 -22
- package/dist/animation/blend-node.d.ts.map +0 -1
- package/dist/animation/blend-node.js +0 -97
- package/dist/animation/camera-ownership.d.ts +0 -250
- package/dist/animation/camera-ownership.d.ts.map +0 -1
- package/dist/animation/camera-ownership.js +0 -169
- package/dist/animation/cinematic-cues.d.ts +0 -200
- package/dist/animation/cinematic-cues.d.ts.map +0 -1
- package/dist/animation/cinematic-cues.js +0 -213
- package/dist/animation/clip-map.d.ts +0 -12
- package/dist/animation/clip-map.d.ts.map +0 -1
- package/dist/animation/clip-map.js +0 -37
- package/dist/animation/gsap-registration.d.ts +0 -119
- package/dist/animation/gsap-registration.d.ts.map +0 -1
- package/dist/animation/gsap-registration.js +0 -92
- package/dist/animation/theatre-clock-binding.d.ts +0 -89
- package/dist/animation/theatre-clock-binding.d.ts.map +0 -1
- package/dist/animation/theatre-clock-binding.js +0 -29
- package/dist/animation/theatre-director.d.ts +0 -242
- package/dist/animation/theatre-director.d.ts.map +0 -1
- package/dist/animation/theatre-director.js +0 -235
- package/dist/animation/theatre-object-binding.d.ts +0 -305
- package/dist/animation/theatre-object-binding.d.ts.map +0 -1
- package/dist/animation/theatre-object-binding.js +0 -351
- package/dist/animation/xstate-animation-binding.d.ts +0 -56
- package/dist/animation/xstate-animation-binding.d.ts.map +0 -1
- package/dist/animation/xstate-animation-binding.js +0 -331
- package/dist/animation/xstate-animation-meta.d.ts +0 -266
- package/dist/animation/xstate-animation-meta.d.ts.map +0 -1
- package/dist/animation/xstate-animation-meta.js +0 -252
- package/dist/assets.d.ts +0 -26
- package/dist/assets.d.ts.map +0 -1
- package/dist/assets.js +0 -55
- package/dist/audio/index.d.ts +0 -4
- package/dist/audio/index.d.ts.map +0 -1
- package/dist/audio/index.js +0 -24
- package/dist/audio/tone-clock-binding.d.ts +0 -75
- package/dist/audio/tone-clock-binding.d.ts.map +0 -1
- package/dist/audio/tone-clock-binding.js +0 -29
- package/dist/audio/tone-context.d.ts +0 -114
- package/dist/audio/tone-context.d.ts.map +0 -1
- package/dist/audio/tone-context.js +0 -39
- package/dist/audio/tone-offline-render.d.ts +0 -90
- package/dist/audio/tone-offline-render.d.ts.map +0 -1
- package/dist/audio/tone-offline-render.js +0 -56
- package/dist/audio/wav-encode.d.ts +0 -38
- package/dist/audio/wav-encode.d.ts.map +0 -1
- package/dist/audio/wav-encode.js +0 -97
- package/dist/character/cloth-sim.d.ts +0 -179
- package/dist/character/cloth-sim.d.ts.map +0 -1
- package/dist/character/cloth-sim.js +0 -334
- package/dist/character/spring-chain.d.ts +0 -135
- package/dist/character/spring-chain.d.ts.map +0 -1
- package/dist/character/spring-chain.js +0 -165
- package/dist/core/game-loop.d.ts +0 -42
- package/dist/core/game-loop.d.ts.map +0 -1
- package/dist/core/game-loop.js +0 -167
- package/dist/core/seeded-random.d.ts +0 -69
- package/dist/core/seeded-random.d.ts.map +0 -1
- package/dist/core/seeded-random.js +0 -121
- package/dist/core/system-runner.d.ts +0 -120
- package/dist/core/system-runner.d.ts.map +0 -1
- package/dist/core/system-runner.js +0 -297
- package/dist/core/types.d.ts +0 -92
- package/dist/core/types.d.ts.map +0 -1
- package/dist/core/types.js +0 -25
- package/dist/data/data-asset.d.ts +0 -101
- package/dist/data/data-asset.d.ts.map +0 -1
- package/dist/data/data-asset.js +0 -122
- package/dist/data/data-check-core.d.ts +0 -110
- package/dist/data/data-check-core.d.ts.map +0 -1
- package/dist/data/data-check-core.js +0 -178
- package/dist/data/data-ref.d.ts +0 -79
- package/dist/data/data-ref.d.ts.map +0 -1
- package/dist/data/data-ref.js +0 -130
- package/dist/data/vite-plugin-data.d.ts +0 -79
- package/dist/data/vite-plugin-data.d.ts.map +0 -1
- package/dist/data/vite-plugin-data.js +0 -217
- package/dist/dev/console-bridge.d.ts +0 -22
- package/dist/dev/console-bridge.d.ts.map +0 -1
- package/dist/dev/console-bridge.js +0 -71
- package/dist/dev/debug-draw.d.ts +0 -24
- package/dist/dev/debug-draw.d.ts.map +0 -1
- package/dist/dev/debug-draw.js +0 -73
- package/dist/dev/logger.d.ts +0 -30
- package/dist/dev/logger.d.ts.map +0 -1
- package/dist/dev/logger.js +0 -90
- package/dist/dev/performance-profiler.d.ts +0 -60
- package/dist/dev/performance-profiler.d.ts.map +0 -1
- package/dist/dev/performance-profiler.js +0 -181
- package/dist/dev/webgl-gpu-timer.d.ts +0 -8
- package/dist/dev/webgl-gpu-timer.d.ts.map +0 -1
- package/dist/dev/webgl-gpu-timer.js +0 -52
- package/dist/ecs/component-manager.d.ts +0 -205
- package/dist/ecs/component-manager.d.ts.map +0 -1
- package/dist/ecs/component-manager.js +0 -706
- package/dist/ecs/game-component.d.ts +0 -146
- package/dist/ecs/game-component.d.ts.map +0 -1
- package/dist/ecs/game-component.js +0 -141
- package/dist/ecs/hmr-swap-report.d.ts +0 -53
- package/dist/ecs/hmr-swap-report.d.ts.map +0 -1
- package/dist/ecs/hmr-swap-report.js +0 -55
- package/dist/humanoid/bake.operation.d.ts +0 -119
- package/dist/humanoid/bake.operation.d.ts.map +0 -1
- package/dist/humanoid/bake.operation.js +0 -228
- package/dist/humanoid/body.d.ts +0 -101
- package/dist/humanoid/body.d.ts.map +0 -1
- package/dist/humanoid/body.js +0 -530
- package/dist/humanoid/clips.d.ts +0 -62
- package/dist/humanoid/clips.d.ts.map +0 -1
- package/dist/humanoid/clips.js +0 -121
- package/dist/humanoid/compose.d.ts +0 -75
- package/dist/humanoid/compose.d.ts.map +0 -1
- package/dist/humanoid/compose.js +0 -176
- package/dist/humanoid/generate.d.ts +0 -92
- package/dist/humanoid/generate.d.ts.map +0 -1
- package/dist/humanoid/generate.js +0 -124
- package/dist/humanoid/index.d.ts +0 -24
- package/dist/humanoid/index.d.ts.map +0 -1
- package/dist/humanoid/index.js +0 -18
- package/dist/humanoid/schema.d.ts +0 -35
- package/dist/humanoid/schema.d.ts.map +0 -1
- package/dist/humanoid/schema.js +0 -87
- package/dist/humanoid/skeleton.d.ts +0 -103
- package/dist/humanoid/skeleton.d.ts.map +0 -1
- package/dist/humanoid/skeleton.js +0 -289
- package/dist/index.d.ts +0 -37
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -30
- package/dist/input/input-manager.d.ts +0 -945
- package/dist/input/input-manager.d.ts.map +0 -1
- package/dist/input/input-manager.js +0 -2207
- package/dist/input/input-types.d.ts +0 -174
- package/dist/input/input-types.d.ts.map +0 -1
- package/dist/input/input-types.js +0 -1
- package/dist/input/prompt-labels.d.ts +0 -21
- package/dist/input/prompt-labels.d.ts.map +0 -1
- package/dist/input/prompt-labels.js +0 -121
- package/dist/input/rebind-controller.d.ts +0 -59
- package/dist/input/rebind-controller.d.ts.map +0 -1
- package/dist/input/rebind-controller.js +0 -85
- package/dist/input/schema.d.ts +0 -16
- package/dist/input/schema.d.ts.map +0 -1
- package/dist/input/schema.js +0 -228
- package/dist/loader.d.ts +0 -43
- package/dist/loader.d.ts.map +0 -1
- package/dist/loader.js +0 -59
- package/dist/manifest/index.d.ts +0 -5
- package/dist/manifest/index.d.ts.map +0 -1
- package/dist/manifest/index.js +0 -8
- package/dist/manifest/load-file.d.ts +0 -4
- package/dist/manifest/load-file.d.ts.map +0 -1
- package/dist/manifest/load-file.js +0 -14
- package/dist/manifest/load.d.ts +0 -144
- package/dist/manifest/load.d.ts.map +0 -1
- package/dist/manifest/load.js +0 -273
- package/dist/manifest/schema.d.ts +0 -230
- package/dist/manifest/schema.d.ts.map +0 -1
- package/dist/manifest/schema.js +0 -394
- package/dist/physics/collision-system.d.ts +0 -41
- package/dist/physics/collision-system.d.ts.map +0 -1
- package/dist/physics/collision-system.js +0 -64
- package/dist/physics/physics-registry.d.ts +0 -45
- package/dist/physics/physics-registry.d.ts.map +0 -1
- package/dist/physics/physics-registry.js +0 -65
- package/dist/physics/transform-writer.d.ts +0 -16
- package/dist/physics/transform-writer.d.ts.map +0 -1
- package/dist/physics/transform-writer.js +0 -38
- package/dist/physics/trigger-dispatch.d.ts +0 -24
- package/dist/physics/trigger-dispatch.d.ts.map +0 -1
- package/dist/physics/trigger-dispatch.js +0 -80
- package/dist/react/game-state.d.ts +0 -156
- package/dist/react/game-state.d.ts.map +0 -1
- package/dist/react/game-state.js +0 -222
- package/dist/react/root-adapter.d.ts +0 -11
- package/dist/react/root-adapter.d.ts.map +0 -1
- package/dist/react/root-adapter.js +0 -41
- package/dist/react/unmanaged-root-detector.d.ts +0 -12
- package/dist/react/unmanaged-root-detector.d.ts.map +0 -1
- package/dist/react/unmanaged-root-detector.js +0 -45
- package/dist/react/use-data.d.ts +0 -60
- package/dist/react/use-data.d.ts.map +0 -1
- package/dist/react/use-data.js +0 -101
- package/dist/react/use-selection.d.ts +0 -75
- package/dist/react/use-selection.d.ts.map +0 -1
- package/dist/react/use-selection.js +0 -90
- package/dist/render/auto-batcher.d.ts +0 -34
- package/dist/render/auto-batcher.d.ts.map +0 -1
- package/dist/render/auto-batcher.js +0 -140
- package/dist/render/render-batch-system.d.ts +0 -33
- package/dist/render/render-batch-system.d.ts.map +0 -1
- package/dist/render/render-batch-system.js +0 -230
- package/dist/render/render-features.d.ts +0 -47
- package/dist/render/render-features.d.ts.map +0 -1
- package/dist/render/render-features.js +0 -105
- package/dist/render/render-settings.d.ts +0 -36
- package/dist/render/render-settings.d.ts.map +0 -1
- package/dist/render/render-settings.js +0 -51
- package/dist/runtime/create-runtime.d.ts +0 -249
- package/dist/runtime/create-runtime.d.ts.map +0 -1
- package/dist/runtime/create-runtime.js +0 -641
- package/dist/runtime/debug-bridge.d.ts +0 -257
- package/dist/runtime/debug-bridge.d.ts.map +0 -1
- package/dist/runtime/debug-bridge.js +0 -224
- package/dist/runtime/debug-registry.d.ts +0 -288
- package/dist/runtime/debug-registry.d.ts.map +0 -1
- package/dist/runtime/debug-registry.js +0 -513
- package/dist/runtime/frame-selector-cache.d.ts +0 -41
- package/dist/runtime/frame-selector-cache.d.ts.map +0 -1
- package/dist/runtime/frame-selector-cache.js +0 -65
- package/dist/runtime/game.d.ts +0 -496
- package/dist/runtime/game.d.ts.map +0 -1
- package/dist/runtime/game.js +0 -741
- package/dist/runtime/gameplay-rng-trap.d.ts +0 -48
- package/dist/runtime/gameplay-rng-trap.d.ts.map +0 -1
- package/dist/runtime/gameplay-rng-trap.js +0 -96
- package/dist/runtime/input-router.d.ts +0 -78
- package/dist/runtime/input-router.d.ts.map +0 -1
- package/dist/runtime/input-router.js +0 -171
- package/dist/runtime/mount-game.d.ts +0 -129
- package/dist/runtime/mount-game.d.ts.map +0 -1
- package/dist/runtime/mount-game.js +0 -152
- package/dist/runtime/mount-manifest.d.ts +0 -173
- package/dist/runtime/mount-manifest.d.ts.map +0 -1
- package/dist/runtime/mount-manifest.js +0 -297
- package/dist/runtime/render-audio-control.d.ts +0 -110
- package/dist/runtime/render-audio-control.d.ts.map +0 -1
- package/dist/runtime/render-audio-control.js +0 -111
- package/dist/runtime/render-control.d.ts +0 -291
- package/dist/runtime/render-control.d.ts.map +0 -1
- package/dist/runtime/render-control.js +0 -264
- package/dist/runtime/render-seed.d.ts +0 -57
- package/dist/runtime/render-seed.d.ts.map +0 -1
- package/dist/runtime/render-seed.js +0 -74
- package/dist/runtime/state-bridge.d.ts +0 -61
- package/dist/runtime/state-bridge.d.ts.map +0 -1
- package/dist/runtime/state-bridge.js +0 -63
- package/dist/runtime/types.d.ts +0 -253
- package/dist/runtime/types.d.ts.map +0 -1
- package/dist/runtime/types.js +0 -1
- package/dist/scene/asset-loaders.d.ts +0 -79
- package/dist/scene/asset-loaders.d.ts.map +0 -1
- package/dist/scene/asset-loaders.js +0 -141
- package/dist/scene/asset-paths.d.ts +0 -11
- package/dist/scene/asset-paths.d.ts.map +0 -1
- package/dist/scene/asset-paths.js +0 -108
- package/dist/scene/asset-ref-check.d.ts +0 -88
- package/dist/scene/asset-ref-check.d.ts.map +0 -1
- package/dist/scene/asset-ref-check.js +0 -214
- package/dist/scene/asset-registry.d.ts +0 -38
- package/dist/scene/asset-registry.d.ts.map +0 -1
- package/dist/scene/asset-registry.js +0 -66
- package/dist/scene/collider-dimensions.d.ts +0 -63
- package/dist/scene/collider-dimensions.d.ts.map +0 -1
- package/dist/scene/collider-dimensions.js +0 -98
- package/dist/scene/component-registry.d.ts +0 -22
- package/dist/scene/component-registry.d.ts.map +0 -1
- package/dist/scene/component-registry.js +0 -37
- package/dist/scene/defaults.d.ts +0 -252
- package/dist/scene/defaults.d.ts.map +0 -1
- package/dist/scene/defaults.js +0 -151
- package/dist/scene/geometries/index.d.ts +0 -8
- package/dist/scene/geometries/index.d.ts.map +0 -1
- package/dist/scene/geometries/index.js +0 -7
- package/dist/scene/geometries/terrain.d.ts +0 -2
- package/dist/scene/geometries/terrain.d.ts.map +0 -1
- package/dist/scene/geometries/terrain.js +0 -37
- package/dist/scene/geometry-registry.d.ts +0 -24
- package/dist/scene/geometry-registry.d.ts.map +0 -1
- package/dist/scene/geometry-registry.js +0 -20
- package/dist/scene/instance-registry.d.ts +0 -36
- package/dist/scene/instance-registry.d.ts.map +0 -1
- package/dist/scene/instance-registry.js +0 -55
- package/dist/scene/instancers/grid.d.ts +0 -2
- package/dist/scene/instancers/grid.d.ts.map +0 -1
- package/dist/scene/instancers/grid.js +0 -36
- package/dist/scene/instancers/index.d.ts +0 -8
- package/dist/scene/instancers/index.d.ts.map +0 -1
- package/dist/scene/instancers/index.js +0 -7
- package/dist/scene/light-camera-factory.d.ts +0 -23
- package/dist/scene/light-camera-factory.d.ts.map +0 -1
- package/dist/scene/light-camera-factory.js +0 -68
- package/dist/scene/material-factory.d.ts +0 -17
- package/dist/scene/material-factory.d.ts.map +0 -1
- package/dist/scene/material-factory.js +0 -197
- package/dist/scene/material-registry.d.ts +0 -40
- package/dist/scene/material-registry.d.ts.map +0 -1
- package/dist/scene/material-registry.js +0 -44
- package/dist/scene/materials/index.d.ts +0 -8
- package/dist/scene/materials/index.d.ts.map +0 -1
- package/dist/scene/materials/index.js +0 -7
- package/dist/scene/materials/water.d.ts +0 -2
- package/dist/scene/materials/water.d.ts.map +0 -1
- package/dist/scene/materials/water.js +0 -54
- package/dist/scene/parse.d.ts +0 -23
- package/dist/scene/parse.d.ts.map +0 -1
- package/dist/scene/parse.js +0 -179
- package/dist/scene/particles-factory.d.ts +0 -33
- package/dist/scene/particles-factory.d.ts.map +0 -1
- package/dist/scene/particles-factory.js +0 -282
- package/dist/scene/scene-apply.d.ts +0 -109
- package/dist/scene/scene-apply.d.ts.map +0 -1
- package/dist/scene/scene-apply.js +0 -370
- package/dist/scene/scene-diff-schema.d.ts +0 -285
- package/dist/scene/scene-diff-schema.d.ts.map +0 -1
- package/dist/scene/scene-diff-schema.js +0 -92
- package/dist/scene/scene-diff-types.d.ts +0 -40
- package/dist/scene/scene-diff-types.d.ts.map +0 -1
- package/dist/scene/scene-diff-types.js +0 -14
- package/dist/scene/scene-loader.d.ts +0 -167
- package/dist/scene/scene-loader.d.ts.map +0 -1
- package/dist/scene/scene-loader.js +0 -1211
- package/dist/scene/scene-query.d.ts +0 -11
- package/dist/scene/scene-query.d.ts.map +0 -1
- package/dist/scene/scene-query.js +0 -63
- package/dist/scene/scene-types.d.ts +0 -10
- package/dist/scene/scene-types.d.ts.map +0 -1
- package/dist/scene/scene-types.js +0 -8
- package/dist/scene/scene-version.d.ts +0 -26
- package/dist/scene/scene-version.d.ts.map +0 -1
- package/dist/scene/scene-version.js +0 -34
- package/dist/scene/schema/animation.d.ts +0 -8
- package/dist/scene/schema/animation.d.ts.map +0 -1
- package/dist/scene/schema/animation.js +0 -42
- package/dist/scene/schema/audio.d.ts +0 -13
- package/dist/scene/schema/audio.d.ts.map +0 -1
- package/dist/scene/schema/audio.js +0 -22
- package/dist/scene/schema/camera.d.ts +0 -28
- package/dist/scene/schema/camera.d.ts.map +0 -1
- package/dist/scene/schema/camera.js +0 -17
- package/dist/scene/schema/collider.d.ts +0 -40
- package/dist/scene/schema/collider.d.ts.map +0 -1
- package/dist/scene/schema/collider.js +0 -55
- package/dist/scene/schema/entity-ref.d.ts +0 -31
- package/dist/scene/schema/entity-ref.d.ts.map +0 -1
- package/dist/scene/schema/entity-ref.js +0 -61
- package/dist/scene/schema/entity.d.ts +0 -1036
- package/dist/scene/schema/entity.d.ts.map +0 -1
- package/dist/scene/schema/entity.js +0 -153
- package/dist/scene/schema/environment.d.ts +0 -425
- package/dist/scene/schema/environment.d.ts.map +0 -1
- package/dist/scene/schema/environment.js +0 -357
- package/dist/scene/schema/index.d.ts +0 -37
- package/dist/scene/schema/index.d.ts.map +0 -1
- package/dist/scene/schema/index.js +0 -19
- package/dist/scene/schema/instances.d.ts +0 -14
- package/dist/scene/schema/instances.d.ts.map +0 -1
- package/dist/scene/schema/instances.js +0 -28
- package/dist/scene/schema/joint.d.ts +0 -23
- package/dist/scene/schema/joint.d.ts.map +0 -1
- package/dist/scene/schema/joint.js +0 -23
- package/dist/scene/schema/light.d.ts +0 -38
- package/dist/scene/schema/light.d.ts.map +0 -1
- package/dist/scene/schema/light.js +0 -26
- package/dist/scene/schema/material.d.ts +0 -199
- package/dist/scene/schema/material.d.ts.map +0 -1
- package/dist/scene/schema/material.js +0 -103
- package/dist/scene/schema/mesh.d.ts +0 -48
- package/dist/scene/schema/mesh.d.ts.map +0 -1
- package/dist/scene/schema/mesh.js +0 -82
- package/dist/scene/schema/particles.d.ts +0 -2178
- package/dist/scene/schema/particles.d.ts.map +0 -1
- package/dist/scene/schema/particles.js +0 -321
- package/dist/scene/schema/physics.d.ts +0 -56
- package/dist/scene/schema/physics.d.ts.map +0 -1
- package/dist/scene/schema/physics.js +0 -37
- package/dist/scene/schema/scene-file.d.ts +0 -303
- package/dist/scene/schema/scene-file.d.ts.map +0 -1
- package/dist/scene/schema/scene-file.js +0 -256
- package/dist/scene/schema/shadow.d.ts +0 -28
- package/dist/scene/schema/shadow.d.ts.map +0 -1
- package/dist/scene/schema/shadow.js +0 -20
- package/dist/scene/schema/spline.d.ts +0 -25
- package/dist/scene/schema/spline.d.ts.map +0 -1
- package/dist/scene/schema/spline.js +0 -15
- package/dist/scene/schema/tuples.d.ts +0 -12
- package/dist/scene/schema/tuples.d.ts.map +0 -1
- package/dist/scene/schema/tuples.js +0 -14
- package/dist/scene/user-data.d.ts +0 -185
- package/dist/scene/user-data.d.ts.map +0 -1
- package/dist/scene/user-data.js +0 -144
- package/dist/setup/setup-audio.d.ts +0 -20
- package/dist/setup/setup-audio.d.ts.map +0 -1
- package/dist/setup/setup-audio.js +0 -41
- package/dist/setup/setup-particles.d.ts +0 -17
- package/dist/setup/setup-particles.d.ts.map +0 -1
- package/dist/setup/setup-particles.js +0 -16
- package/dist/setup/setup-physics.d.ts +0 -25
- package/dist/setup/setup-physics.d.ts.map +0 -1
- package/dist/setup/setup-physics.js +0 -51
- package/dist/setup/setup-renderer.d.ts +0 -69
- package/dist/setup/setup-renderer.d.ts.map +0 -1
- package/dist/setup/setup-renderer.js +0 -363
- package/dist/tools/define-tool.d.ts +0 -130
- package/dist/tools/define-tool.d.ts.map +0 -1
- package/dist/tools/define-tool.js +0 -96
- package/dist/world2d/authoring-2d.d.ts +0 -80
- package/dist/world2d/authoring-2d.d.ts.map +0 -1
- package/dist/world2d/authoring-2d.js +0 -195
- package/dist/world2d/capture-to-scene2d.d.ts +0 -5
- package/dist/world2d/capture-to-scene2d.d.ts.map +0 -1
- package/dist/world2d/capture-to-scene2d.js +0 -49
- package/dist/world2d/collision-2d.d.ts +0 -52
- package/dist/world2d/collision-2d.d.ts.map +0 -1
- package/dist/world2d/collision-2d.js +0 -70
- package/dist/world2d/components-2d.d.ts +0 -47
- package/dist/world2d/components-2d.d.ts.map +0 -1
- package/dist/world2d/components-2d.js +0 -77
- package/dist/world2d/index.d.ts +0 -34
- package/dist/world2d/index.d.ts.map +0 -1
- package/dist/world2d/index.js +0 -32
- package/dist/world2d/ingest-iframe-2d.d.ts +0 -82
- package/dist/world2d/ingest-iframe-2d.d.ts.map +0 -1
- package/dist/world2d/ingest-iframe-2d.js +0 -166
- package/dist/world2d/ingest2d.d.ts +0 -97
- package/dist/world2d/ingest2d.d.ts.map +0 -1
- package/dist/world2d/ingest2d.js +0 -40
- package/dist/world2d/physics2d-registry.d.ts +0 -24
- package/dist/world2d/physics2d-registry.d.ts.map +0 -1
- package/dist/world2d/physics2d-registry.js +0 -38
- package/dist/world2d/pixi-game-adapter.d.ts +0 -107
- package/dist/world2d/pixi-game-adapter.d.ts.map +0 -1
- package/dist/world2d/pixi-game-adapter.js +0 -210
- package/dist/world2d/pixi-surface.d.ts +0 -39
- package/dist/world2d/pixi-surface.d.ts.map +0 -1
- package/dist/world2d/pixi-surface.js +0 -47
- package/dist/world2d/scene-capture-2d.d.ts +0 -43
- package/dist/world2d/scene-capture-2d.d.ts.map +0 -1
- package/dist/world2d/scene-capture-2d.js +0 -92
- package/dist/world2d/scene2d-loader.d.ts +0 -27
- package/dist/world2d/scene2d-loader.d.ts.map +0 -1
- package/dist/world2d/scene2d-loader.js +0 -275
- package/dist/world2d/schema/entity2d.d.ts +0 -102
- package/dist/world2d/schema/entity2d.d.ts.map +0 -1
- package/dist/world2d/schema/entity2d.js +0 -119
- package/dist/world2d/schema/physics2d.d.ts +0 -46
- package/dist/world2d/schema/physics2d.d.ts.map +0 -1
- package/dist/world2d/schema/physics2d.js +0 -45
- package/dist/world2d/schema/sprite.d.ts +0 -42
- package/dist/world2d/schema/sprite.d.ts.map +0 -1
- package/dist/world2d/schema/sprite.js +0 -63
- package/dist/world2d/schema/tilemap.d.ts +0 -15
- package/dist/world2d/schema/tilemap.d.ts.map +0 -1
- package/dist/world2d/schema/tilemap.js +0 -19
- package/dist/world2d/schema/tuples2d.d.ts +0 -20
- package/dist/world2d/schema/tuples2d.d.ts.map +0 -1
- package/dist/world2d/schema/tuples2d.js +0 -19
- package/dist/world2d/system-adapters-2d.d.ts +0 -16
- package/dist/world2d/system-adapters-2d.d.ts.map +0 -1
- package/dist/world2d/system-adapters-2d.js +0 -37
- package/dist/world2d/transform-writer-2d.d.ts +0 -16
- package/dist/world2d/transform-writer-2d.d.ts.map +0 -1
- package/dist/world2d/transform-writer-2d.js +0 -22
- package/dist/world2d/types.d.ts +0 -59
- package/dist/world2d/types.d.ts.map +0 -1
- package/dist/world2d/types.js +0 -1
package/dist/core/game-loop.d.ts
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import type { GameLoopConfig, GameLoopLiveness } from './types';
|
|
2
|
-
/**
|
|
3
|
-
* Fixed-timestep game loop with accumulator pattern.
|
|
4
|
-
*
|
|
5
|
-
* Physics/logic run at a fixed rate (default 60 Hz) regardless of display
|
|
6
|
-
* frame rate. Rendering is deliberately fixed-rate too (decided — D1, see
|
|
7
|
-
* `docs/DECISIONS-PENDING.md`): `config.update(fixedDt)` runs once per
|
|
8
|
-
* consumed substep, and per the documented phase order (`PHASE_ORDER` in
|
|
9
|
-
* `core/types.ts`) the `render` phase executes as the last phase of that
|
|
10
|
-
* same call — there is no separate per-real-frame render step and no
|
|
11
|
-
* display-refresh interpolation. A frame whose accumulator produces zero
|
|
12
|
-
* substeps therefore calls `update` zero times and renders zero times; do
|
|
13
|
-
* not reintroduce a render call outside the substep loop below.
|
|
14
|
-
*/
|
|
15
|
-
export declare function createGameLoop(config: GameLoopConfig): {
|
|
16
|
-
start(): void;
|
|
17
|
-
stop(): void;
|
|
18
|
-
readonly isRunning: boolean;
|
|
19
|
-
/**
|
|
20
|
-
* Truthful liveness (issue #175 — see `GameLoopLiveness`'s doc comment
|
|
21
|
-
* in `core/types.ts` for the full contract). Unlike `isRunning` above,
|
|
22
|
-
* this DISTINGUISHES a hidden-tab pause from an actually-stopped loop:
|
|
23
|
-
* `hiddenPaused` is only ever set by `handleVisibilityChange` (T2.1's
|
|
24
|
-
* idle throttle) and cleared by `start()`/`stop()`/visibility-restore,
|
|
25
|
-
* so it can never be true at the same time `running` is true. An
|
|
26
|
-
* `externalDrive` loop never installs the visibility listener at all
|
|
27
|
-
* (see `start()` above), so `hiddenPaused` stays permanently `false` for
|
|
28
|
-
* it — it only ever reports `'running'` or `'stopped'`.
|
|
29
|
-
*/
|
|
30
|
-
readonly liveness: GameLoopLiveness;
|
|
31
|
-
timeScale: number;
|
|
32
|
-
/**
|
|
33
|
-
* The fixed substep timestep (seconds) this loop's accumulator consumes
|
|
34
|
-
* per `config.update()` call (`config.fixedTimestep ?? 1/60`) — read by
|
|
35
|
-
* `Game.runTicks` (D15, `runtime/game.ts`) so a synchronous fast-forward
|
|
36
|
-
* burst drives `game.runFrame` with the SAME `fixedDt` this loop's own
|
|
37
|
-
* rAF-driven accumulator would have used, without exposing (or
|
|
38
|
-
* `runTicks` needing) any other internal loop state.
|
|
39
|
-
*/
|
|
40
|
-
readonly fixedDt: number;
|
|
41
|
-
};
|
|
42
|
-
//# sourceMappingURL=game-loop.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"game-loop.d.ts","sourceRoot":"","sources":["../../src/core/game-loop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhE;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc;;;;IA4HjD;;;;;;;;;;OAUG;uBACa,gBAAgB;eAKX,MAAM;IAc3B;;;;;;;OAOG;;EAKN"}
|
package/dist/core/game-loop.js
DELETED
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Fixed-timestep game loop with accumulator pattern.
|
|
3
|
-
*
|
|
4
|
-
* Physics/logic run at a fixed rate (default 60 Hz) regardless of display
|
|
5
|
-
* frame rate. Rendering is deliberately fixed-rate too (decided — D1, see
|
|
6
|
-
* `docs/DECISIONS-PENDING.md`): `config.update(fixedDt)` runs once per
|
|
7
|
-
* consumed substep, and per the documented phase order (`PHASE_ORDER` in
|
|
8
|
-
* `core/types.ts`) the `render` phase executes as the last phase of that
|
|
9
|
-
* same call — there is no separate per-real-frame render step and no
|
|
10
|
-
* display-refresh interpolation. A frame whose accumulator produces zero
|
|
11
|
-
* substeps therefore calls `update` zero times and renders zero times; do
|
|
12
|
-
* not reintroduce a render call outside the substep loop below.
|
|
13
|
-
*/
|
|
14
|
-
export function createGameLoop(config) {
|
|
15
|
-
const fixedDt = config.fixedTimestep ?? 1 / 60;
|
|
16
|
-
const maxSubSteps = config.maxSubSteps ?? 8;
|
|
17
|
-
// Also the accumulator's hard ceiling (see the spiral-of-death guard below).
|
|
18
|
-
const maxAccumulator = fixedDt * maxSubSteps;
|
|
19
|
-
// I2 (render-control runtime mode, see `GameLoopConfig.externalDrive`'s
|
|
20
|
-
// doc comment): in this mode `start()` below deliberately skips both the
|
|
21
|
-
// `requestAnimationFrame` arm AND the `visibilitychange` listener install —
|
|
22
|
-
// no wall-clock timing source ever exists for this loop instance, so
|
|
23
|
-
// `config.update` can only ever be invoked by an external driver calling
|
|
24
|
-
// into the render-control seam, never by this file's own `frame()`.
|
|
25
|
-
const externalDrive = config.externalDrive ?? false;
|
|
26
|
-
let accumulator = 0;
|
|
27
|
-
let lastTime = 0;
|
|
28
|
-
let running = false;
|
|
29
|
-
let rafId = 0;
|
|
30
|
-
let timeScale = 1.0;
|
|
31
|
-
// Idle throttle (T2.1): a hidden tab stops the loop outright; becoming
|
|
32
|
-
// visible again restarts it with the accumulator clock resynced to "now" —
|
|
33
|
-
// deliberately no catch-up burst for the wall-clock time spent hidden.
|
|
34
|
-
let hiddenPaused = false;
|
|
35
|
-
let visibilityListenerAttached = false;
|
|
36
|
-
function handleVisibilityChange() {
|
|
37
|
-
if (typeof document === 'undefined')
|
|
38
|
-
return;
|
|
39
|
-
if (document.hidden) {
|
|
40
|
-
if (running) {
|
|
41
|
-
running = false;
|
|
42
|
-
cancelAnimationFrame(rafId);
|
|
43
|
-
hiddenPaused = true;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
else if (hiddenPaused) {
|
|
47
|
-
hiddenPaused = false;
|
|
48
|
-
running = true;
|
|
49
|
-
lastTime = performance.now();
|
|
50
|
-
accumulator = 0;
|
|
51
|
-
rafId = requestAnimationFrame(frame);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
function frame(currentTime) {
|
|
55
|
-
if (!running)
|
|
56
|
-
return;
|
|
57
|
-
rafId = requestAnimationFrame(frame);
|
|
58
|
-
// Convert to seconds
|
|
59
|
-
const rawDt = (currentTime - lastTime) / 1000;
|
|
60
|
-
lastTime = currentTime;
|
|
61
|
-
// Clamp large frame gaps (e.g. a slow frame) before scaling by timeScale.
|
|
62
|
-
const dt = Math.min(rawDt, maxAccumulator) * timeScale;
|
|
63
|
-
accumulator += dt;
|
|
64
|
-
// Spiral-of-death guard: bound the accumulator regardless of timeScale
|
|
65
|
-
// (up to the clamped max of 8) or frame-gap size. Time that can't
|
|
66
|
-
// possibly be caught up on is dropped, never carried forward.
|
|
67
|
-
if (accumulator > maxAccumulator)
|
|
68
|
-
accumulator = maxAccumulator;
|
|
69
|
-
// Run fixed timestep updates (this is also where rendering happens —
|
|
70
|
-
// see the module doc comment above).
|
|
71
|
-
let steps = 0;
|
|
72
|
-
while (accumulator >= fixedDt && steps < maxSubSteps) {
|
|
73
|
-
config.update(fixedDt);
|
|
74
|
-
accumulator -= fixedDt;
|
|
75
|
-
steps++;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
return {
|
|
79
|
-
start() {
|
|
80
|
-
if (running)
|
|
81
|
-
return;
|
|
82
|
-
running = true;
|
|
83
|
-
// A direct start() call can land while the loop is auto-hidden-paused
|
|
84
|
-
// (`hiddenPaused` true, `running` false, no rAF pending). Without this
|
|
85
|
-
// reset, a later visibilitychange-to-visible would see stale
|
|
86
|
-
// `hiddenPaused === true` and spawn a SECOND rAF chain on top of the
|
|
87
|
-
// one this call is about to start (doubled update()/render() overhead
|
|
88
|
-
// until the next stop() — no sim-speed effect, but wasted work).
|
|
89
|
-
hiddenPaused = false;
|
|
90
|
-
lastTime = performance.now();
|
|
91
|
-
accumulator = 0;
|
|
92
|
-
// External-drive mode (I2): never arm rAF and never install the
|
|
93
|
-
// visibilitychange auto-stop handler. `running` still flips `true`
|
|
94
|
-
// above (so `isRunning`/`stop()` behave normally for a caller that
|
|
95
|
-
// treats this loop as "started"), but nothing will ever call
|
|
96
|
-
// `frame()` — a headless/backgrounded capture page cannot have this
|
|
97
|
-
// loop silently killed by `document.hidden`, because there is no
|
|
98
|
-
// listener to fire in the first place.
|
|
99
|
-
if (externalDrive)
|
|
100
|
-
return;
|
|
101
|
-
// A play session can be started while the editor tab is ALREADY
|
|
102
|
-
// hidden. In that case no future visibilitychange-to-hidden event will
|
|
103
|
-
// arrive, and arming rAF would leave `running=true` forever while the
|
|
104
|
-
// browser executes zero callbacks. Classify and park the loop before
|
|
105
|
-
// arming it so status is truthful and visibility restore can resume it.
|
|
106
|
-
if (!visibilityListenerAttached && typeof document !== 'undefined') {
|
|
107
|
-
document.addEventListener('visibilitychange', handleVisibilityChange);
|
|
108
|
-
visibilityListenerAttached = true;
|
|
109
|
-
}
|
|
110
|
-
if (typeof document !== 'undefined' && document.hidden) {
|
|
111
|
-
running = false;
|
|
112
|
-
hiddenPaused = true;
|
|
113
|
-
return;
|
|
114
|
-
}
|
|
115
|
-
rafId = requestAnimationFrame(frame);
|
|
116
|
-
},
|
|
117
|
-
stop() {
|
|
118
|
-
running = false;
|
|
119
|
-
hiddenPaused = false;
|
|
120
|
-
cancelAnimationFrame(rafId);
|
|
121
|
-
if (visibilityListenerAttached && typeof document !== 'undefined') {
|
|
122
|
-
document.removeEventListener('visibilitychange', handleVisibilityChange);
|
|
123
|
-
visibilityListenerAttached = false;
|
|
124
|
-
}
|
|
125
|
-
},
|
|
126
|
-
get isRunning() {
|
|
127
|
-
return running;
|
|
128
|
-
},
|
|
129
|
-
/**
|
|
130
|
-
* Truthful liveness (issue #175 — see `GameLoopLiveness`'s doc comment
|
|
131
|
-
* in `core/types.ts` for the full contract). Unlike `isRunning` above,
|
|
132
|
-
* this DISTINGUISHES a hidden-tab pause from an actually-stopped loop:
|
|
133
|
-
* `hiddenPaused` is only ever set by `handleVisibilityChange` (T2.1's
|
|
134
|
-
* idle throttle) and cleared by `start()`/`stop()`/visibility-restore,
|
|
135
|
-
* so it can never be true at the same time `running` is true. An
|
|
136
|
-
* `externalDrive` loop never installs the visibility listener at all
|
|
137
|
-
* (see `start()` above), so `hiddenPaused` stays permanently `false` for
|
|
138
|
-
* it — it only ever reports `'running'` or `'stopped'`.
|
|
139
|
-
*/
|
|
140
|
-
get liveness() {
|
|
141
|
-
if (hiddenPaused)
|
|
142
|
-
return 'hidden-paused';
|
|
143
|
-
return running ? 'running' : 'stopped';
|
|
144
|
-
},
|
|
145
|
-
set timeScale(value) {
|
|
146
|
-
const clamped = Math.min(8, Math.max(0, value));
|
|
147
|
-
if (clamped !== value) {
|
|
148
|
-
console.warn(`[game-loop] timeScale ${value} is out of range [0, 8]; clamped to ${clamped}.`);
|
|
149
|
-
}
|
|
150
|
-
timeScale = clamped;
|
|
151
|
-
},
|
|
152
|
-
get timeScale() {
|
|
153
|
-
return timeScale;
|
|
154
|
-
},
|
|
155
|
-
/**
|
|
156
|
-
* The fixed substep timestep (seconds) this loop's accumulator consumes
|
|
157
|
-
* per `config.update()` call (`config.fixedTimestep ?? 1/60`) — read by
|
|
158
|
-
* `Game.runTicks` (D15, `runtime/game.ts`) so a synchronous fast-forward
|
|
159
|
-
* burst drives `game.runFrame` with the SAME `fixedDt` this loop's own
|
|
160
|
-
* rAF-driven accumulator would have used, without exposing (or
|
|
161
|
-
* `runTicks` needing) any other internal loop state.
|
|
162
|
-
*/
|
|
163
|
-
get fixedDt() {
|
|
164
|
-
return fixedDt;
|
|
165
|
-
},
|
|
166
|
-
};
|
|
167
|
-
}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* D15 — the seeded-random core (`docs/D15-DETERMINISM-DESIGN.md` §2.a,
|
|
3
|
-
* T-D15.1). `ctx.random` is a game-scoped PRNG with NAMED STREAMS: calling
|
|
4
|
-
* the object itself (`ctx.random()`) draws from the `'gameplay'` stream;
|
|
5
|
-
* `ctx.random.stream('vfx')` (or any other name) derives an INDEPENDENT
|
|
6
|
-
* generator, so a cosmetic/VFX draw can never perturb the gameplay draw
|
|
7
|
-
* order — the classic replay-drift trap option B ("one game-scoped PRNG
|
|
8
|
-
* only") would fall into (see the design doc's §2.a option table).
|
|
9
|
-
*
|
|
10
|
-
* Each stream is seeded from `fnv1a(name) ^ rootSeed` — deterministic given
|
|
11
|
-
* the root seed, independent of draw order across streams (drawing from
|
|
12
|
-
* `'vfx'` never advances `'gameplay'`'s generator, since they are two
|
|
13
|
-
* separate mulberry32 instances). `reseed(seed)` re-derives every stream
|
|
14
|
-
* that has EVER been asked for via `.stream(name)` (including the implicit
|
|
15
|
-
* `'gameplay'` stream `ctx.random()` itself draws from) — future draws only:
|
|
16
|
-
* numbers already returned before a `reseed()` call are not (and cannot be)
|
|
17
|
-
* un-returned; this matches `play.seed.set`'s documented semantics (T-D15.6).
|
|
18
|
-
*
|
|
19
|
-
* Deliberately reuses {@link createMulberry32} FROM `runtime/render-seed.ts`
|
|
20
|
-
* (the render/capture door's own generator) rather than duplicating the
|
|
21
|
-
* algorithm — `render-seed.ts` stays a zero-import module itself (this file
|
|
22
|
-
* imports FROM it, never the reverse), so this is a dependency-clean
|
|
23
|
-
* direction: the render/capture door and the gameplay determinism door share
|
|
24
|
-
* one PRNG implementation without either depending on the other's door
|
|
25
|
-
* logic (§2.a: "Kept as-is for the render/capture door only" — the two doors
|
|
26
|
-
* stay orthogonal; only the generator function itself is shared).
|
|
27
|
-
*/
|
|
28
|
-
/** The name `ctx.random()` (called with no `.stream(...)`) draws from. */
|
|
29
|
-
export declare const GAMEPLAY_STREAM = "gameplay";
|
|
30
|
-
/** The fixed fallback seed a `SeededRandom` boots with when no explicit seed
|
|
31
|
-
* is supplied (mirrors `render-seed.ts`'s own `DEFAULT_RENDER_SEED` in
|
|
32
|
-
* spirit — an arbitrary but fixed golden-ratio-derived constant, never
|
|
33
|
-
* wall-clock/`Math.random`-derived, so an UNDECLARED project's `ctx.random`
|
|
34
|
-
* is still perfectly reproducible on its own terms even though nothing in
|
|
35
|
-
* the manifest asked for that — it just isn't a documented CONTRACT until
|
|
36
|
-
* `determinism.seededRandom` is declared, per T4.1's "no dead field" rule). */
|
|
37
|
-
export declare const DEFAULT_SEEDED_RANDOM_SEED = 2654435769;
|
|
38
|
-
/**
|
|
39
|
-
* The `ctx.random` surface (`GameContext.random`, `runtime/types.ts`).
|
|
40
|
-
* Callable (draws from the `'gameplay'` stream), plus:
|
|
41
|
-
* - `stream(name)` — an independent named generator, `[0, 1)` floats, same
|
|
42
|
-
* call signature as `Math.random`/the bare `SeededRandom` call itself.
|
|
43
|
-
* - `reseed(seed)` — re-derive every stream ever requested so far (future
|
|
44
|
-
* draws only) from a NEW root seed.
|
|
45
|
-
* - `seed` — the CURRENT root seed (reflects the last `reseed()` call, if
|
|
46
|
-
* any) — a live getter, not a value snapshotted at construction.
|
|
47
|
-
*/
|
|
48
|
-
export interface SeededRandom {
|
|
49
|
-
(): number;
|
|
50
|
-
stream(name: string): () => number;
|
|
51
|
-
reseed(seed: number): void;
|
|
52
|
-
readonly seed: number;
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Construct a fresh, game-scoped seeded-random surface. `initialSeed` is
|
|
56
|
-
* coerced to an unsigned 32-bit integer the same way `render-seed.ts`'s
|
|
57
|
-
* `installDeterministicRandom` does (`>>> 0`), so any finite JS number is
|
|
58
|
-
* accepted.
|
|
59
|
-
*/
|
|
60
|
-
export declare function createSeededRandom(initialSeed: number): SeededRandom;
|
|
61
|
-
/** Called once by `createGame`, right after both the seeded-random surface
|
|
62
|
-
* and the Game shell object exist — mirrors `registerDebugRegistry`. */
|
|
63
|
-
export declare function registerSeededRandom(owner: object, random: SeededRandom): void;
|
|
64
|
-
/** The game-scoped `SeededRandom` backing every world's `ctx.random` — `null`
|
|
65
|
-
* for an owner built without one (there is always one for every real
|
|
66
|
-
* `createGame` call; `null` only for a hand-built `Game`-shaped stand-in a
|
|
67
|
-
* test constructs without going through `createGame`). */
|
|
68
|
-
export declare function getSeededRandom(owner: object): SeededRandom | null;
|
|
69
|
-
//# sourceMappingURL=seeded-random.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"seeded-random.d.ts","sourceRoot":"","sources":["../../src/core/seeded-random.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAIH,0EAA0E;AAC1E,eAAO,MAAM,eAAe,aAAa,CAAC;AAE1C;;;;;;gFAMgF;AAChF,eAAO,MAAM,0BAA0B,aAAa,CAAC;AAErD;;;;;;;;;GASG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,MAAM,CAAC;IACX,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,MAAM,CAAC;IACnC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAsBD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,CAgDpE;AAeD;yEACyE;AACzE,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAE9E;AAED;;;2DAG2D;AAC3D,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAElE"}
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* D15 — the seeded-random core (`docs/D15-DETERMINISM-DESIGN.md` §2.a,
|
|
3
|
-
* T-D15.1). `ctx.random` is a game-scoped PRNG with NAMED STREAMS: calling
|
|
4
|
-
* the object itself (`ctx.random()`) draws from the `'gameplay'` stream;
|
|
5
|
-
* `ctx.random.stream('vfx')` (or any other name) derives an INDEPENDENT
|
|
6
|
-
* generator, so a cosmetic/VFX draw can never perturb the gameplay draw
|
|
7
|
-
* order — the classic replay-drift trap option B ("one game-scoped PRNG
|
|
8
|
-
* only") would fall into (see the design doc's §2.a option table).
|
|
9
|
-
*
|
|
10
|
-
* Each stream is seeded from `fnv1a(name) ^ rootSeed` — deterministic given
|
|
11
|
-
* the root seed, independent of draw order across streams (drawing from
|
|
12
|
-
* `'vfx'` never advances `'gameplay'`'s generator, since they are two
|
|
13
|
-
* separate mulberry32 instances). `reseed(seed)` re-derives every stream
|
|
14
|
-
* that has EVER been asked for via `.stream(name)` (including the implicit
|
|
15
|
-
* `'gameplay'` stream `ctx.random()` itself draws from) — future draws only:
|
|
16
|
-
* numbers already returned before a `reseed()` call are not (and cannot be)
|
|
17
|
-
* un-returned; this matches `play.seed.set`'s documented semantics (T-D15.6).
|
|
18
|
-
*
|
|
19
|
-
* Deliberately reuses {@link createMulberry32} FROM `runtime/render-seed.ts`
|
|
20
|
-
* (the render/capture door's own generator) rather than duplicating the
|
|
21
|
-
* algorithm — `render-seed.ts` stays a zero-import module itself (this file
|
|
22
|
-
* imports FROM it, never the reverse), so this is a dependency-clean
|
|
23
|
-
* direction: the render/capture door and the gameplay determinism door share
|
|
24
|
-
* one PRNG implementation without either depending on the other's door
|
|
25
|
-
* logic (§2.a: "Kept as-is for the render/capture door only" — the two doors
|
|
26
|
-
* stay orthogonal; only the generator function itself is shared).
|
|
27
|
-
*/
|
|
28
|
-
import { createMulberry32 } from '../runtime/render-seed';
|
|
29
|
-
/** The name `ctx.random()` (called with no `.stream(...)`) draws from. */
|
|
30
|
-
export const GAMEPLAY_STREAM = 'gameplay';
|
|
31
|
-
/** The fixed fallback seed a `SeededRandom` boots with when no explicit seed
|
|
32
|
-
* is supplied (mirrors `render-seed.ts`'s own `DEFAULT_RENDER_SEED` in
|
|
33
|
-
* spirit — an arbitrary but fixed golden-ratio-derived constant, never
|
|
34
|
-
* wall-clock/`Math.random`-derived, so an UNDECLARED project's `ctx.random`
|
|
35
|
-
* is still perfectly reproducible on its own terms even though nothing in
|
|
36
|
-
* the manifest asked for that — it just isn't a documented CONTRACT until
|
|
37
|
-
* `determinism.seededRandom` is declared, per T4.1's "no dead field" rule). */
|
|
38
|
-
export const DEFAULT_SEEDED_RANDOM_SEED = 0x9e3779b9;
|
|
39
|
-
/** fnv1a-32, the standard non-cryptographic string hash — used only to mix a
|
|
40
|
-
* stream NAME into the root seed, never as a determinism primitive on its
|
|
41
|
-
* own (mulberry32 is still what actually produces the `[0,1)` sequence). */
|
|
42
|
-
function fnv1a32(str) {
|
|
43
|
-
let hash = 0x811c9dc5;
|
|
44
|
-
for (let i = 0; i < str.length; i++) {
|
|
45
|
-
hash ^= str.charCodeAt(i);
|
|
46
|
-
hash = Math.imul(hash, 0x01000193);
|
|
47
|
-
}
|
|
48
|
-
return hash >>> 0;
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Construct a fresh, game-scoped seeded-random surface. `initialSeed` is
|
|
52
|
-
* coerced to an unsigned 32-bit integer the same way `render-seed.ts`'s
|
|
53
|
-
* `installDeterministicRandom` does (`>>> 0`), so any finite JS number is
|
|
54
|
-
* accepted.
|
|
55
|
-
*/
|
|
56
|
-
export function createSeededRandom(initialSeed) {
|
|
57
|
-
let rootSeed = initialSeed >>> 0;
|
|
58
|
-
const streams = new Map();
|
|
59
|
-
function deriveStreamSeed(name) {
|
|
60
|
-
return (fnv1a32(name) ^ rootSeed) >>> 0;
|
|
61
|
-
}
|
|
62
|
-
function getBox(name) {
|
|
63
|
-
let box = streams.get(name);
|
|
64
|
-
if (!box) {
|
|
65
|
-
box = { gen: createMulberry32(deriveStreamSeed(name)) };
|
|
66
|
-
streams.set(name, box);
|
|
67
|
-
}
|
|
68
|
-
return box;
|
|
69
|
-
}
|
|
70
|
-
function streamFn(name) {
|
|
71
|
-
const box = getBox(name);
|
|
72
|
-
return () => box.gen();
|
|
73
|
-
}
|
|
74
|
-
const random = (() => getBox(GAMEPLAY_STREAM).gen());
|
|
75
|
-
Object.defineProperties(random, {
|
|
76
|
-
stream: { value: streamFn, enumerable: true },
|
|
77
|
-
reseed: {
|
|
78
|
-
value: (seed) => {
|
|
79
|
-
rootSeed = seed >>> 0;
|
|
80
|
-
// Re-derive every stream ANYONE has ever asked for (including the
|
|
81
|
-
// implicit 'gameplay' stream, once `random()` or
|
|
82
|
-
// `.stream('gameplay')` has been called at least once) — a handle a
|
|
83
|
-
// caller stashed before this call keeps its identity but now reads
|
|
84
|
-
// from the freshly-seeded generator on its NEXT call (future draws
|
|
85
|
-
// only, per the design doc's `play.seed.set` semantics).
|
|
86
|
-
for (const [name, box] of streams) {
|
|
87
|
-
box.gen = createMulberry32(deriveStreamSeed(name));
|
|
88
|
-
}
|
|
89
|
-
},
|
|
90
|
-
enumerable: true,
|
|
91
|
-
},
|
|
92
|
-
seed: {
|
|
93
|
-
get: () => rootSeed,
|
|
94
|
-
enumerable: true,
|
|
95
|
-
},
|
|
96
|
-
});
|
|
97
|
-
return random;
|
|
98
|
-
}
|
|
99
|
-
// ---------------------------------------------------------------------------
|
|
100
|
-
// Game-scoped registry — mirrors `runtime/debug-registry.ts`'s
|
|
101
|
-
// `registerDebugRegistry`/`getDebugRegistry` WeakMap pattern exactly, but
|
|
102
|
-
// keyed on a bare `object` (not `Game`) so this module never needs to import
|
|
103
|
-
// `runtime/game.ts` even as a type — `core/` stays independent of `runtime/`
|
|
104
|
-
// except for the one explicit, documented `render-seed.ts` reuse above.
|
|
105
|
-
// `createGame` (`runtime/game.ts`) is the one real registrant, passing itself
|
|
106
|
-
// (the `GameInternal` shell) as the key, exactly like it does for
|
|
107
|
-
// `registerDebugRegistry(gameInternal, debugRegistry)`.
|
|
108
|
-
// ---------------------------------------------------------------------------
|
|
109
|
-
const registryByOwner = new WeakMap();
|
|
110
|
-
/** Called once by `createGame`, right after both the seeded-random surface
|
|
111
|
-
* and the Game shell object exist — mirrors `registerDebugRegistry`. */
|
|
112
|
-
export function registerSeededRandom(owner, random) {
|
|
113
|
-
registryByOwner.set(owner, random);
|
|
114
|
-
}
|
|
115
|
-
/** The game-scoped `SeededRandom` backing every world's `ctx.random` — `null`
|
|
116
|
-
* for an owner built without one (there is always one for every real
|
|
117
|
-
* `createGame` call; `null` only for a hand-built `Game`-shaped stand-in a
|
|
118
|
-
* test constructs without going through `createGame`). */
|
|
119
|
-
export function getSeededRandom(owner) {
|
|
120
|
-
return registryByOwner.get(owner) ?? null;
|
|
121
|
-
}
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
import { type SystemDef, type SystemFn, type SystemOptions, type SystemPhaseName, type SystemRunObserver } from './types';
|
|
2
|
-
/**
|
|
3
|
-
* Ordered system execution by named phase.
|
|
4
|
-
*
|
|
5
|
-
* Systems are registered with a phase name. When `run(dt)` is called, all
|
|
6
|
-
* phases execute in `PHASE_ORDER` via `runPhase(phase, dt)`. Within a phase,
|
|
7
|
-
* `runPhase` executes three ordered buckets (GAME-ROOT-DESIGN.md §4, T7.1
|
|
8
|
-
* slice 2):
|
|
9
|
-
*
|
|
10
|
-
* 1. **engine** — everything `add()`/`register()`ed at or before the last
|
|
11
|
-
* `markEngineBoundary()` call, or EVERYTHING if no boundary has ever
|
|
12
|
-
* been marked (the world2d-silo case: it never calls
|
|
13
|
-
* `markEngineBoundary`, so its systems are all "engine").
|
|
14
|
-
* 2. **componentTick** — the single per-phase slot set via
|
|
15
|
-
* `setComponentTick(phase, fn)`. Component ticks are engine
|
|
16
|
-
* infrastructure: they always run after every engine system and before
|
|
17
|
-
* every game system in that phase, REGARDLESS of when
|
|
18
|
-
* `setComponentTick` was called relative to other `add()` calls. This
|
|
19
|
-
* is what makes "engine systems run before component ticks" a
|
|
20
|
-
* structural guarantee rather than a registration-order convention
|
|
21
|
-
* (see `component-manager.ts`, which registers its tick this way).
|
|
22
|
-
* 3. **game** — everything `add()`/`register()`ed AFTER the last
|
|
23
|
-
* `markEngineBoundary()` call.
|
|
24
|
-
*
|
|
25
|
-
* Within each bucket, systems run in registration order.
|
|
26
|
-
*/
|
|
27
|
-
export declare function createSystemRunner(observer?: SystemRunObserver, scope?: string): {
|
|
28
|
-
/**
|
|
29
|
-
* Register a bare system function in a specific phase.
|
|
30
|
-
* Systems within the same phase run in the order they were added.
|
|
31
|
-
*/
|
|
32
|
-
add(phase: SystemPhaseName, fn: SystemFn, options?: SystemOptions): void;
|
|
33
|
-
/**
|
|
34
|
-
* Remove a bare system function from a phase. Also drops it from the
|
|
35
|
-
* engine-membership set (if present) — the fix for the length-based
|
|
36
|
-
* bookkeeping bug: removing this has no effect on how any OTHER entry
|
|
37
|
-
* (before or after it) is classified, since classification is now
|
|
38
|
-
* per-function membership, not position.
|
|
39
|
-
*/
|
|
40
|
-
remove(phase: SystemPhaseName, fn: SystemFn): void;
|
|
41
|
-
/**
|
|
42
|
-
* Register a lifecycle system. Adds its update to the correct phase.
|
|
43
|
-
* Call runInit() after all systems are registered to invoke init hooks.
|
|
44
|
-
*/
|
|
45
|
-
register(system: SystemDef): void;
|
|
46
|
-
/**
|
|
47
|
-
* Unregister a lifecycle system. Removes its update and calls dispose.
|
|
48
|
-
*/
|
|
49
|
-
unregister(system: SystemDef): void;
|
|
50
|
-
/**
|
|
51
|
-
* Register the ONE component-tick function for a phase (T7.1 slice 2).
|
|
52
|
-
* Component ticks are engine infrastructure, not a bare `add()`ed
|
|
53
|
-
* system: they always execute after every engine-bucket system and
|
|
54
|
-
* before every game-bucket system in that phase (see `runPhase`),
|
|
55
|
-
* they are never touched by `removeAllNonEngine()`, and they do not
|
|
56
|
-
* count toward `markEngineBoundary()`'s bookkeeping. Throws if a tick
|
|
57
|
-
* is already set for this phase — at most one component manager may
|
|
58
|
-
* own a phase's tick slot.
|
|
59
|
-
*/
|
|
60
|
-
setComponentTick(phase: SystemPhaseName, fn: SystemFn): void;
|
|
61
|
-
/**
|
|
62
|
-
* Call init() on all registered lifecycle systems, in phase order.
|
|
63
|
-
* Call once after scene load, before the first game loop tick.
|
|
64
|
-
*/
|
|
65
|
-
runInit(): void;
|
|
66
|
-
/**
|
|
67
|
-
* Call dispose() on all registered lifecycle systems and remove them.
|
|
68
|
-
*/
|
|
69
|
-
runDispose(): void;
|
|
70
|
-
/**
|
|
71
|
-
* Run ONE phase's three ordered buckets — engine, componentTick, game
|
|
72
|
-
* (see the module doc comment). Each system call is isolated: a
|
|
73
|
-
* throwing system is loudly logged (never swallowed) but does not stop
|
|
74
|
-
* its siblings in the same bucket, a later bucket in this phase, or a
|
|
75
|
-
* later phase, from running this frame.
|
|
76
|
-
*
|
|
77
|
-
* Public — the Game root's frame executor (`runtime/game.ts`) calls this
|
|
78
|
-
* directly per (phase, world); `run(dt)` below is just a loop over it,
|
|
79
|
-
* preserved for the world2d silo and any direct caller.
|
|
80
|
-
*/
|
|
81
|
-
runPhase(phase: SystemPhaseName, dt: number): void;
|
|
82
|
-
/**
|
|
83
|
-
* Run all phases in order, via `runPhase`.
|
|
84
|
-
*/
|
|
85
|
-
run(dt: number): void;
|
|
86
|
-
/**
|
|
87
|
-
* Mark everything registered so far (via `add()`/`register()`, in every
|
|
88
|
-
* phase) as "engine" — infrastructure that must survive a warm restart.
|
|
89
|
-
* Call once, right after mount finishes wiring engine-level systems and
|
|
90
|
-
* BEFORE any game (`setup()`/scene load) registers its own. `hotReload`
|
|
91
|
-
* calls `removeAllNonEngine()` on every restart, which only ever removes
|
|
92
|
-
* what was added after this mark. Component-tick slots (`setComponentTick`)
|
|
93
|
-
* are unaffected — they are never part of this boundary.
|
|
94
|
-
*/
|
|
95
|
-
markEngineBoundary(): void;
|
|
96
|
-
/**
|
|
97
|
-
* Bulk-remove every system registered after the last `markEngineBoundary()`
|
|
98
|
-
* call — both bare `add()`ed functions and lifecycle `register()`ed systems
|
|
99
|
-
* (the latter get `dispose()`d, mirroring `unregister()`). A no-op if no
|
|
100
|
-
* boundary has been marked. Idempotent: calling it again with nothing new
|
|
101
|
-
* registered since is a safe no-op. Component-tick slots are NEVER cleared
|
|
102
|
-
* by this — they are engine infrastructure, not game content.
|
|
103
|
-
*
|
|
104
|
-
* This is what makes a warm restart (`hotReload`) safe to call N times
|
|
105
|
-
* without accumulating duplicate systems/listeners — each restart's
|
|
106
|
-
* outgoing game systems are fully removed before the new one registers its
|
|
107
|
-
* own, while the engine systems (input/physics/render/the ComponentManager
|
|
108
|
-
* tick/...) registered before the boundary are never touched.
|
|
109
|
-
*/
|
|
110
|
-
removeAllNonEngine(): void;
|
|
111
|
-
/**
|
|
112
|
-
* Total system-function count, optionally scoped to one phase. Includes
|
|
113
|
-
* component-tick slots (a set slot counts as 1 per phase it occupies).
|
|
114
|
-
* Test/introspection helper — used to assert a warm restart doesn't
|
|
115
|
-
* accumulate systems (see `removeAllNonEngine`).
|
|
116
|
-
*/
|
|
117
|
-
count(phase?: SystemPhaseName): number;
|
|
118
|
-
};
|
|
119
|
-
export type SystemRunner = ReturnType<typeof createSystemRunner>;
|
|
120
|
-
//# sourceMappingURL=system-runner.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"system-runner.d.ts","sourceRoot":"","sources":["../../src/core/system-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACvB,MAAM,SAAS,CAAC;AAEjB;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,CAAC,EAAE,iBAAiB,EAAE,KAAK,SAAU;IA+C5E;;;OAGG;eACQ,eAAe,MAAM,QAAQ,YAAY,aAAa;IASjE;;;;;;OAMG;kBACW,eAAe,MAAM,QAAQ;IAQ3C;;;OAGG;qBACc,SAAS;IAU1B;;OAEG;uBACgB,SAAS;IAa5B;;;;;;;;;OASG;4BACqB,eAAe,MAAM,QAAQ;IAarD;;;OAGG;;IAUH;;OAEG;;IAaH;;;;;;;;;;OAUG;oBACa,eAAe,MAAM,MAAM;IA+B3C;;OAEG;YACK,MAAM;IAMd;;;;;;;;OAQG;;IAUH;;;;;;;;;;;;;OAaG;;IAsBH;;;;;OAKG;kBACW,eAAe,GAAG,MAAM;EAYzC;AAED,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
|