@downdraft/engine 0.1.1 → 0.1.2-alpha.5
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/app/README.md +11 -0
- package/app/src/renderer/bootstrap.ts +295 -19
- package/app/src/renderer/game-module.ts +60 -12
- package/app/src/renderer/hooks.ts +9 -1
- package/app/src/renderer/hot-reload.ts +9 -9
- package/app/src/renderer/mcp-harness.ts +2 -2
- package/app/src/renderer/standard-automation-tools.ts +104 -3
- package/app/src/shared/feature-log.ts +2 -1
- package/app/src/shared/mcp-discovery.ts +8 -3
- package/app/src/shared/mcp-proxy.ts +2 -2
- package/asset-bake/README.md +22 -0
- package/core/README.md +25 -0
- package/core/src/animation/skeleton-animator.ts +23 -5
- package/core/src/assets/manager.ts +4 -4
- package/core/src/ecs/events.ts +1 -1
- package/core/src/ecs/schedule.ts +1 -1
- package/core/src/ecs/world.ts +1 -1
- package/core/src/index.ts +3 -4
- package/core/src/library/host.ts +27 -13
- package/core/src/library/library.ts +13 -5
- package/core/src/module/cross-thread.ts +6 -0
- package/core/src/module/diagnostics.ts +10 -6
- package/core/src/module/host.ts +65 -18
- package/core/src/module/index.ts +1 -0
- package/core/src/module/module.ts +11 -5
- package/core/src/module/renderer-module.ts +15 -0
- package/core/src/physics/safety.ts +1 -1
- package/core/src/platform/bun-preload.ts +7 -2
- package/core/src/platform/glob-polyfill.ts +17 -8
- package/core/src/platform/pkg-root.ts +27 -0
- package/core/src/platform/runtime.ts +29 -0
- package/core/src/plugin/discovery.ts +1 -1
- package/core/src/plugin/extension-loaders.ts +6 -4
- package/core/src/plugin/host.ts +13 -13
- package/core/src/plugin/loader-asset.ts +5 -5
- package/core/src/plugin/loader-quickjs.ts +1 -1
- package/core/src/plugin/loader-wasm.ts +3 -3
- package/core/src/plugin/loader-worker.ts +1 -1
- package/core/src/plugin/manifest.ts +8 -3
- package/core/src/plugin/workshop.ts +3 -3
- package/core/src/profiling/index.ts +1 -1
- package/core/src/profiling/profiling-sab.ts +19 -0
- package/core/src/profiling/warnings.ts +1 -1
- package/core/src/profiling/worker-prelude.ts +1 -1
- package/core/src/render/bindless/frame-bindings.ts +1 -1
- package/core/src/render/bindless/material-manager.ts +2 -2
- package/core/src/render/bindless/texture-registry.ts +2 -2
- package/core/src/render/device.ts +5 -5
- package/core/src/render/frame-graph.ts +2 -2
- package/core/src/render/game-renderer.ts +42 -18
- package/core/src/render/hot-reload.ts +3 -3
- package/core/src/render/renderer-module-host.ts +32 -12
- package/core/src/render/shader-validator.ts +7 -7
- package/core/src/render/surface.ts +1 -1
- package/core/src/sab/errors.ts +1 -1
- package/core/src/sab/sab-polyfill.ts +1 -1
- package/core/src/save/migration-registry.ts +4 -4
- package/core/src/save/schema.ts +1 -1
- package/core/src/scene/prefab.ts +1 -1
- package/core/src/scene/scene-manager.ts +2 -2
- package/core/src/scene/scene.ts +4 -4
- package/core/src/scene/streaming.ts +2 -2
- package/core/src/scripting/hot-reload.ts +2 -2
- package/core/src/sim/hot-reload-pipeline.ts +30 -6
- package/core/src/sim/sim-state-helper.ts +1 -1
- package/core/src/sim/transient-state-registry.ts +1 -1
- package/core/src/sim/worker-loop.ts +2 -2
- package/core/src/telemetry/gpu-profiler.ts +3 -3
- package/core/src/util/index.ts +1 -1
- package/core/src/util/logger.ts +36 -5
- package/core/src/version.ts +13 -0
- package/core/src/worker/base-worker-host.ts +87 -25
- package/core/src/worker/buffer-sync.ts +1 -1
- package/core/src/worker/crash-recovery.ts +2 -2
- package/core/src/worker/instrumented-worker-host.ts +3 -3
- package/core/src/worker/rpc.ts +62 -11
- package/core/src/worker/sim-worker-base.ts +3 -8
- package/core/src/worker/task-pool.ts +2 -2
- package/dist/.dd-manifest.json +4119 -0
- package/dist/app/src/index.js +9 -0
- package/dist/app/src/renderer/bootstrap.js +446 -0
- package/dist/app/src/renderer/downdraft-base.css +93 -0
- package/dist/app/src/renderer/feature-log.js +180 -0
- package/dist/app/src/renderer/game-module.js +562 -0
- package/dist/app/src/renderer/hooks.js +82 -0
- package/dist/app/src/renderer/hot-reload.js +158 -0
- package/dist/app/src/renderer/import-cache.js +77 -0
- package/dist/app/src/renderer/index.js +149 -0
- package/dist/app/src/renderer/mcp-harness.js +112 -0
- package/dist/app/src/renderer/save-store-factory.js +180 -0
- package/dist/app/src/renderer/sim-bridge.js +138 -0
- package/dist/app/src/renderer/standard-automation-tools.js +720 -0
- package/dist/app/src/shared/feature-log.js +54 -0
- package/dist/app/src/shared/gpu-info.js +74 -0
- package/dist/app/src/shared/import-cache-store.js +123 -0
- package/dist/app/src/shared/index.js +4 -0
- package/dist/app/src/shared/mcp-discovery.js +55 -0
- package/dist/app/src/shared/mcp-proxy.js +71 -0
- package/dist/app/src/shared/types.js +13 -0
- package/dist/asset-bake/src/bake-audio.js +103 -0
- package/dist/asset-bake/src/bake-gltf.js +141 -0
- package/dist/asset-bake/src/bake.js +63 -0
- package/dist/asset-bake/src/cache.js +147 -0
- package/dist/asset-bake/src/config.js +93 -0
- package/dist/asset-bake/src/index.js +25 -0
- package/dist/core/src/animation/animation-event.js +24 -0
- package/dist/core/src/animation/bone-mask.js +103 -0
- package/dist/core/src/animation/clip.js +210 -0
- package/dist/core/src/animation/index.js +13 -0
- package/dist/core/src/animation/mixamo.js +78 -0
- package/dist/core/src/animation/morph-target.js +37 -0
- package/dist/core/src/animation/player.js +621 -0
- package/dist/core/src/animation/retarget.js +101 -0
- package/dist/core/src/animation/skeleton-animator.js +1361 -0
- package/dist/core/src/animation/skeleton.js +166 -0
- package/dist/core/src/animation/state-machine.js +252 -0
- package/dist/core/src/assets/blob-store.js +14 -0
- package/dist/core/src/assets/cache.js +168 -0
- package/dist/core/src/assets/cubemap-converter.js +129 -0
- package/dist/core/src/assets/environment-manager.js +84 -0
- package/dist/core/src/assets/import-cache.js +36 -0
- package/dist/core/src/assets/import-settings.js +34 -0
- package/dist/core/src/assets/importer.js +78 -0
- package/dist/core/src/assets/index.js +29 -0
- package/dist/core/src/assets/irradiance-generator.js +179 -0
- package/dist/core/src/assets/loader-audio.js +70 -0
- package/dist/core/src/assets/loader-cubemap.js +141 -0
- package/dist/core/src/assets/loader-dds.js +185 -0
- package/dist/core/src/assets/loader-hdr.js +430 -0
- package/dist/core/src/assets/loader-mesh.js +47 -0
- package/dist/core/src/assets/loader-shader.js +61 -0
- package/dist/core/src/assets/loader-texture.js +264 -0
- package/dist/core/src/assets/lod.js +150 -0
- package/dist/core/src/assets/manager.js +401 -0
- package/dist/core/src/assets/manifest.js +57 -0
- package/dist/core/src/assets/material-bridge.js +160 -0
- package/dist/core/src/assets/model-importer.js +32 -0
- package/dist/core/src/assets/model-normalizer.js +213 -0
- package/dist/core/src/assets/model-to-gpu.js +44 -0
- package/dist/core/src/assets/model-to-mesh.js +171 -0
- package/dist/core/src/assets/prefilter-generator.js +220 -0
- package/dist/core/src/audio/engine.js +153 -0
- package/dist/core/src/audio/interface.js +8 -0
- package/dist/core/src/audio/listener.js +19 -0
- package/dist/core/src/audio/mixer.js +124 -0
- package/dist/core/src/audio/registry.js +43 -0
- package/dist/core/src/audio/sab.js +74 -0
- package/dist/core/src/audio/source.js +60 -0
- package/dist/core/src/change-detection/atomics.js +1 -0
- package/dist/core/src/change-detection/tracker.js +26 -0
- package/dist/core/src/debug-draw/lines.js +27 -0
- package/dist/core/src/debug-draw/points.js +9 -0
- package/dist/core/src/debug-draw/queue.js +77 -0
- package/dist/core/src/debug-draw/text.js +12 -0
- package/dist/core/src/ecs/archetype.js +271 -0
- package/dist/core/src/ecs/component.js +109 -0
- package/dist/core/src/ecs/entity.js +11 -0
- package/dist/core/src/ecs/events.js +73 -0
- package/dist/core/src/ecs/hierarchy.js +104 -0
- package/dist/core/src/ecs/hmr-swap-registry.js +15 -0
- package/dist/core/src/ecs/index.js +14 -0
- package/dist/core/src/ecs/query.js +110 -0
- package/dist/core/src/ecs/resource.js +3 -0
- package/dist/core/src/ecs/schedule.js +157 -0
- package/dist/core/src/ecs/system-params.js +45 -0
- package/dist/core/src/ecs/system.js +18 -0
- package/dist/core/src/ecs/world.js +292 -0
- package/dist/core/src/index.js +191 -0
- package/dist/core/src/input/context.js +69 -0
- package/dist/core/src/input/dom-handler.js +288 -0
- package/dist/core/src/input/local-player-manager.js +145 -0
- package/dist/core/src/input/mapping.js +36 -0
- package/dist/core/src/input/multi-sab-bridge.js +224 -0
- package/dist/core/src/input/multi-state.js +48 -0
- package/dist/core/src/input/sab-bridge.js +66 -0
- package/dist/core/src/input/state.js +108 -0
- package/dist/core/src/input/ui-router.js +76 -0
- package/dist/core/src/library/host.js +291 -0
- package/dist/core/src/library/index.js +1 -0
- package/dist/core/src/library/library.js +20 -0
- package/dist/core/src/material/compiler.js +73 -0
- package/dist/core/src/material/graph-bridge.js +119 -0
- package/dist/core/src/material/index.js +6 -0
- package/dist/core/src/material/library.js +414 -0
- package/dist/core/src/material/material.js +120 -0
- package/dist/core/src/material/variants.js +37 -0
- package/dist/core/src/math/mat4.js +198 -0
- package/dist/core/src/math/perlin-noise-2d.js +66 -0
- package/dist/core/src/math/perlin-noise-3d.js +76 -0
- package/dist/core/src/math/quat.js +29 -0
- package/dist/core/src/math/rng.js +25 -0
- package/dist/core/src/math/trig.js +42 -0
- package/dist/core/src/math/value-noise.js +49 -0
- package/dist/core/src/mesh/builder.js +137 -0
- package/dist/core/src/mesh/csg.js +250 -0
- package/dist/core/src/mesh/greased-line.js +102 -0
- package/dist/core/src/mesh/mesh.js +6 -0
- package/dist/core/src/mesh/parametric.js +392 -0
- package/dist/core/src/mesh/skinning.js +30 -0
- package/dist/core/src/mesh/vertex-layout.js +65 -0
- package/dist/core/src/module/cross-thread.js +126 -0
- package/dist/core/src/module/diagnostics.js +99 -0
- package/dist/core/src/module/host.js +449 -0
- package/dist/core/src/module/index.js +6 -0
- package/dist/core/src/module/module.js +1 -0
- package/dist/core/src/module/registry.js +83 -0
- package/dist/core/src/module/renderer-module.js +13 -0
- package/dist/core/src/module/ts-loader.js +20 -0
- package/dist/core/src/particles/compute-pass.js +329 -0
- package/dist/core/src/particles/emitter.js +113 -0
- package/dist/core/src/particles/index.js +7 -0
- package/dist/core/src/particles/particle-data.js +33 -0
- package/dist/core/src/particles/render-pass.js +338 -0
- package/dist/core/src/particles/simulator.js +224 -0
- package/dist/core/src/particles/system.js +157 -0
- package/dist/core/src/physics/body.js +25 -0
- package/dist/core/src/physics/ccd-heuristic.js +46 -0
- package/dist/core/src/physics/character.js +184 -0
- package/dist/core/src/physics/collider.js +36 -0
- package/dist/core/src/physics/collision-system.js +62 -0
- package/dist/core/src/physics/events.js +74 -0
- package/dist/core/src/physics/index.js +24 -0
- package/dist/core/src/physics/interface.js +14 -0
- package/dist/core/src/physics/interpolation-buffer.js +182 -0
- package/dist/core/src/physics/lifecycle.js +66 -0
- package/dist/core/src/physics/load-shedder.js +155 -0
- package/dist/core/src/physics/physics-accumulator.js +94 -0
- package/dist/core/src/physics/physics-system.js +142 -0
- package/dist/core/src/physics/ragdoll-presets.js +248 -0
- package/dist/core/src/physics/ragdoll-system.js +193 -0
- package/dist/core/src/physics/ragdoll.js +117 -0
- package/dist/core/src/physics/raycast.js +97 -0
- package/dist/core/src/physics/realm-manager.js +431 -0
- package/dist/core/src/physics/realm-worker-pool.js +181 -0
- package/dist/core/src/physics/realm-worker.js +91 -0
- package/dist/core/src/physics/realm.js +137 -0
- package/dist/core/src/physics/registry.js +43 -0
- package/dist/core/src/physics/safety.js +211 -0
- package/dist/core/src/physics/snapshot-manager.js +118 -0
- package/dist/core/src/physics/worker-protocol.js +1 -0
- package/dist/core/src/platform/bun-preload.js +175 -0
- package/dist/core/src/platform/css-stub.js +4 -0
- package/dist/core/src/platform/glob-polyfill.js +137 -0
- package/dist/core/src/platform/hidpi.js +52 -0
- package/dist/core/src/platform/pkg-root.js +27 -0
- package/dist/core/src/platform/render-surface.js +15 -0
- package/dist/core/src/platform/rpc.js +82 -0
- package/dist/core/src/platform/runtime.js +93 -0
- package/dist/core/src/plugin/context.js +144 -0
- package/dist/core/src/plugin/diagnostics.js +20 -0
- package/dist/core/src/plugin/discovery.js +124 -0
- package/dist/core/src/plugin/extension-loaders.js +111 -0
- package/dist/core/src/plugin/host.js +542 -0
- package/dist/core/src/plugin/index.js +19 -0
- package/dist/core/src/plugin/loader-asset.js +105 -0
- package/dist/core/src/plugin/loader-quickjs.js +67 -0
- package/dist/core/src/plugin/loader-wasm.js +385 -0
- package/dist/core/src/plugin/loader-worker.js +228 -0
- package/dist/core/src/plugin/manifest.js +424 -0
- package/dist/core/src/plugin/material-registry.js +44 -0
- package/dist/core/src/plugin/mcp-tools.js +147 -0
- package/dist/core/src/plugin/permissions.js +152 -0
- package/dist/core/src/plugin/quickjs-bridge.js +219 -0
- package/dist/core/src/plugin/registry.js +92 -0
- package/dist/core/src/plugin/sandbox-shim.js +79 -0
- package/dist/core/src/plugin/sandbox-worker.js +194 -0
- package/dist/core/src/plugin/wasm-abi.js +62 -0
- package/dist/core/src/plugin/wasm-worker.js +234 -0
- package/dist/core/src/plugin/workshop.js +131 -0
- package/dist/core/src/profiling/event-loop.js +164 -0
- package/dist/core/src/profiling/index.js +23 -0
- package/dist/core/src/profiling/iops/idb-patch.js +211 -0
- package/dist/core/src/profiling/iops/opfs-patch.js +206 -0
- package/dist/core/src/profiling/profiling-sab.js +632 -0
- package/dist/core/src/profiling/task-latency.js +118 -0
- package/dist/core/src/profiling/thread-metrics.js +103 -0
- package/dist/core/src/profiling/trace-event-writer.js +165 -0
- package/dist/core/src/profiling/warnings.js +304 -0
- package/dist/core/src/profiling/worker-prelude.js +281 -0
- package/dist/core/src/render/bind-group.js +33 -0
- package/dist/core/src/render/bindless/bindless-struct.js +39 -0
- package/dist/core/src/render/bindless/bindless.wgsl.js +163 -0
- package/dist/core/src/render/bindless/frame-bindings.js +142 -0
- package/dist/core/src/render/bindless/index.js +6 -0
- package/dist/core/src/render/bindless/material-manager.js +182 -0
- package/dist/core/src/render/bindless/texture-registry.js +498 -0
- package/dist/core/src/render/buffer.js +74 -0
- package/dist/core/src/render/camera-2d.js +151 -0
- package/dist/core/src/render/camera-controller.js +370 -0
- package/dist/core/src/render/camera.js +332 -0
- package/dist/core/src/render/canvas-resize-watcher.js +36 -0
- package/dist/core/src/render/compute-kernel.js +130 -0
- package/dist/core/src/render/constants.js +2 -0
- package/dist/core/src/render/device.js +91 -0
- package/dist/core/src/render/frame-graph.js +594 -0
- package/dist/core/src/render/frustum.js +152 -0
- package/dist/core/src/render/fullscreen-vs.js +24 -0
- package/dist/core/src/render/g-buffer.js +156 -0
- package/dist/core/src/render/game-renderer.js +1165 -0
- package/dist/core/src/render/gpu-driven/cull-pass.js +352 -0
- package/dist/core/src/render/gpu-driven/hzb.js +183 -0
- package/dist/core/src/render/gpu-driven/index.js +6 -0
- package/dist/core/src/render/gpu-driven/indirect-draw-pass.js +300 -0
- package/dist/core/src/render/gpu-driven/instance-buffer.js +150 -0
- package/dist/core/src/render/gpu-driven/mesh-table.js +130 -0
- package/dist/core/src/render/gpu-driven/passes/hzb-build-pass.js +39 -0
- package/dist/core/src/render/gpu-utils.js +72 -0
- package/dist/core/src/render/hdr.js +69 -0
- package/dist/core/src/render/hot-reload.js +236 -0
- package/dist/core/src/render/ibl-bind-group.js +232 -0
- package/dist/core/src/render/ibl.js +148 -0
- package/dist/core/src/render/index.js +86 -0
- package/dist/core/src/render/input-manager.js +224 -0
- package/dist/core/src/render/lighting/area-light.js +142 -0
- package/dist/core/src/render/lighting/cluster-grid.js +255 -0
- package/dist/core/src/render/lighting/cluster-types.js +87 -0
- package/dist/core/src/render/lighting/ies-parser.js +111 -0
- package/dist/core/src/render/lighting.js +300 -0
- package/dist/core/src/render/material-types/depth.wgsl +44 -0
- package/dist/core/src/render/material-types/line.wgsl +50 -0
- package/dist/core/src/render/material-types/matcap.wgsl +51 -0
- package/dist/core/src/render/material-types/normal.wgsl +41 -0
- package/dist/core/src/render/material-types/physical.wgsl +152 -0
- package/dist/core/src/render/material-types/sprite.wgsl +46 -0
- package/dist/core/src/render/material-types/sss.wgsl +79 -0
- package/dist/core/src/render/material-types/toon.wgsl +79 -0
- package/dist/core/src/render/passes/README.md +121 -0
- package/dist/core/src/render/passes/atmosphere.js +107 -0
- package/dist/core/src/render/passes/cluster-lighting-pass.js +441 -0
- package/dist/core/src/render/passes/csm.js +338 -0
- package/dist/core/src/render/passes/cubemap-capture.js +93 -0
- package/dist/core/src/render/passes/debug-viz.js +248 -0
- package/dist/core/src/render/passes/debug.js +500 -0
- package/dist/core/src/render/passes/decal-mesh.js +86 -0
- package/dist/core/src/render/passes/decal-pass.js +344 -0
- package/dist/core/src/render/passes/deferred-lighting.js +406 -0
- package/dist/core/src/render/passes/depth-prepass.js +148 -0
- package/dist/core/src/render/passes/dome-360.js +68 -0
- package/dist/core/src/render/passes/fluid-render.js +116 -0
- package/dist/core/src/render/passes/gi-types.js +78 -0
- package/dist/core/src/render/passes/graph-compute.js +251 -0
- package/dist/core/src/render/passes/greased-line-pass.js +218 -0
- package/dist/core/src/render/passes/morph-target.js +35 -0
- package/dist/core/src/render/passes/opaque.js +966 -0
- package/dist/core/src/render/passes/point-light-shadow.js +221 -0
- package/dist/core/src/render/passes/procedural-texture.js +142 -0
- package/dist/core/src/render/passes/reflection-probe.js +100 -0
- package/dist/core/src/render/passes/rsm-pass.js +228 -0
- package/dist/core/src/render/passes/sdf-text.js +114 -0
- package/dist/core/src/render/passes/shadow-map.js +121 -0
- package/dist/core/src/render/passes/shadow.js +191 -0
- package/dist/core/src/render/passes/skinning-vs.js +102 -0
- package/dist/core/src/render/passes/skinning.js +282 -0
- package/dist/core/src/render/passes/sky-dome.js +380 -0
- package/dist/core/src/render/passes/skybox.js +146 -0
- package/dist/core/src/render/passes/spot-light-shadow.js +223 -0
- package/dist/core/src/render/passes/terrain.js +303 -0
- package/dist/core/src/render/passes/transparent.js +323 -0
- package/dist/core/src/render/passes/underwater-fog.js +173 -0
- package/dist/core/src/render/passes/video-texture.js +58 -0
- package/dist/core/src/render/passes/volumetric-pass.js +278 -0
- package/dist/core/src/render/passes/volumetric-types.js +96 -0
- package/dist/core/src/render/passes/water.js +697 -0
- package/dist/core/src/render/pbr.js +257 -0
- package/dist/core/src/render/pipeline.js +49 -0
- package/dist/core/src/render/render-pass.js +13 -0
- package/dist/core/src/render/renderer-input-bus.js +176 -0
- package/dist/core/src/render/renderer-module-host.js +539 -0
- package/dist/core/src/render/resource-tracker.js +59 -0
- package/dist/core/src/render/sab-canvas-overlay.js +83 -0
- package/dist/core/src/render/shader-validator.js +172 -0
- package/dist/core/src/render/shaders/debug/debug-line.wgsl +27 -0
- package/dist/core/src/render/shaders/debug/debug-point.wgsl +30 -0
- package/dist/core/src/render/shaders/debug/debug-text.wgsl +42 -0
- package/dist/core/src/render/shaders/debug-viz/aabb.wgsl +20 -0
- package/dist/core/src/render/shaders/debug-viz/depth.wgsl +29 -0
- package/dist/core/src/render/shaders/debug-viz/lod.wgsl +38 -0
- package/dist/core/src/render/shaders/debug-viz/normals.wgsl +30 -0
- package/dist/core/src/render/shaders/debug-viz/overdraw.wgsl +21 -0
- package/dist/core/src/render/shaders/debug-viz/tangents.wgsl +29 -0
- package/dist/core/src/render/shaders/debug-viz/wireframe.wgsl +33 -0
- package/dist/core/src/render/shaders/shadow-chunks.js +133 -0
- package/dist/core/src/render/skybox.js +123 -0
- package/dist/core/src/render/splitscreen.js +60 -0
- package/dist/core/src/render/surface.js +63 -0
- package/dist/core/src/render/tonemap.js +171 -0
- package/dist/core/src/render/tracked-render-pass.js +115 -0
- package/dist/core/src/render/viewport.js +81 -0
- package/dist/core/src/render/wgsl-hmr.js +66 -0
- package/dist/core/src/sab/core-input-channel.js +22 -0
- package/dist/core/src/sab/define.js +127 -0
- package/dist/core/src/sab/errors.js +60 -0
- package/dist/core/src/sab/game-input.js +299 -0
- package/dist/core/src/sab/gamepad-devices.js +205 -0
- package/dist/core/src/sab/grid-buffer.js +91 -0
- package/dist/core/src/sab/input.js +38 -0
- package/dist/core/src/sab/layout.js +160 -0
- package/dist/core/src/sab/multi-input-channel.js +39 -0
- package/dist/core/src/sab/record-buffer.js +130 -0
- package/dist/core/src/sab/sab-polyfill.js +47 -0
- package/dist/core/src/sab/sim-channel.js +397 -0
- package/dist/core/src/sab/slot-buffer.js +140 -0
- package/dist/core/src/sab/types.js +1 -0
- package/dist/core/src/safety/bounds.js +71 -0
- package/dist/core/src/safety/json.js +70 -0
- package/dist/core/src/safety/path.js +151 -0
- package/dist/core/src/save/binary-format.js +95 -0
- package/dist/core/src/save/game-save-system.js +101 -0
- package/dist/core/src/save/grid-save-system.js +102 -0
- package/dist/core/src/save/migrate.js +35 -0
- package/dist/core/src/save/migration-registry.js +66 -0
- package/dist/core/src/save/persist-types.js +4 -0
- package/dist/core/src/save/schema.js +36 -0
- package/dist/core/src/save/serializer.js +139 -0
- package/dist/core/src/scene/builder.js +31 -0
- package/dist/core/src/scene/camera.js +118 -0
- package/dist/core/src/scene/checkpoint.js +84 -0
- package/dist/core/src/scene/game-loop.js +155 -0
- package/dist/core/src/scene/index.js +14 -0
- package/dist/core/src/scene/layer.js +7 -0
- package/dist/core/src/scene/prefab.js +97 -0
- package/dist/core/src/scene/scene-manager.js +141 -0
- package/dist/core/src/scene/scene.js +147 -0
- package/dist/core/src/scene/sky.js +179 -0
- package/dist/core/src/scene/spatial-grid.js +140 -0
- package/dist/core/src/scene/streaming.js +247 -0
- package/dist/core/src/scene/vegetation.js +107 -0
- package/dist/core/src/scene/world.js +66 -0
- package/dist/core/src/scripting/binding.js +85 -0
- package/dist/core/src/scripting/hot-reload.js +123 -0
- package/dist/core/src/scripting/script.js +68 -0
- package/dist/core/src/sim/hot-reload-pipeline.js +65 -0
- package/dist/core/src/sim/sim-state-helper.js +40 -0
- package/dist/core/src/sim/transient-state-registry.js +63 -0
- package/dist/core/src/sim/types.js +4 -0
- package/dist/core/src/sim/worker-loop.js +168 -0
- package/dist/core/src/stores/game-store.js +81 -0
- package/dist/core/src/stores/hot-reload-store.js +19 -0
- package/dist/core/src/telemetry/collector.js +303 -0
- package/dist/core/src/telemetry/gc-controller.js +365 -0
- package/dist/core/src/telemetry/gc-profiler.js +82 -0
- package/dist/core/src/telemetry/gc-tracker.js +63 -0
- package/dist/core/src/telemetry/gpu-profiler.js +554 -0
- package/dist/core/src/telemetry/gpu-resource-tracker.js +234 -0
- package/dist/core/src/telemetry/gpu-timer-pool.js +223 -0
- package/dist/core/src/telemetry/gpu-timer.js +117 -0
- package/dist/core/src/telemetry/gpu-timestamp-gate.js +22 -0
- package/dist/core/src/telemetry/reporter.js +56 -0
- package/dist/core/src/types/engine-types.js +21 -0
- package/dist/core/src/ui-font-scale.js +111 -0
- package/dist/core/src/util/broad-phase-grid.js +77 -0
- package/dist/core/src/util/feature-log.js +176 -0
- package/dist/core/src/util/index.js +4 -0
- package/dist/core/src/util/logger.js +596 -0
- package/dist/core/src/version.js +11 -0
- package/dist/core/src/webgpu-destroy-augmentation.d.ts +25 -0
- package/dist/core/src/worker/base-worker-host.js +212 -0
- package/dist/core/src/worker/buffer-sync.js +454 -0
- package/dist/core/src/worker/crash-recovery.js +153 -0
- package/dist/core/src/worker/entity-sim-worker-host.js +128 -0
- package/dist/core/src/worker/instrumented-worker-host.js +139 -0
- package/dist/core/src/worker/rpc.js +244 -0
- package/dist/core/src/worker/sim-worker-base.js +558 -0
- package/dist/core/src/worker/sim-worker-host.js +271 -0
- package/dist/core/src/worker/task-pool.js +205 -0
- package/dist/core/src/worker/task-worker.js +77 -0
- package/dist/libraries/asset-browser/src/index.js +10 -0
- package/dist/libraries/asset-browser/src/software-thumbnails.js +940 -0
- package/dist/libraries/audio-kira/src/backend.js +405 -0
- package/dist/libraries/audio-kira/src/index.js +4 -0
- package/dist/libraries/audio-kira/src/library.js +54 -0
- package/dist/libraries/blitz-ui/src/index.js +13 -0
- package/dist/libraries/blitz-ui/src/native-module.js +162 -0
- package/dist/libraries/blitz-ui/src/native-osr-ffi.js +409 -0
- package/dist/libraries/blitz-ui/src/router.js +82 -0
- package/dist/libraries/blitz-ui/src/shaders/ui-blit.wgsl.js +32 -0
- package/dist/libraries/blitz-ui/src/ui-blit-pass.js +108 -0
- package/dist/libraries/character/src/character-animator.js +323 -0
- package/dist/libraries/character/src/customization.js +464 -0
- package/dist/libraries/character/src/index.js +19 -0
- package/dist/libraries/character/src/inspectable.js +77 -0
- package/dist/libraries/character/src/loader.js +336 -0
- package/dist/libraries/character/src/locomotion.js +84 -0
- package/dist/libraries/character/src/preview.js +280 -0
- package/dist/libraries/devtools/src/backend.js +449 -0
- package/dist/libraries/devtools/src/cdp-bridge.js +293 -0
- package/dist/libraries/devtools/src/collectors.js +318 -0
- package/dist/libraries/devtools/src/index.js +31 -0
- package/dist/libraries/devtools/src/native-providers.js +749 -0
- package/dist/libraries/devtools/src/snapshot.js +35 -0
- package/dist/libraries/devtools/src/verify.js +139 -0
- package/dist/libraries/devtools/src/web/browser.js +94 -0
- package/dist/libraries/devtools/src/web/host.js +183 -0
- package/dist/libraries/devtools/src/web/mirror.js +26 -0
- package/dist/libraries/devtools/src/web/server.js +187 -0
- package/dist/libraries/entities/src/index.js +3 -0
- package/dist/libraries/entities/src/library.js +46 -0
- package/dist/libraries/entities/src/model-renderer.js +1307 -0
- package/dist/libraries/entities/src/shaders/model.wgsl +375 -0
- package/dist/libraries/gamepad/src/feed-input.js +54 -0
- package/dist/libraries/gamepad/src/filters.js +44 -0
- package/dist/libraries/gamepad/src/glyphs.js +83 -0
- package/dist/libraries/gamepad/src/hub.js +164 -0
- package/dist/libraries/gamepad/src/index.js +10 -0
- package/dist/libraries/gamepad/src/library.js +56 -0
- package/dist/libraries/gamepad/src/source-sab.js +62 -0
- package/dist/libraries/gamepad/src/sysfs-enrich.js +125 -0
- package/dist/libraries/gaussian-splats/src/gpu-sort.js +506 -0
- package/dist/libraries/gaussian-splats/src/index.js +8 -0
- package/dist/libraries/gaussian-splats/src/library.js +44 -0
- package/dist/libraries/gaussian-splats/src/parser.js +297 -0
- package/dist/libraries/gaussian-splats/src/renderer.js +368 -0
- package/dist/libraries/gaussian-splats/src/sh-eval.js +196 -0
- package/dist/libraries/gaussian-splats/src/sorter.js +76 -0
- package/dist/libraries/gaussian-splats/src/tile-raster.js +424 -0
- package/dist/libraries/gpu-kernels/src/index.js +8 -0
- package/dist/libraries/gpu-kernels/src/kernel.js +591 -0
- package/dist/libraries/gpu-kernels/src/transpile.js +896 -0
- package/dist/libraries/html-ui-kit/src/behaviors.js +231 -0
- package/dist/libraries/html-ui-kit/src/components.js +219 -0
- package/dist/libraries/html-ui-kit/src/index.js +17 -0
- package/dist/libraries/html-ui-kit/src/nav/nav-controller.js +215 -0
- package/dist/libraries/html-ui-kit/src/nav/nav-input.js +138 -0
- package/dist/libraries/html-ui-kit/src/nav/osk.js +135 -0
- package/dist/libraries/html-ui-kit/src/nav/router.js +152 -0
- package/dist/libraries/html-ui-kit/src/nav/vcursor.js +177 -0
- package/dist/libraries/html-ui-kit/src/ten-foot.js +138 -0
- package/dist/libraries/html-ui-kit/src/theme.js +235 -0
- package/dist/libraries/inspectable/src/index.js +6 -0
- package/dist/libraries/inspectable/src/inspectable.js +205 -0
- package/dist/libraries/lighting/src/index.js +4 -0
- package/dist/libraries/lighting/src/library.js +48 -0
- package/dist/libraries/lighting/src/light-system.js +395 -0
- package/dist/libraries/lighting/src/lighting-system.js +57 -0
- package/dist/libraries/lighting/src/shaders/light-debug.wgsl +30 -0
- package/dist/libraries/marching-cubes/src/chunked-field.js +130 -0
- package/dist/libraries/marching-cubes/src/deformation.js +41 -0
- package/dist/libraries/marching-cubes/src/generator.js +356 -0
- package/dist/libraries/marching-cubes/src/index.js +13 -0
- package/dist/libraries/marching-cubes/src/library.js +54 -0
- package/dist/libraries/marching-cubes/src/lod.js +95 -0
- package/dist/libraries/marching-cubes/src/marching-tetrahedra.js +261 -0
- package/dist/libraries/marching-cubes/src/sab.js +40 -0
- package/dist/libraries/marching-cubes/src/streaming-config.js +28 -0
- package/dist/libraries/marching-cubes/src/streaming-manager.js +490 -0
- package/dist/libraries/marching-cubes/src/tables.js +314 -0
- package/dist/libraries/marching-cubes/src/types.js +1 -0
- package/dist/libraries/models/src/bake-node-transforms.js +146 -0
- package/dist/libraries/models/src/bind-unskinned-meshes.js +145 -0
- package/dist/libraries/models/src/codecs/basisu-codec.js +134 -0
- package/dist/libraries/models/src/codecs/draco-codec.js +236 -0
- package/dist/libraries/models/src/codecs/draco3dgltf.d.ts +40 -0
- package/dist/libraries/models/src/codecs/index.js +5 -0
- package/dist/libraries/models/src/codecs/meshopt-codec.js +59 -0
- package/dist/libraries/models/src/codecs/registry.js +111 -0
- package/dist/libraries/models/src/dae.js +665 -0
- package/dist/libraries/models/src/default-part-selection.js +58 -0
- package/dist/libraries/models/src/dxf.js +235 -0
- package/dist/libraries/models/src/fbx/index.js +438 -0
- package/dist/libraries/models/src/fbx/interpreter/animation.js +369 -0
- package/dist/libraries/models/src/fbx/interpreter/blend-shapes.js +283 -0
- package/dist/libraries/models/src/fbx/interpreter/connections.js +158 -0
- package/dist/libraries/models/src/fbx/interpreter/diagnostics.js +48 -0
- package/dist/libraries/models/src/fbx/interpreter/geometry.js +430 -0
- package/dist/libraries/models/src/fbx/interpreter/global-settings.js +77 -0
- package/dist/libraries/models/src/fbx/interpreter/materials.js +231 -0
- package/dist/libraries/models/src/fbx/interpreter/nodes.js +168 -0
- package/dist/libraries/models/src/fbx/interpreter/skeleton.js +454 -0
- package/dist/libraries/models/src/fbx/parsers/binary-parser.js +217 -0
- package/dist/libraries/models/src/fbx/types.js +88 -0
- package/dist/libraries/models/src/gltf-extensions.js +121 -0
- package/dist/libraries/models/src/gltf.js +724 -0
- package/dist/libraries/models/src/index.js +46 -0
- package/dist/libraries/models/src/library.js +44 -0
- package/dist/libraries/models/src/loader.js +218 -0
- package/dist/libraries/models/src/material-adapter.js +82 -0
- package/dist/libraries/models/src/mini-xml.js +145 -0
- package/dist/libraries/models/src/normalize.js +168 -0
- package/dist/libraries/models/src/obj.js +247 -0
- package/dist/libraries/models/src/off.js +94 -0
- package/dist/libraries/models/src/ply.js +329 -0
- package/dist/libraries/models/src/pose-sampler.js +183 -0
- package/dist/libraries/models/src/sidecar/blender-extras.js +32 -0
- package/dist/libraries/models/src/sidecar/ddmeta.js +98 -0
- package/dist/libraries/models/src/sidecar/godot-import.js +76 -0
- package/dist/libraries/models/src/sidecar/resolver.js +112 -0
- package/dist/libraries/models/src/sidecar/types.js +8 -0
- package/dist/libraries/models/src/sidecar/unity-meta.js +46 -0
- package/dist/libraries/models/src/skeleton-synthesis.js +122 -0
- package/dist/libraries/models/src/stl.js +129 -0
- package/dist/libraries/models/src/threeds.js +312 -0
- package/dist/libraries/models/src/threemf.js +203 -0
- package/dist/libraries/models/src/types.js +33 -0
- package/dist/libraries/models/src/vtk.js +242 -0
- package/dist/libraries/navmesh/src/crowd-system.js +207 -0
- package/dist/libraries/navmesh/src/debug-viz.js +52 -0
- package/dist/libraries/navmesh/src/index.js +7 -0
- package/dist/libraries/navmesh/src/library.js +47 -0
- package/dist/libraries/navmesh/src/navmesh-generator.js +364 -0
- package/dist/libraries/navmesh/src/navmesh.js +141 -0
- package/dist/libraries/navmesh/src/pathfinder.js +221 -0
- package/dist/libraries/navmesh/src/types.js +1 -0
- package/dist/libraries/networking/src/authority.js +107 -0
- package/dist/libraries/networking/src/connection.js +107 -0
- package/dist/libraries/networking/src/discovery.js +314 -0
- package/dist/libraries/networking/src/enhanced-replication.js +282 -0
- package/dist/libraries/networking/src/epic-adapter.js +101 -0
- package/dist/libraries/networking/src/index.js +16 -0
- package/dist/libraries/networking/src/library.js +45 -0
- package/dist/libraries/networking/src/lobby.js +84 -0
- package/dist/libraries/networking/src/platform-adapter.js +92 -0
- package/dist/libraries/networking/src/rcs-adapter.js +100 -0
- package/dist/libraries/networking/src/remote-input.js +162 -0
- package/dist/libraries/networking/src/replication.js +273 -0
- package/dist/libraries/networking/src/rpc.js +172 -0
- package/dist/libraries/networking/src/session.js +129 -0
- package/dist/libraries/networking/src/transport.js +156 -0
- package/dist/libraries/networking/src/webrtc.js +266 -0
- package/dist/libraries/pathfinding-2d/src/astar-grid.js +255 -0
- package/dist/libraries/pathfinding-2d/src/index.js +9 -0
- package/dist/libraries/persistence/src/autosave-manager.js +94 -0
- package/dist/libraries/persistence/src/binary-record-store.js +205 -0
- package/dist/libraries/persistence/src/browser.js +16 -0
- package/dist/libraries/persistence/src/file-save-store.js +507 -0
- package/dist/libraries/persistence/src/hash-utils.js +54 -0
- package/dist/libraries/persistence/src/index.js +17 -0
- package/dist/libraries/persistence/src/library.js +51 -0
- package/dist/libraries/persistence/src/mock-opfs.js +114 -0
- package/dist/libraries/persistence/src/node-fs-directory-handle.js +168 -0
- package/dist/libraries/persistence/src/opfs-save-store.js +584 -0
- package/dist/libraries/persistence/src/save-worker-proxy.js +96 -0
- package/dist/libraries/persistence/src/save-worker.js +76 -0
- package/dist/libraries/persistence/src/xxh3-ts.d.ts +10 -0
- package/dist/libraries/physics-native/src/backend.js +960 -0
- package/dist/libraries/physics-native/src/broadphase.js +79 -0
- package/dist/libraries/physics-native/src/index.js +6 -0
- package/dist/libraries/physics-native/src/library.js +57 -0
- package/dist/libraries/physics-native/src/narrowphase-shapes.js +348 -0
- package/dist/libraries/physics-native/src/narrowphase.js +60 -0
- package/dist/libraries/physics-native/src/solver.js +105 -0
- package/dist/libraries/physics-native/src/types.js +4 -0
- package/dist/libraries/physics-rapier/src/api.js +352 -0
- package/dist/libraries/physics-rapier/src/auto-backend.js +54 -0
- package/dist/libraries/physics-rapier/src/backend.js +1066 -0
- package/dist/libraries/physics-rapier/src/bulk-ops.js +46 -0
- package/dist/libraries/physics-rapier/src/ffi-backend.js +17 -0
- package/dist/libraries/physics-rapier/src/ffi-lib.js +605 -0
- package/dist/libraries/physics-rapier/src/index.js +9 -0
- package/dist/libraries/physics-rapier/src/library.js +71 -0
- package/dist/libraries/physics-rapier/src/rapier-backend.js +1102 -0
- package/dist/libraries/physics-rapier/src/realm-worker-script.js +233 -0
- package/dist/libraries/postfx/src/index.js +14 -0
- package/dist/libraries/postfx/src/library.js +207 -0
- package/dist/libraries/postfx/src/post-process-stack.js +1641 -0
- package/dist/libraries/postfx/src/shaders/post-process/afterimage.wgsl +14 -0
- package/dist/libraries/postfx/src/shaders/post-process/ascii.wgsl +24 -0
- package/dist/libraries/postfx/src/shaders/post-process/blit.wgsl +12 -0
- package/dist/libraries/postfx/src/shaders/post-process/bloom-blur.wgsl +21 -0
- package/dist/libraries/postfx/src/shaders/post-process/bloom-bright.wgsl +15 -0
- package/dist/libraries/postfx/src/shaders/post-process/bloom-composite.wgsl +14 -0
- package/dist/libraries/postfx/src/shaders/post-process/bloom-downsample.wgsl +60 -0
- package/dist/libraries/postfx/src/shaders/post-process/bloom-soft.wgsl +46 -0
- package/dist/libraries/postfx/src/shaders/post-process/bloom-upsample.wgsl +51 -0
- package/dist/libraries/postfx/src/shaders/post-process/channel-mixer.wgsl +36 -0
- package/dist/libraries/postfx/src/shaders/post-process/chromatic-aberration.wgsl +37 -0
- package/dist/libraries/postfx/src/shaders/post-process/dithering.wgsl +64 -0
- package/dist/libraries/postfx/src/shaders/post-process/dof.wgsl +131 -0
- package/dist/libraries/postfx/src/shaders/post-process/edges.wgsl +45 -0
- package/dist/libraries/postfx/src/shaders/post-process/fullscreen-vs.wgsl +15 -0
- package/dist/libraries/postfx/src/shaders/post-process/fxaa.wgsl +102 -0
- package/dist/libraries/postfx/src/shaders/post-process/gaussian-blur.wgsl +37 -0
- package/dist/libraries/postfx/src/shaders/post-process/glow-blur.wgsl +33 -0
- package/dist/libraries/postfx/src/shaders/post-process/glow-composite.wgsl +25 -0
- package/dist/libraries/postfx/src/shaders/post-process/grain.wgsl +37 -0
- package/dist/libraries/postfx/src/shaders/post-process/halftone.wgsl +80 -0
- package/dist/libraries/postfx/src/shaders/post-process/highlight-blur.wgsl +33 -0
- package/dist/libraries/postfx/src/shaders/post-process/highlight-composite.wgsl +32 -0
- package/dist/libraries/postfx/src/shaders/post-process/lens-distortion.wgsl +43 -0
- package/dist/libraries/postfx/src/shaders/post-process/lens-flare.wgsl +68 -0
- package/dist/libraries/postfx/src/shaders/post-process/lut.wgsl +30 -0
- package/dist/libraries/postfx/src/shaders/post-process/motion-blur.wgsl +55 -0
- package/dist/libraries/postfx/src/shaders/post-process/occluder-chunk.wgsl +28 -0
- package/dist/libraries/postfx/src/shaders/post-process/outline.wgsl +51 -0
- package/dist/libraries/postfx/src/shaders/post-process/pixelation.wgsl +47 -0
- package/dist/libraries/postfx/src/shaders/post-process/sharpen.wgsl +32 -0
- package/dist/libraries/postfx/src/shaders/post-process/sobel.wgsl +26 -0
- package/dist/libraries/postfx/src/shaders/post-process/split-tone.wgsl +36 -0
- package/dist/libraries/postfx/src/shaders/post-process/ssao-blur.wgsl +38 -0
- package/dist/libraries/postfx/src/shaders/post-process/ssao-composite.wgsl +25 -0
- package/dist/libraries/postfx/src/shaders/post-process/ssao.wgsl +147 -0
- package/dist/libraries/postfx/src/shaders/post-process/ssr.wgsl +155 -0
- package/dist/libraries/postfx/src/shaders/post-process/taa.wgsl +98 -0
- package/dist/libraries/postfx/src/shaders/post-process/tonemap.wgsl +40 -0
- package/dist/libraries/postfx/src/shaders/post-process/watercolor.wgsl +82 -0
- package/dist/libraries/postfx/src/shaders/post-process/white-balance.wgsl +41 -0
- package/dist/libraries/recast/src/backend.js +124 -0
- package/dist/libraries/recast/src/crowd-system.js +310 -0
- package/dist/libraries/recast/src/index.js +4 -0
- package/dist/libraries/recast/src/library.js +59 -0
- package/dist/libraries/recast/src/types.js +4 -0
- package/dist/libraries/sand/src/cell.js +32 -0
- package/dist/libraries/sand/src/fields.js +27 -0
- package/dist/libraries/sand/src/fluid-grid.js +267 -0
- package/dist/libraries/sand/src/grid-dims.js +47 -0
- package/dist/libraries/sand/src/grid-sim-buffer.js +184 -0
- package/dist/libraries/sand/src/index.js +20 -0
- package/dist/libraries/sand/src/library.js +67 -0
- package/dist/libraries/sand/src/materials.js +437 -0
- package/dist/libraries/sand/src/palette.js +87 -0
- package/dist/libraries/sand/src/particles.js +163 -0
- package/dist/libraries/sand/src/render/sand-grid-pass.js +377 -0
- package/dist/libraries/sand/src/rng.js +44 -0
- package/dist/libraries/sand/src/rules/builtin-rules.js +125 -0
- package/dist/libraries/sand/src/rules/rule-compiler.js +164 -0
- package/dist/libraries/sand/src/rules/rule-engine.js +210 -0
- package/dist/libraries/sand/src/rules/rule-types.js +27 -0
- package/dist/libraries/sand/src/sand-step-pool.js +458 -0
- package/dist/libraries/sand/src/sand-step-worker.js +101 -0
- package/dist/libraries/sand/src/sand-world.js +3382 -0
- package/dist/libraries/stickman/src/index.js +7 -0
- package/dist/libraries/stickman/src/library.js +44 -0
- package/dist/libraries/stickman/src/proportions.js +40 -0
- package/dist/libraries/stickman/src/shader.js +113 -0
- package/dist/libraries/stickman/src/skeleton.js +163 -0
- package/dist/libraries/stickman/src/stickman-pass.js +210 -0
- package/dist/libraries/stickman/src/thick-line.js +120 -0
- package/dist/libraries/surface-nets/src/chunked-field.js +5 -0
- package/dist/libraries/surface-nets/src/deformation.js +29 -0
- package/dist/libraries/surface-nets/src/index.js +15 -0
- package/dist/libraries/surface-nets/src/library.js +41 -0
- package/dist/libraries/surface-nets/src/lod.js +6 -0
- package/dist/libraries/surface-nets/src/sab.js +4 -0
- package/dist/libraries/surface-nets/src/streaming-config.js +4 -0
- package/dist/libraries/surface-nets/src/streaming-manager.js +9 -0
- package/dist/libraries/surface-nets/src/surface-nets.js +361 -0
- package/dist/libraries/surface-nets/src/types.js +1 -0
- package/dist/libraries/water/src/buoyancy.js +80 -0
- package/dist/libraries/water/src/index.js +12 -0
- package/dist/libraries/water/src/library.js +65 -0
- package/dist/libraries/water/src/shore-damping.js +70 -0
- package/dist/libraries/water/src/water-buffer.js +78 -0
- package/dist/libraries/water/src/water-chunks.js +5 -0
- package/dist/libraries/water/src/water-physics.js +315 -0
- package/dist/libraries/water/src/water-renderer.js +736 -0
- package/dist/libraries/water/src/water-sab.js +138 -0
- package/dist/libraries/water/src/wave-sources.js +45 -0
- package/dist/libraries/weather/src/index.js +5 -0
- package/dist/libraries/weather/src/library.js +48 -0
- package/dist/libraries/weather/src/types.js +29 -0
- package/dist/libraries/weather/src/weather-blend.js +108 -0
- package/dist/libraries/weather/src/weather-system.js +275 -0
- package/dist/libraries/weatherfx/src/cloud-provider.js +5 -0
- package/dist/libraries/weatherfx/src/cloud-system.js +294 -0
- package/dist/libraries/weatherfx/src/index.js +4 -0
- package/dist/libraries/weatherfx/src/library.js +41 -0
- package/dist/libraries/weatherfx/src/particle-system.js +350 -0
- package/dist/libraries/weatherfx/src/shaders/cloud.wgsl +111 -0
- package/dist/libraries/weatherfx/src/shaders/particle-compute.wgsl +187 -0
- package/dist/libraries/weatherfx/src/shaders/particle-render.wgsl +95 -0
- package/dist/mcp/src/client.js +669 -0
- package/dist/mcp/src/engine-context.js +99 -0
- package/dist/mcp/src/http-transport.js +423 -0
- package/dist/mcp/src/index.js +5 -0
- package/dist/mcp/src/prompts/add-entity.js +39 -0
- package/dist/mcp/src/prompts/create-scene.js +41 -0
- package/dist/mcp/src/prompts/debug-frame.js +36 -0
- package/dist/mcp/src/prompts/index.js +10 -0
- package/dist/mcp/src/resources/asset-list.js +28 -0
- package/dist/mcp/src/resources/checkpoint-list.js +29 -0
- package/dist/mcp/src/resources/entity-state.js +45 -0
- package/dist/mcp/src/resources/gpu-info.js +90 -0
- package/dist/mcp/src/resources/index.js +51 -0
- package/dist/mcp/src/resources/performance.js +33 -0
- package/dist/mcp/src/resources/scene-tree.js +37 -0
- package/dist/mcp/src/server.js +307 -0
- package/dist/mcp/src/tools/animation.js +102 -0
- package/dist/mcp/src/tools/asset.js +146 -0
- package/dist/mcp/src/tools/audio.js +80 -0
- package/dist/mcp/src/tools/build.js +128 -0
- package/dist/mcp/src/tools/camera.js +157 -0
- package/dist/mcp/src/tools/checkpoint.js +90 -0
- package/dist/mcp/src/tools/component.js +176 -0
- package/dist/mcp/src/tools/debug.js +273 -0
- package/dist/mcp/src/tools/entity.js +309 -0
- package/dist/mcp/src/tools/inspect.js +192 -0
- package/dist/mcp/src/tools/lighting.js +239 -0
- package/dist/mcp/src/tools/material.js +225 -0
- package/dist/mcp/src/tools/mesh.js +210 -0
- package/dist/mcp/src/tools/physics.js +251 -0
- package/dist/mcp/src/tools/scene.js +139 -0
- package/dist/mcp/src/tools/script.js +114 -0
- package/dist/mcp/src/types.js +9 -0
- package/dist/mcp/src/undo-redo.js +64 -0
- package/dist/modules/camera-controls/src/index.js +116 -0
- package/dist/modules/controller-ui/src/index.js +149 -0
- package/dist/modules/devtools/src/api.js +317 -0
- package/dist/modules/devtools/src/asset-utils.js +102 -0
- package/dist/modules/devtools/src/bind-debug-store.js +34 -0
- package/dist/modules/devtools/src/blitz/host.js +391 -0
- package/dist/modules/devtools/src/blitz/module.js +65 -0
- package/dist/modules/devtools/src/blitz/panels/console.js +217 -0
- package/dist/modules/devtools/src/blitz/panels/elements.js +79 -0
- package/dist/modules/devtools/src/blitz/panels/gpu.js +61 -0
- package/dist/modules/devtools/src/blitz/panels/performance.js +113 -0
- package/dist/modules/devtools/src/blitz/panels/snapshot.js +141 -0
- package/dist/modules/devtools/src/blitz/panels/types.js +55 -0
- package/dist/modules/devtools/src/blitz/theme.js +167 -0
- package/dist/modules/devtools/src/data-bridge.js +247 -0
- package/dist/modules/devtools/src/debug-overlay.js +181 -0
- package/dist/modules/devtools/src/debug-raycast.js +296 -0
- package/dist/modules/devtools/src/debug-store.js +28 -0
- package/dist/modules/devtools/src/debug-view-descriptors.js +24 -0
- package/dist/modules/devtools/src/doctor-panel.js +163 -0
- package/dist/modules/devtools/src/gizmo-module.js +95 -0
- package/dist/modules/devtools/src/graph-model.js +387 -0
- package/dist/modules/devtools/src/grid-renderer.js +145 -0
- package/dist/modules/devtools/src/height-ruler-renderer.js +189 -0
- package/dist/modules/devtools/src/index.js +46 -0
- package/dist/modules/devtools/src/init.js +204 -0
- package/dist/modules/devtools/src/label-overlay.js +129 -0
- package/dist/modules/devtools/src/material-stats-panel.js +171 -0
- package/dist/modules/devtools/src/profiling-bridge.js +288 -0
- package/dist/modules/devtools/src/profiling-hooks.js +63 -0
- package/dist/modules/devtools/src/renderer-adapter.js +61 -0
- package/dist/modules/devtools/src/scene-inspector.js +571 -0
- package/dist/modules/devtools/src/scene-store.js +212 -0
- package/dist/modules/devtools/src/scene-sync.js +92 -0
- package/dist/modules/devtools/src/shaders/transform-gizmo.wgsl +38 -0
- package/dist/modules/devtools/src/sim-stats-panel.js +250 -0
- package/dist/modules/devtools/src/sim-stats-provider.js +73 -0
- package/dist/modules/devtools/src/skeleton-renderer.js +326 -0
- package/dist/modules/devtools/src/transform-gizmo.js +677 -0
- package/dist/modules/devtools/src/types.js +5 -0
- package/dist/modules/devtools/src/worker-expose.js +59 -0
- package/dist/modules/devtools/src/worker-sync.js +115 -0
- package/dist/modules/editor/src/commands/component.js +151 -0
- package/dist/modules/editor/src/commands/entity.js +253 -0
- package/dist/modules/editor/src/commands/hierarchy.js +79 -0
- package/dist/modules/editor/src/commands/index.js +57 -0
- package/dist/modules/editor/src/commands/prefab.js +149 -0
- package/dist/modules/editor/src/commands/registry.js +246 -0
- package/dist/modules/editor/src/commands/scene-io.js +206 -0
- package/dist/modules/editor/src/commands/selection.js +71 -0
- package/dist/modules/editor/src/commands/transform.js +88 -0
- package/dist/modules/editor/src/ddscene.js +189 -0
- package/dist/modules/editor/src/document.js +96 -0
- package/dist/modules/editor/src/editor-context.js +115 -0
- package/dist/modules/editor/src/index.js +11 -0
- package/dist/modules/editor/src/mcp.js +91 -0
- package/dist/modules/editor/src/module.js +115 -0
- package/dist/modules/editor/src/selection.js +60 -0
- package/dist/modules/editor/src/shell.js +397 -0
- package/dist/modules/editor/src/viewport.js +186 -0
- package/dist/modules/html-ui/src/composite.js +116 -0
- package/dist/modules/html-ui/src/create-html-ui.js +137 -0
- package/dist/modules/html-ui/src/doc-backend.js +518 -0
- package/dist/modules/html-ui/src/host.js +819 -0
- package/dist/modules/html-ui/src/index.js +5 -0
- package/dist/modules/html-ui/src/jsx-dev-runtime.js +9 -0
- package/dist/modules/html-ui/src/jsx-runtime.js +121 -0
- package/dist/modules/html-ui/src/protocol.js +6 -0
- package/dist/modules/html-ui/src/ui-worker.js +10 -0
- package/dist/modules/mcp/src/index.js +62 -0
- package/dist/modules/movement-2d/src/grid-character.js +345 -0
- package/dist/modules/movement-2d/src/index.js +27 -0
- package/dist/modules/movement-3d/src/character-motor.js +166 -0
- package/dist/modules/movement-3d/src/index.js +27 -0
- package/dist/modules/native-osr/src/index.js +12 -0
- package/dist/modules/native-osr/src/input-router.js +335 -0
- package/dist/modules/native-osr/src/native-osr-manager.js +210 -0
- package/dist/modules/native-osr/src/native-texture-source.js +66 -0
- package/dist/modules/native-osr/src/types.js +8 -0
- package/dist/modules/native-osr/src/world-space-ui-pass.js +313 -0
- package/dist/modules/sailing/src/index.js +39 -0
- package/dist/modules/terrain/src/index.js +44 -0
- package/dist/modules/vitals/src/index.js +25 -0
- package/dist/modules/vitals/src/vitals.js +195 -0
- package/dist/modules/xr/src/camera-rig.js +119 -0
- package/dist/modules/xr/src/debug.js +45 -0
- package/dist/modules/xr/src/frame-loop.js +139 -0
- package/dist/modules/xr/src/index.js +10 -0
- package/dist/modules/xr/src/input.js +164 -0
- package/dist/modules/xr/src/layer.js +100 -0
- package/dist/modules/xr/src/session.js +133 -0
- package/dist/modules/xr/src/sim-module.js +21 -0
- package/dist/modules/xr/src/types.js +4 -0
- package/dist/modules/xr/src/webxr.d.ts +182 -0
- package/dist/modules/xr/src/xr-module.js +134 -0
- package/dist/shader-graph/src/chunks.js +340 -0
- package/dist/shader-graph/src/compiler.js +639 -0
- package/dist/shader-graph/src/compute-compiler.js +384 -0
- package/dist/shader-graph/src/compute-graph.js +55 -0
- package/dist/shader-graph/src/compute-profiles.js +39 -0
- package/dist/shader-graph/src/graph.js +38 -0
- package/dist/shader-graph/src/index.js +15 -0
- package/dist/shader-graph/src/profiles.js +305 -0
- package/dist/shader-graph/src/validator.js +42 -0
- package/dist/shader-graph/src/wgsl-binding-validator.js +110 -0
- package/dist/shader-graph/src/wgsl-struct-validator.js +222 -0
- package/dist/shader-graph/src/wgsl-struct.js +251 -0
- package/dist/test/src/index.js +1 -0
- package/dist/test/src/vision-test.js +228 -0
- package/libraries/asset-browser/src/software-thumbnails.ts +2 -2
- package/libraries/audio-kira/src/backend.ts +2 -1
- package/libraries/blitz-ui/native/src/shell.rs +35 -1
- package/libraries/blitz-ui/native-osr/Cargo.toml +8 -0
- package/libraries/blitz-ui/native-osr/src/lib.rs +213 -22
- package/libraries/blitz-ui/native-osr/src/mutate.rs +109 -14
- package/libraries/blitz-ui/src/native-osr-ffi.ts +71 -8
- package/libraries/blitz-ui/src/router.ts +3 -1
- package/libraries/blitz-ui/src/ui-blit-pass.ts +1 -1
- package/libraries/character/src/character-animator.ts +1 -1
- package/libraries/character/src/customization.ts +513 -0
- package/libraries/character/src/index.ts +6 -0
- package/libraries/character/src/inspectable.ts +111 -0
- package/libraries/character/src/loader.ts +38 -13
- package/libraries/character/src/locomotion.ts +13 -1
- package/libraries/character/src/preview.ts +94 -24
- package/libraries/devtools/README.md +16 -18
- package/libraries/devtools/src/backend.ts +505 -0
- package/libraries/devtools/src/cdp-bridge.ts +8 -8
- package/libraries/devtools/src/collectors.ts +41 -37
- package/libraries/devtools/src/index.ts +32 -14
- package/libraries/devtools/src/native-providers.ts +20 -12
- package/libraries/devtools/src/snapshot.ts +77 -0
- package/libraries/devtools/src/web/host.ts +11 -12
- package/libraries/devtools/src/web/mirror.ts +14 -405
- package/libraries/devtools/src/web/server.ts +4 -3
- package/libraries/entities/src/model-renderer.ts +96 -23
- package/libraries/gamepad/src/library.ts +2 -1
- package/libraries/inspectable/src/index.ts +11 -0
- package/libraries/inspectable/src/inspectable.ts +277 -0
- package/libraries/marching-cubes/src/streaming-manager.ts +4 -4
- package/libraries/models/src/bind-unskinned-meshes.ts +131 -0
- package/libraries/models/src/index.ts +1 -0
- package/libraries/models/src/types.ts +22 -0
- package/libraries/persistence/src/autosave-manager.ts +1 -1
- package/libraries/persistence/src/binary-record-store.ts +1 -1
- package/libraries/persistence/src/file-save-store.ts +4 -4
- package/libraries/persistence/src/library.ts +1 -1
- package/libraries/persistence/src/opfs-save-store.ts +5 -5
- package/libraries/persistence/src/save-worker.ts +13 -14
- package/libraries/physics-rapier/src/ffi-lib.ts +2 -1
- package/libraries/postfx/src/post-process-stack.ts +1 -1
- package/libraries/sand/src/sand-step-pool.ts +5 -0
- package/libraries/water/src/water-renderer.ts +1 -1
- package/libraries/weatherfx/src/cloud-system.ts +3 -3
- package/mcp/README.md +20 -0
- package/mcp/src/client.ts +75 -22
- package/mcp/src/undo-redo.ts +2 -2
- package/modules/devtools/src/blitz/host.ts +430 -0
- package/modules/devtools/src/blitz/module.ts +101 -0
- package/modules/devtools/src/blitz/panels/console.ts +223 -0
- package/modules/devtools/src/blitz/panels/elements.ts +92 -0
- package/modules/devtools/src/blitz/panels/gpu.ts +70 -0
- package/modules/devtools/src/blitz/panels/performance.ts +120 -0
- package/modules/devtools/src/blitz/panels/snapshot.ts +152 -0
- package/modules/devtools/src/blitz/panels/types.ts +120 -0
- package/modules/devtools/src/blitz/theme.ts +168 -0
- package/modules/devtools/src/data-bridge.ts +1 -1
- package/modules/devtools/src/index.ts +6 -0
- package/modules/devtools/src/profiling-bridge.ts +17 -13
- package/modules/devtools/src/profiling-hooks.ts +22 -13
- package/modules/devtools/src/scene-inspector.ts +1 -1
- package/modules/devtools/src/worker-sync.ts +9 -1
- package/modules/editor/src/commands/registry.ts +2 -2
- package/modules/editor/src/module.ts +1 -1
- package/modules/html-ui/src/composite.ts +1 -1
- package/modules/html-ui/src/create-html-ui.ts +21 -9
- package/modules/html-ui/src/doc-backend.ts +189 -10
- package/modules/html-ui/src/host.ts +354 -40
- package/modules/html-ui/src/index.ts +1 -1
- package/modules/html-ui/src/jsx-runtime.ts +1 -1
- package/modules/html-ui/src/protocol.ts +53 -6
- package/modules/mcp/README.md +6 -0
- package/modules/mcp/src/index.ts +70 -3
- package/modules/movement-3d/src/character-motor.ts +83 -10
- package/package.json +838 -165
- package/shader-graph/README.md +25 -0
- package/test/README.md +16 -0
- package/libraries/blitz-ui/native-osr-spike.ts +0 -70
- package/libraries/devtools/native/Cargo.toml +0 -12
- package/libraries/devtools/native/src/lib.rs +0 -1646
- package/libraries/devtools/native/src/panels/console.rs +0 -338
- package/libraries/devtools/native/src/panels/dom_tree.rs +0 -47
- package/libraries/devtools/native/src/panels/generic.rs +0 -317
- package/libraries/devtools/native/src/panels/gpu.rs +0 -107
- package/libraries/devtools/native/src/panels/input.rs +0 -88
- package/libraries/devtools/native/src/panels/mod.rs +0 -154
- package/libraries/devtools/native/src/panels/perf_metrics.rs +0 -91
- package/libraries/devtools/native/src/panels/perf_recorder.rs +0 -158
- package/libraries/devtools/native/src/panels/scene.rs +0 -72
- package/libraries/devtools/native/src/state.rs +0 -394
- package/libraries/devtools/src/egui-ffi.ts +0 -804
- package/libraries/devtools/src/egui-renderer.ts +0 -407
- package/libraries/devtools/src/host.ts +0 -363
- package/libraries/devtools/src/mirror.ts +0 -794
- package/libraries/models/test-fixtures/fbx/LICENSE-notice.txt +0 -24
- package/libraries/models/test-fixtures/fbx/README.md +0 -46
- package/libraries/models/test-fixtures/fbx/m01_cube_phong.fbx +0 -0
- package/libraries/models/test-fixtures/fbx/m02_geo_ngons.fbx +0 -0
- package/libraries/models/test-fixtures/fbx/m03_normals.fbx +0 -0
- package/libraries/models/test-fixtures/fbx/m04_material_properties.fbx +0 -0
- package/libraries/models/test-fixtures/fbx/m05_external_diffuse.png +0 -0
- package/libraries/models/test-fixtures/fbx/m05_textures.fbx +0 -0
- package/libraries/models/test-fixtures/fbx/m06_uv_transform.fbx +0 -0
- package/libraries/models/test-fixtures/fbx/m07_multimaterial.fbx +0 -0
- package/libraries/models/test-fixtures/fbx/m08_transforms.fbx +0 -0
- package/libraries/models/test-fixtures/fbx/m09_skinning.fbx +0 -0
- package/libraries/models/test-fixtures/fbx/m10_morph.fbx +0 -0
- package/libraries/models/test-fixtures/fbx/m11_node_anim.fbx +0 -0
- package/libraries/models/test-fixtures/fbx/m12_skeletal_anim.fbx +0 -0
- package/libraries/models/test-fixtures/fbx/m13_morph_anim.fbx +0 -0
- package/libraries/models/test-fixtures/fbx/m14_multiclip.fbx +0 -0
- package/libraries/models/test-fixtures/fbx/m15_camera_lights.fbx +0 -0
- package/libraries/models/test-fixtures/fbx/m16_axis_yup.fbx +0 -0
- package/libraries/models/test-fixtures/fbx/m16_axis_zup.fbx +0 -0
- package/libraries/models/test-fixtures/fbx/m16_units_254.fbx +0 -0
- package/libraries/physics-native/src/ffi-spike-worker.ts +0 -71
- package/libraries/physics-rapier/bench/ffi-bench.ts +0 -79
- package/libraries/physics-rapier/bench/wasm-baseline.ts +0 -90
|
@@ -92,19 +92,19 @@ export function installSimHotReload(deps: SimHotReloadDeps): void {
|
|
|
92
92
|
const store = useHotReloadStore.getState();
|
|
93
93
|
if (!store.enabled) return;
|
|
94
94
|
hot.send("sim:hot-reload:ack", {});
|
|
95
|
-
log.info("
|
|
95
|
+
log.info("hmr", `Sim file changed: ${data.file}`);
|
|
96
96
|
store.setStatus("reloading");
|
|
97
97
|
const t0 = performance.now();
|
|
98
98
|
try {
|
|
99
99
|
await deps.sim.hotReload?.(getConfig(), store.preserveState);
|
|
100
100
|
const elapsed = (performance.now() - t0).toFixed(0);
|
|
101
|
-
log.info("
|
|
101
|
+
log.info("hmr", `Sim worker swap complete (${elapsed}ms)`);
|
|
102
102
|
store.setStatus("ready");
|
|
103
103
|
store.setLastReload({ file: data.file, elapsed: Number(elapsed), timestamp: data.timestamp });
|
|
104
104
|
} catch (err) {
|
|
105
|
-
log.error("
|
|
105
|
+
log.error("hmr", `Sim hot-reload failed: ${(err as Error).message}`);
|
|
106
106
|
store.setStatus("error", (err as Error).message);
|
|
107
|
-
log.warn("
|
|
107
|
+
log.warn("hmr", "Falling back to full reload");
|
|
108
108
|
if (!bridge().requestRestart?.("sim hot-reload failed")) {
|
|
109
109
|
window.location.reload();
|
|
110
110
|
}
|
|
@@ -115,7 +115,7 @@ export function installSimHotReload(deps: SimHotReloadDeps): void {
|
|
|
115
115
|
const store = useHotReloadStore.getState();
|
|
116
116
|
if (!store.enabled) return;
|
|
117
117
|
hot.send("renderer:hot-reload:ack", {});
|
|
118
|
-
log.info("
|
|
118
|
+
log.info("hmr", `Renderer file changed: ${data.file}`);
|
|
119
119
|
store.setStatus("reloading");
|
|
120
120
|
if (store.preserveState) {
|
|
121
121
|
try {
|
|
@@ -128,10 +128,10 @@ export function installSimHotReload(deps: SimHotReloadDeps): void {
|
|
|
128
128
|
}
|
|
129
129
|
dd.saveGameState(SLOT, JSON.stringify(components));
|
|
130
130
|
sessionStorage.setItem(PENDING_KEY, "1");
|
|
131
|
-
log.info("
|
|
131
|
+
log.info("hmr", "State saved, reloading page...");
|
|
132
132
|
}
|
|
133
133
|
} catch (err) {
|
|
134
|
-
log.warn("
|
|
134
|
+
log.warn("hmr", `State save failed, reloading without preservation: ${err}`);
|
|
135
135
|
}
|
|
136
136
|
}
|
|
137
137
|
if (!bridge().requestRestart?.("renderer hot-reload")) {
|
|
@@ -168,11 +168,11 @@ export async function restoreHotReloadState(
|
|
|
168
168
|
deps.renderer?.restoreRendererMeta?.(components.renderer.data);
|
|
169
169
|
}
|
|
170
170
|
} catch { /* ignore */ }
|
|
171
|
-
log.info("
|
|
171
|
+
log.info("hmr", "Restored state after page reload");
|
|
172
172
|
if (dd.deleteGameState) dd.deleteGameState(SLOT);
|
|
173
173
|
return true;
|
|
174
174
|
} catch (err) {
|
|
175
|
-
log.error("
|
|
175
|
+
log.error("hmr", `Failed to restore hot-reload state: ${err}. Starting fresh.`);
|
|
176
176
|
return false;
|
|
177
177
|
}
|
|
178
178
|
}
|
|
@@ -107,12 +107,12 @@ export function createMcpHarness(opts: McpHarnessOptions): void {
|
|
|
107
107
|
};
|
|
108
108
|
|
|
109
109
|
if (!downdraft?.isAvailable || typeof downdraft.onMcpRequest !== "function") {
|
|
110
|
-
log.warn("
|
|
110
|
+
log.warn("mcp", "Host bridge or onMcpRequest not available; automation harness disabled");
|
|
111
111
|
return;
|
|
112
112
|
}
|
|
113
113
|
|
|
114
114
|
downdraft.onMcpRequest(async (request) => handleRequest(request as McpRequest));
|
|
115
|
-
log.info("
|
|
115
|
+
log.info("mcp", `${serverName} registered; tools: ${tools.map((t) => t.def.name).join(", ")}`);
|
|
116
116
|
}
|
|
117
117
|
|
|
118
118
|
// ── Shared MCP tool helpers ──────────────────────────────────────────────────
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
// ============================================================================
|
|
28
28
|
|
|
29
29
|
import { getHostCapabilities, KEY, type RenderSurface } from "@downdraft/engine";
|
|
30
|
+
import type { InspectableRegistry } from "@downdraft/engine/libraries/inspectable";
|
|
30
31
|
import { createLogger } from "@downdraft/engine/util/logger";
|
|
31
32
|
import { downdraft } from "./index";
|
|
32
33
|
import {
|
|
@@ -71,7 +72,10 @@ export type StandardToolName =
|
|
|
71
72
|
| "get_ui_state"
|
|
72
73
|
| "get_element_bounds"
|
|
73
74
|
| "inspect_dom"
|
|
74
|
-
| "get_element_style"
|
|
75
|
+
| "get_element_style"
|
|
76
|
+
| "inspectable_list"
|
|
77
|
+
| "inspectable_get"
|
|
78
|
+
| "inspectable_set";
|
|
75
79
|
|
|
76
80
|
// dispatch_click: real pointer input produces a pointer* event before its
|
|
77
81
|
// compat mouse* event (pointerdown→mousedown, pointermove→mousemove,
|
|
@@ -148,6 +152,14 @@ export interface StandardAutomationContext {
|
|
|
148
152
|
getWorldState?: () => unknown | Promise<unknown>;
|
|
149
153
|
getUiState?: () => unknown;
|
|
150
154
|
|
|
155
|
+
/**
|
|
156
|
+
* InspectableRegistry for the inspectable_list/get/set tools — schema'd
|
|
157
|
+
* read/write nodes over game state (player customization, settings, …) so
|
|
158
|
+
* agents mutate semantics directly instead of synthesizing input. Nodes'
|
|
159
|
+
* set() callbacks route through the game's normal apply pipeline.
|
|
160
|
+
*/
|
|
161
|
+
inspectables?: InspectableRegistry;
|
|
162
|
+
|
|
151
163
|
/**
|
|
152
164
|
* Extra variables exposed to wait_for_condition expressions, keyed by name.
|
|
153
165
|
* E.g. `{ ui: () => store.getState() }` exposes `ui` in the predicate.
|
|
@@ -262,7 +274,7 @@ export function createStandardAutomationTools(ctx: StandardAutomationContext): M
|
|
|
262
274
|
};
|
|
263
275
|
}
|
|
264
276
|
} catch (e) {
|
|
265
|
-
log.warn("
|
|
277
|
+
log.warn("mcp", `Host frame capture failed, falling back to canvas-only: ${(e as Error).message}`);
|
|
266
278
|
}
|
|
267
279
|
}
|
|
268
280
|
}
|
|
@@ -727,6 +739,95 @@ export function createStandardAutomationTools(ctx: StandardAutomationContext): M
|
|
|
727
739
|
});
|
|
728
740
|
}
|
|
729
741
|
|
|
742
|
+
// ── inspectable_list / inspectable_get / inspectable_set ──
|
|
743
|
+
const inspectables = ctx.inspectables;
|
|
744
|
+
if (want("inspectable_list") && inspectables) {
|
|
745
|
+
tools.push({
|
|
746
|
+
def: {
|
|
747
|
+
name: "inspectable_list",
|
|
748
|
+
description:
|
|
749
|
+
"List the game's inspectable state nodes — schema'd read/write points over game state " +
|
|
750
|
+
"(player customization, settings, etc.). Returns each node's path, type, valid " +
|
|
751
|
+
"range/options, readOnly flag, and current value. Mutate them with inspectable_set " +
|
|
752
|
+
"instead of synthesizing input — writes run through the game's normal apply pipeline.",
|
|
753
|
+
inputSchema: {
|
|
754
|
+
type: "object",
|
|
755
|
+
properties: {
|
|
756
|
+
prefix: { type: "string", description: "Limit to nodes under this path prefix (e.g. 'player.customization')" },
|
|
757
|
+
tree: { type: "boolean", default: false, description: "Also return a nested tree keyed by path segments" },
|
|
758
|
+
},
|
|
759
|
+
},
|
|
760
|
+
},
|
|
761
|
+
handler: (params: Record<string, unknown>) => {
|
|
762
|
+
const prefix = params.prefix as string | undefined;
|
|
763
|
+
const nodes = inspectables.list(prefix).map((info) => {
|
|
764
|
+
let value: unknown, error: string | undefined;
|
|
765
|
+
try {
|
|
766
|
+
value = inspectables.get(info.path).value;
|
|
767
|
+
} catch (e) {
|
|
768
|
+
error = (e as Error).message;
|
|
769
|
+
}
|
|
770
|
+
return { ...info, value, error };
|
|
771
|
+
});
|
|
772
|
+
return jsonResult({
|
|
773
|
+
nodes,
|
|
774
|
+
...(params.tree ? { tree: inspectables.tree(prefix) } : {}),
|
|
775
|
+
});
|
|
776
|
+
},
|
|
777
|
+
});
|
|
778
|
+
}
|
|
779
|
+
if (want("inspectable_get") && inspectables) {
|
|
780
|
+
tools.push({
|
|
781
|
+
def: {
|
|
782
|
+
name: "inspectable_get",
|
|
783
|
+
description: "Read the current value and schema of a single inspectable node. Discover paths with inspectable_list.",
|
|
784
|
+
inputSchema: {
|
|
785
|
+
type: "object",
|
|
786
|
+
properties: {
|
|
787
|
+
path: { type: "string", description: "Node path (e.g. 'player.customization.girth')" },
|
|
788
|
+
},
|
|
789
|
+
required: ["path"],
|
|
790
|
+
},
|
|
791
|
+
},
|
|
792
|
+
handler: (params: Record<string, unknown>) => {
|
|
793
|
+
const path = params.path as string;
|
|
794
|
+
try {
|
|
795
|
+
return jsonResult({ ...inspectables.describe(path), ...inspectables.get(path) });
|
|
796
|
+
} catch (e) {
|
|
797
|
+
return errorResult((e as Error).message);
|
|
798
|
+
}
|
|
799
|
+
},
|
|
800
|
+
});
|
|
801
|
+
}
|
|
802
|
+
if (want("inspectable_set") && inspectables) {
|
|
803
|
+
tools.push({
|
|
804
|
+
def: {
|
|
805
|
+
name: "inspectable_set",
|
|
806
|
+
description:
|
|
807
|
+
"Write a value to an inspectable node (see inspectable_list for paths, types, and valid " +
|
|
808
|
+
"options/ranges). The write is validated then routed through the game's apply function — " +
|
|
809
|
+
"engine side-effects (mesh re-resolution, sim dispatch, saves) happen as if the game's " +
|
|
810
|
+
"own UI had made the change. Returns the post-write value.",
|
|
811
|
+
inputSchema: {
|
|
812
|
+
type: "object",
|
|
813
|
+
properties: {
|
|
814
|
+
path: { type: "string", description: "Node path (e.g. 'player.customization.girth')" },
|
|
815
|
+
value: { description: "JSON value matching the node's declared type" },
|
|
816
|
+
},
|
|
817
|
+
required: ["path", "value"],
|
|
818
|
+
},
|
|
819
|
+
},
|
|
820
|
+
handler: async (params: Record<string, unknown>) => {
|
|
821
|
+
try {
|
|
822
|
+
const res = await inspectables.set(params.path as string, params.value);
|
|
823
|
+
return jsonResult({ applied: true, ...res });
|
|
824
|
+
} catch (e) {
|
|
825
|
+
return errorResult((e as Error).message);
|
|
826
|
+
}
|
|
827
|
+
},
|
|
828
|
+
});
|
|
829
|
+
}
|
|
830
|
+
|
|
730
831
|
return [...tools, ...(ctx.extraTools ?? [])];
|
|
731
832
|
}
|
|
732
833
|
|
|
@@ -766,6 +867,6 @@ export function createGameMcp(opts: GameMcpOptions): void {
|
|
|
766
867
|
}),
|
|
767
868
|
});
|
|
768
869
|
} catch (e) {
|
|
769
|
-
log.warn("
|
|
870
|
+
log.warn("mcp", `${appId} automation harness setup failed (non-fatal): ${e}`);
|
|
770
871
|
}
|
|
771
872
|
}
|
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
// line carries GPU identity.
|
|
9
9
|
// ============================================================================
|
|
10
10
|
|
|
11
|
-
import {
|
|
11
|
+
import { condenseText, formatBytesShort, type FeatureLogData } from "@downdraft/engine/util/feature-log";
|
|
12
|
+
import { ENGINE_VERSION } from "@downdraft/engine/version";
|
|
12
13
|
import os from "node:os";
|
|
13
14
|
|
|
14
15
|
export interface CollectHostFeatureLogOptions {
|
|
@@ -28,17 +28,22 @@ export function mcpPortDir(): string {
|
|
|
28
28
|
* `Authorization: Bearer <token>` or `X-Downdraft-Token` header. The port
|
|
29
29
|
* file format stays a bare number for backward compatibility with existing
|
|
30
30
|
* bridges. Returns a cleanup function that removes both files (best-effort).
|
|
31
|
+
*
|
|
32
|
+
* `suffix` distinguishes a second endpoint in the same process:
|
|
33
|
+
* `writeMcpPidFile(port, token, ".editor")` writes `<pid>.editor` +
|
|
34
|
+
* `<pid>.editor.token` (the createMcpModule editor toolset endpoint), leaving
|
|
35
|
+
* the automation endpoint's `<pid>` file untouched.
|
|
31
36
|
*/
|
|
32
|
-
export function writeMcpPidFile(port: number, token: string): () => void {
|
|
37
|
+
export function writeMcpPidFile(port: number, token: string, suffix: string = ""): () => void {
|
|
33
38
|
const dir = mcpPortDir();
|
|
34
|
-
const pidFile = join(dir,
|
|
39
|
+
const pidFile = join(dir, `${process.pid}${suffix}`);
|
|
35
40
|
const tokenFile = `${pidFile}.token`;
|
|
36
41
|
try {
|
|
37
42
|
mkdirSync(dir, { recursive: true });
|
|
38
43
|
writeFileSync(pidFile, String(port));
|
|
39
44
|
writeFileSync(tokenFile, token, { mode: 0o600 });
|
|
40
45
|
} catch (e) {
|
|
41
|
-
log.warn("
|
|
46
|
+
log.warn("mcp", `Failed to write PID file ${pidFile}: ${(e as Error).message}`);
|
|
42
47
|
}
|
|
43
48
|
return () => {
|
|
44
49
|
try { unlinkSync(pidFile); } catch { /* already gone */ }
|
|
@@ -54,12 +54,12 @@ export function createMcpProxyHandler(
|
|
|
54
54
|
const rendererResult = await forwardToRenderer({ method, params });
|
|
55
55
|
const r = rendererResult as { tools?: unknown[]; error?: unknown };
|
|
56
56
|
if ("error" in r && r.error) {
|
|
57
|
-
log.warn("
|
|
57
|
+
log.warn("mcp", `tools/list renderer error: ${JSON.stringify(r.error)} (returning host tools only)`);
|
|
58
58
|
} else {
|
|
59
59
|
rendererTools = (r as { tools?: unknown[] }).tools ?? [];
|
|
60
60
|
}
|
|
61
61
|
} catch (e) {
|
|
62
|
-
log.warn("
|
|
62
|
+
log.warn("mcp", `tools/list renderer unavailable: ${(e as Error).message} (returning host tools only)`);
|
|
63
63
|
}
|
|
64
64
|
const hostDefs = hostTools.map((t) => ({
|
|
65
65
|
name: t.def.name,
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# `@downdraft/engine/asset-bake`
|
|
2
|
+
|
|
3
|
+
Offline asset baking pipeline — converts and optimizes meshes, textures, and shaders into engine-ready formats at build time.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
bun add @downdraft/engine/asset-bake
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Key exports
|
|
12
|
+
|
|
13
|
+
- `BAKE_CONFIG_VERSION`
|
|
14
|
+
- `BakeCache`
|
|
15
|
+
- `DEFAULT_BAKE_OPTIONS`
|
|
16
|
+
- `bakeAsset`
|
|
17
|
+
- `bakeAssetFromBytes`
|
|
18
|
+
- `bakeAudio`
|
|
19
|
+
- `bakeGltf`
|
|
20
|
+
- `resolveOptions`
|
|
21
|
+
|
|
22
|
+
See the [Downdraft engine repository](https://github.com/knackstedt/downdraft) for architecture docs and examples.
|
package/core/README.md
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# `@downdraft/engine`
|
|
2
|
+
|
|
3
|
+
Downdraft engine core — ECS, WebGPU renderer, module/DI system, SharedArrayBuffer sim channels, sim worker host, plugin API, animation, and particles.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
bun add @downdraft/engine
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Key exports
|
|
12
|
+
|
|
13
|
+
- `AudioEngine`
|
|
14
|
+
- `AudioListener`
|
|
15
|
+
- `AudioMixer`
|
|
16
|
+
- `AudioSABChannel`
|
|
17
|
+
- `AudioSABChannelDef`
|
|
18
|
+
- `AudioSource`
|
|
19
|
+
- `BSPNode`
|
|
20
|
+
- `BaseWorkerHost`
|
|
21
|
+
- `BoneTransforms`
|
|
22
|
+
- `BufferSyncHost`
|
|
23
|
+
- …and 210 more
|
|
24
|
+
|
|
25
|
+
See the [Downdraft engine repository](https://github.com/knackstedt/downdraft) for architecture docs and examples.
|
|
@@ -379,7 +379,7 @@ export class SkeletonAnimator {
|
|
|
379
379
|
this.targetZUp = skin.skeletonUpAxis !== "y";
|
|
380
380
|
this.isMixamoSkeleton = this.boneNameToIndex.has("mixamorig:Hips");
|
|
381
381
|
if (this.isMixamoSkeleton) {
|
|
382
|
-
log.info("
|
|
382
|
+
log.info("anim", "Mixamo skeleton detected — direct animation mapping (no retargeting)");
|
|
383
383
|
}
|
|
384
384
|
}
|
|
385
385
|
|
|
@@ -1138,22 +1138,40 @@ export class SkeletonAnimator {
|
|
|
1138
1138
|
const clip = this.animationDataToClip(mergedAnim, stateName);
|
|
1139
1139
|
if (clip) {
|
|
1140
1140
|
this.clips.set(stateName, clip);
|
|
1141
|
-
log.info("
|
|
1141
|
+
log.info("anim", `Registered: ${stateName} (${allChannels.length} channels, ${this.isMixamoSkeleton ? "direct Mixamo" : "retargeted-v2"})`);
|
|
1142
1142
|
}
|
|
1143
1143
|
}
|
|
1144
1144
|
|
|
1145
|
-
|
|
1145
|
+
/**
|
|
1146
|
+
* Minimum time between state changes. Callers re-request their desired
|
|
1147
|
+
* state every frame, so a blocked request lands as soon as the interval
|
|
1148
|
+
* passes — this only debounces frame-to-frame churn (e.g. a flag toggling
|
|
1149
|
+
* at a boundary), which would otherwise restart the crossfade each frame
|
|
1150
|
+
* and freeze the pose mid-blend. (Was a 0.5s gate, which deferred every
|
|
1151
|
+
* legitimate transition — entering water, landing — by up to half a
|
|
1152
|
+
* second.)
|
|
1153
|
+
*/
|
|
1154
|
+
private static readonly MIN_STATE_INTERVAL = 0.1;
|
|
1155
|
+
|
|
1156
|
+
protected setAnimationState(state: AnimState, fadeDuration?: number): void {
|
|
1146
1157
|
if (state === this.currentState && this.player.isPlaying(state)) return;
|
|
1147
|
-
if (this.timeSinceLastStateChange < 0.5 && this.player.isPlaying()) return;
|
|
1148
1158
|
const clip = this.clips.get(state);
|
|
1149
1159
|
if (!clip) return;
|
|
1160
|
+
if (this.timeSinceLastStateChange < SkeletonAnimator.MIN_STATE_INTERVAL && this.player.isPlaying()) return;
|
|
1150
1161
|
|
|
1151
1162
|
// Use AnimationPlayer's fade for crossfade blending
|
|
1152
|
-
this.player.play(state, clip, { fadeDuration: this.blendDuration });
|
|
1163
|
+
this.player.play(state, clip, { fadeDuration: fadeDuration ?? this.blendDuration });
|
|
1153
1164
|
this.currentState = state;
|
|
1154
1165
|
this.timeSinceLastStateChange = 0;
|
|
1155
1166
|
}
|
|
1156
1167
|
|
|
1168
|
+
/** Scale the playback speed of a currently-playing state's layer (e.g.
|
|
1169
|
+
* faster swim strokes at higher swim velocity). No-op if the state's
|
|
1170
|
+
* clip isn't active. */
|
|
1171
|
+
setStateSpeed(state: AnimState, speed: number): void {
|
|
1172
|
+
this.player.setSpeed(state, speed);
|
|
1173
|
+
}
|
|
1174
|
+
|
|
1157
1175
|
setFootTargets(left: Float32Array | null, right: Float32Array | null): void {
|
|
1158
1176
|
this.leftFootTarget = left;
|
|
1159
1177
|
this.rightFootTarget = right;
|
|
@@ -274,7 +274,7 @@ export class AssetManager {
|
|
|
274
274
|
this.pendingRejectors.delete(uri);
|
|
275
275
|
this.pendingResolvers.delete(uri);
|
|
276
276
|
}
|
|
277
|
-
log.warn("
|
|
277
|
+
log.warn("asset-manager", budgetError.message);
|
|
278
278
|
return;
|
|
279
279
|
}
|
|
280
280
|
|
|
@@ -307,7 +307,7 @@ export class AssetManager {
|
|
|
307
307
|
this.pendingRejectors.delete(uri);
|
|
308
308
|
this.pendingResolvers.delete(uri);
|
|
309
309
|
}
|
|
310
|
-
log.error("
|
|
310
|
+
log.error("asset-manager", `Failed to load ${uri}: ${error.message}`);
|
|
311
311
|
} finally {
|
|
312
312
|
this.loading.delete(uri);
|
|
313
313
|
}
|
|
@@ -365,11 +365,11 @@ export class AssetManager {
|
|
|
365
365
|
const result = destructor(ref.data);
|
|
366
366
|
if (result instanceof Promise) {
|
|
367
367
|
result.catch((e) =>
|
|
368
|
-
log.error("
|
|
368
|
+
log.error("asset-manager", `Destructor error for ${key}: ${e}`),
|
|
369
369
|
);
|
|
370
370
|
}
|
|
371
371
|
} catch (e) {
|
|
372
|
-
log.error("
|
|
372
|
+
log.error("asset-manager", `Destructor error for ${key}: ${e}`);
|
|
373
373
|
}
|
|
374
374
|
}
|
|
375
375
|
this.assets.delete(key);
|
package/core/src/ecs/events.ts
CHANGED
|
@@ -25,7 +25,7 @@ export function createEventChannel<T>(): EventChannel<T> {
|
|
|
25
25
|
droppedCount++;
|
|
26
26
|
if (droppedCount === 1 || droppedCount % 1000 === 0) {
|
|
27
27
|
log.warn(
|
|
28
|
-
"
|
|
28
|
+
"event-channel",
|
|
29
29
|
`queue full (${MAX_QUEUE_SIZE}), dropped ${droppedCount} oldest event(s) total`,
|
|
30
30
|
);
|
|
31
31
|
}
|
package/core/src/ecs/schedule.ts
CHANGED
|
@@ -145,7 +145,7 @@ export class Schedule {
|
|
|
145
145
|
const visit = (name: string, path: Set<string>) => {
|
|
146
146
|
if (visited.has(name)) return;
|
|
147
147
|
if (path.has(name)) {
|
|
148
|
-
log.warn("
|
|
148
|
+
log.warn("schedule", `System dependency cycle detected involving "${name}" — skipping`);
|
|
149
149
|
return;
|
|
150
150
|
}
|
|
151
151
|
const entry = nameToSys.get(name);
|
package/core/src/ecs/world.ts
CHANGED
|
@@ -220,7 +220,7 @@ export class World {
|
|
|
220
220
|
try {
|
|
221
221
|
this.commands[i](this);
|
|
222
222
|
} catch (err) {
|
|
223
|
-
log.error("
|
|
223
|
+
log.error("world", `Command at index ${i} threw: ${err}`);
|
|
224
224
|
// In debug mode, re-throw to surface command errors immediately.
|
|
225
225
|
// In production, log and continue for game-loop resilience.
|
|
226
226
|
if (isDebug()) throw err;
|
package/core/src/index.ts
CHANGED
|
@@ -7,8 +7,6 @@
|
|
|
7
7
|
|
|
8
8
|
/// <reference path="./webgpu-destroy-augmentation.d.ts" />
|
|
9
9
|
|
|
10
|
-
import pkg from "../../package.json" with { type: "json" };
|
|
11
|
-
|
|
12
10
|
// Sub-barrel re-exports — these aggregate all items from their respective domains.
|
|
13
11
|
export * from "./assets";
|
|
14
12
|
export * from "./ecs";
|
|
@@ -26,8 +24,9 @@ export * from "./util";
|
|
|
26
24
|
// Used by the feature log, save headers (via features.saves.engineVersion
|
|
27
25
|
// default), and any code that needs to report the running engine version.
|
|
28
26
|
// Sourced from package.json so it can never drift from the published version.
|
|
27
|
+
// Defined in ./version.ts so leaf-import consumers skip this barrel.
|
|
29
28
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
30
|
-
export
|
|
29
|
+
export { ENGINE_VERSION } from "./version";
|
|
31
30
|
|
|
32
31
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
33
32
|
// Worker (task-worker lives outside ecs/)
|
|
@@ -135,7 +134,7 @@ export {
|
|
|
135
134
|
isDevMode,
|
|
136
135
|
NATIVE_HOST_CAPABILITIES
|
|
137
136
|
} from "./platform/runtime";
|
|
138
|
-
export type { HostCapabilities, HostRuntime, NativeHostHandle } from "./platform/runtime";
|
|
137
|
+
export type { GpuPassMailboxLike, GpuShareBrokerLike, HostCapabilities, HostRuntime, NativeHostHandle } from "./platform/runtime";
|
|
139
138
|
|
|
140
139
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
141
140
|
// Mesh
|
package/core/src/library/host.ts
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
// ============================================================================
|
|
12
12
|
|
|
13
13
|
import type { ResourceToken } from "../ecs/resource";
|
|
14
|
-
import { assertNoDuplicate,
|
|
14
|
+
import { assertNoDuplicate, isStrict, warnLeak } from "../module/diagnostics";
|
|
15
15
|
import { createLogger } from "../util/logger";
|
|
16
16
|
import type {
|
|
17
17
|
EngineLibrary,
|
|
@@ -82,7 +82,7 @@ export class LibraryHostImpl implements LibraryHost {
|
|
|
82
82
|
if (this.buffers[ch.name]) {
|
|
83
83
|
const msg = `SAB channel "${ch.name}" declared by library "${active.lib.name}" is already allocated — duplicate channel names across libraries are not allowed`;
|
|
84
84
|
if (isStrict()) throw new Error(msg);
|
|
85
|
-
log.warn("
|
|
85
|
+
log.warn("library-host", msg);
|
|
86
86
|
continue;
|
|
87
87
|
}
|
|
88
88
|
this.buffers[ch.name] = new SharedArrayBuffer(ch.size);
|
|
@@ -111,14 +111,21 @@ export class LibraryHostImpl implements LibraryHost {
|
|
|
111
111
|
allProviders.set(token.key, active.lib.name);
|
|
112
112
|
});
|
|
113
113
|
});
|
|
114
|
-
|
|
115
|
-
|
|
114
|
+
// Missing `requires` only warns: the library DI graph is OPEN — tokens can
|
|
115
|
+
// be satisfied by game modules or other external providers the host can't
|
|
116
|
+
// enumerate (unlike ModuleHost's closed module graph, which hard-fails).
|
|
117
|
+
// A truly missing provider still throws at `inject()` call time.
|
|
118
|
+
this.libraries.forEach((active) => {
|
|
119
|
+
if (!active.lib.requires) return;
|
|
116
120
|
active.lib.requires.forEach((token) => {
|
|
117
|
-
if (!allProviders.has(token.key)) {
|
|
118
|
-
|
|
121
|
+
if (!allProviders.has(token.key) && !this.providers.has(token.key)) {
|
|
122
|
+
log.warn(
|
|
123
|
+
"library-host",
|
|
124
|
+
`Library "${active.lib.name}" requires "${token.key}" which no library provides — it must be provided by a game module or external provider, or inject() will throw.`,
|
|
125
|
+
);
|
|
119
126
|
}
|
|
120
127
|
});
|
|
121
|
-
}
|
|
128
|
+
});
|
|
122
129
|
}
|
|
123
130
|
|
|
124
131
|
initSim(ctx: LibrarySimContext): void {
|
|
@@ -147,7 +154,7 @@ export class LibraryHostImpl implements LibraryHost {
|
|
|
147
154
|
active.simSystem = null;
|
|
148
155
|
(created as Promise<unknown>).then(
|
|
149
156
|
(resolved) => { active.simSystem = resolved; },
|
|
150
|
-
(err) => { log.error("
|
|
157
|
+
(err) => { log.error("library-host", `async sim.create for "${active.lib.name}" failed: ${err}`); },
|
|
151
158
|
);
|
|
152
159
|
} else {
|
|
153
160
|
active.simSystem = created;
|
|
@@ -243,19 +250,26 @@ export class LibraryHostImpl implements LibraryHost {
|
|
|
243
250
|
}
|
|
244
251
|
}
|
|
245
252
|
|
|
246
|
-
setRendererBuffers(
|
|
247
|
-
|
|
248
|
-
|
|
253
|
+
setRendererBuffers(
|
|
254
|
+
buffers: Record<string, SharedArrayBuffer>,
|
|
255
|
+
ctx?: { provide<T>(token: ResourceToken<T>, value: T): void },
|
|
256
|
+
): void {
|
|
257
|
+
this.libraries.forEach((active) => {
|
|
258
|
+
if (!active.lib.renderer?.setBuffers) return;
|
|
259
|
+
// rendererInstance may be null — libraries whose `init` returned null
|
|
260
|
+
// (non-GPU participants, e.g. water's buffer reader) still get their
|
|
261
|
+
// SABs and can provide resources into the DI graph.
|
|
249
262
|
active.lib.renderer.setBuffers(active.rendererInstance, buffers, {
|
|
250
|
-
provide: (token: ResourceToken<unknown>,
|
|
263
|
+
provide: (token: ResourceToken<unknown>, value: unknown) => {
|
|
251
264
|
if (isStrict()) {
|
|
252
265
|
assertNoDuplicate(this.providers, token, active.lib.name);
|
|
253
266
|
}
|
|
254
267
|
this.providers.set(token.key, active.lib.name);
|
|
255
268
|
active.rendererProvidedKeys.add(token.key);
|
|
269
|
+
ctx?.provide(token, value);
|
|
256
270
|
},
|
|
257
271
|
});
|
|
258
|
-
}
|
|
272
|
+
});
|
|
259
273
|
}
|
|
260
274
|
|
|
261
275
|
drawRenderer(ctx: LibraryRendererDrawContext): void {
|
|
@@ -126,7 +126,9 @@ export interface LibraryRendererSetup<C = unknown, R = unknown> {
|
|
|
126
126
|
init?(config: C, ctx: LibraryRendererInitContext): R | null | undefined;
|
|
127
127
|
/**
|
|
128
128
|
* Called when SABs are set on the renderer (`setBuffers()`).
|
|
129
|
-
* Receives the renderer instance from `init()` + the SABs
|
|
129
|
+
* Receives the renderer instance from `init()`/`create()` + the SABs —
|
|
130
|
+
* the instance may be null when `init()` returned null (libraries that
|
|
131
|
+
* only need the SABs still run).
|
|
130
132
|
* The optional context provides `provide()` for registering resources
|
|
131
133
|
* into the DI graph (e.g. a buffer reader created during setBuffers).
|
|
132
134
|
*/
|
|
@@ -253,8 +255,9 @@ export type LibraryEntry<C = unknown> =
|
|
|
253
255
|
// ── LibraryHost (internal — wires libraries) ──
|
|
254
256
|
|
|
255
257
|
/**
|
|
256
|
-
*
|
|
257
|
-
* and the sim worker
|
|
258
|
+
* Host that manages library lifecycle. Created by `startGame()`
|
|
259
|
+
* and the sim worker; exposed on `GameContext.libraryHost` for diagnostics
|
|
260
|
+
* and advanced wiring. Games normally interact with libraries via
|
|
258
261
|
* the DI graph (`ctx.inject(WaterWriterTok)` etc.).
|
|
259
262
|
*/
|
|
260
263
|
export interface LibraryHost {
|
|
@@ -279,8 +282,13 @@ export interface LibraryHost {
|
|
|
279
282
|
createRenderer(ctx: LibraryRendererCreateContext): void;
|
|
280
283
|
/** Initialize renderer-side passes. Called during renderer init. */
|
|
281
284
|
initRenderer(ctx: LibraryRendererInitContext): void;
|
|
282
|
-
/**
|
|
283
|
-
|
|
285
|
+
/**
|
|
286
|
+
* Set buffers on renderer-side passes. Called during renderer setBuffers.
|
|
287
|
+
* `ctx.provide` (when given) forwards resources into the renderer DI
|
|
288
|
+
* graph — pass it so `setBuffers` implementations that `ctx.provide(...)`
|
|
289
|
+
* (e.g. a SAB reader created at buffer-bind time) are actually injectable.
|
|
290
|
+
*/
|
|
291
|
+
setRendererBuffers(buffers: Record<string, SharedArrayBuffer>, ctx?: { provide<T>(token: ResourceToken<T>, value: T): void }): void;
|
|
284
292
|
/** Draw all renderer-side passes. Called per frame. */
|
|
285
293
|
drawRenderer(ctx: LibraryRendererDrawContext): void;
|
|
286
294
|
/** Dispose all sim-side systems. */
|
|
@@ -32,6 +32,12 @@ export interface CrossThreadToken<T> extends ResourceToken<T> {
|
|
|
32
32
|
* Create a cross-thread resource token. The token is a standard ResourceToken
|
|
33
33
|
* (compatible with provide/inject) with an added `__thread` tag for
|
|
34
34
|
* cross-thread validation and diagnostics.
|
|
35
|
+
*
|
|
36
|
+
* NOTE: experimental — no engine library or module currently creates
|
|
37
|
+
* cross-thread tokens, so the `threadMismatches`/`incompleteShared` checks in
|
|
38
|
+
* `buildCrossThreadReport` are inert. Also, `ModuleHost.snapshot()` only
|
|
39
|
+
* covers Module/RendererModule plugins — EngineLibrary descriptors are not
|
|
40
|
+
* part of the cross-thread report yet.
|
|
35
41
|
*/
|
|
36
42
|
export function crossThreadToken<T>(key: string, thread: ThreadTag): CrossThreadToken<T> {
|
|
37
43
|
const token = resourceToken<T>(key) as CrossThreadToken<T>;
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
// ============================================================================
|
|
14
14
|
|
|
15
15
|
import type { ResourceToken } from "../ecs/resource";
|
|
16
|
+
import { isDev } from "../platform/runtime";
|
|
16
17
|
import { createLogger } from "../util/logger";
|
|
17
18
|
|
|
18
19
|
const log = createLogger();
|
|
@@ -31,13 +32,16 @@ export class DiagnosticError extends Error {
|
|
|
31
32
|
}
|
|
32
33
|
|
|
33
34
|
function readEnv(): boolean {
|
|
34
|
-
//
|
|
35
|
+
// Explicit override always wins.
|
|
35
36
|
const env = (globalThis as any).process?.env?.DOWNDRAFT_STRICT;
|
|
36
|
-
if (env
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
37
|
+
if (env === "1") return true;
|
|
38
|
+
if (env === "0") return false;
|
|
39
|
+
// Default: on in dev, off in prod. `isDev` (platform/runtime.ts) probes
|
|
40
|
+
// Vite's import.meta.env.DEV under the dev shell, then DOWNDRAFT_DEV /
|
|
41
|
+
// NODE_ENV on native runtimes — the previous globalThis.importMetaEnv
|
|
42
|
+
// lookup never observed anything (nothing sets that global), so STRICT
|
|
43
|
+
// was effectively DOWNDRAFT_STRICT=1-only even in dev.
|
|
44
|
+
return isDev;
|
|
41
45
|
}
|
|
42
46
|
|
|
43
47
|
let _strict: boolean | null = null;
|