@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
package/core/src/module/host.ts
CHANGED
|
@@ -187,7 +187,7 @@ export class ModuleHost implements ModuleContext {
|
|
|
187
187
|
this.active.set(plugin.name, active);
|
|
188
188
|
this.currentModuleName = plugin.name;
|
|
189
189
|
try {
|
|
190
|
-
plugin.register(this);
|
|
190
|
+
plugin.register(this.makeContext(plugin.name, active));
|
|
191
191
|
} catch (err) {
|
|
192
192
|
// Roll back partial activation: the module must not stay "active"
|
|
193
193
|
// with half-wired resources. Clean up anything it provided or
|
|
@@ -200,7 +200,7 @@ export class ModuleHost implements ModuleContext {
|
|
|
200
200
|
try {
|
|
201
201
|
active.disposeFns[i]();
|
|
202
202
|
} catch (disposeErr) {
|
|
203
|
-
log.error("
|
|
203
|
+
log.error("module-host", `Dispose error rolling back plugin "${plugin.name}": ${disposeErr}`);
|
|
204
204
|
}
|
|
205
205
|
}
|
|
206
206
|
// Remove systems the module registered before throwing.
|
|
@@ -238,7 +238,7 @@ export class ModuleHost implements ModuleContext {
|
|
|
238
238
|
try {
|
|
239
239
|
active.disposeFns[i]();
|
|
240
240
|
} catch (err) {
|
|
241
|
-
log.error("
|
|
241
|
+
log.error("module-host", `Dispose error in plugin "${name}": ${err}`);
|
|
242
242
|
}
|
|
243
243
|
}
|
|
244
244
|
// Remove the module's systems from the world schedule — otherwise they
|
|
@@ -309,7 +309,7 @@ export class ModuleHost implements ModuleContext {
|
|
|
309
309
|
try {
|
|
310
310
|
this.unattributedDisposeFns[i]();
|
|
311
311
|
} catch (err) {
|
|
312
|
-
log.error("
|
|
312
|
+
log.error("module-host", `Unattributed dispose error: ${err}`);
|
|
313
313
|
}
|
|
314
314
|
}
|
|
315
315
|
this.unattributedDisposeFns.length = 0;
|
|
@@ -321,17 +321,21 @@ export class ModuleHost implements ModuleContext {
|
|
|
321
321
|
|
|
322
322
|
registerSystem(stage: Stage, system: SystemFn): void {
|
|
323
323
|
if (!this.currentModuleName) {
|
|
324
|
-
log.warn("
|
|
324
|
+
log.warn("module-host", "registerSystem called outside a module register() lifecycle — the system will not be attributed to any module");
|
|
325
325
|
}
|
|
326
|
+
this.registerSystemFor(this.currentModuleName || "unattributed", stage, system);
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
private registerSystemFor(owner: string, stage: Stage, system: SystemFn): void {
|
|
326
330
|
this.systemCounter++;
|
|
327
|
-
const name = `module:${
|
|
331
|
+
const name = `module:${owner}:${this.systemCounter}`;
|
|
328
332
|
this.world.schedule.add({
|
|
329
333
|
name,
|
|
330
334
|
stage,
|
|
331
335
|
fn: system,
|
|
332
336
|
queries: [],
|
|
333
337
|
});
|
|
334
|
-
const active = this.active.get(
|
|
338
|
+
const active = this.active.get(owner);
|
|
335
339
|
if (active) {
|
|
336
340
|
active.systemNames.push(name);
|
|
337
341
|
} else {
|
|
@@ -341,10 +345,14 @@ export class ModuleHost implements ModuleContext {
|
|
|
341
345
|
|
|
342
346
|
registerSystemObject(system: System): void {
|
|
343
347
|
if (!this.currentModuleName) {
|
|
344
|
-
log.warn("
|
|
348
|
+
log.warn("module-host", `registerSystemObject("${system.name}") called outside a module register() lifecycle — the system will not be attributed to any module`);
|
|
345
349
|
}
|
|
350
|
+
this.registerSystemObjectFor(this.currentModuleName, system);
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
private registerSystemObjectFor(owner: string, system: System): void {
|
|
346
354
|
this.world.schedule.add(system);
|
|
347
|
-
const active = this.active.get(
|
|
355
|
+
const active = this.active.get(owner);
|
|
348
356
|
if (active) {
|
|
349
357
|
active.systemNames.push(system.name);
|
|
350
358
|
} else {
|
|
@@ -354,10 +362,14 @@ export class ModuleHost implements ModuleContext {
|
|
|
354
362
|
|
|
355
363
|
allocateSABChannel(name: string, size: number): SABChannel {
|
|
356
364
|
if (!this.currentModuleName) {
|
|
357
|
-
log.warn("
|
|
365
|
+
log.warn("module-host", `allocateSABChannel("${name}") called outside a module register() lifecycle — the channel is untracked and won't be cleaned up on unload`);
|
|
358
366
|
}
|
|
367
|
+
return this.allocateSABChannelFor(this.currentModuleName, name, size);
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
private allocateSABChannelFor(owner: string, name: string, size: number): SABChannel {
|
|
359
371
|
const buffer = new SharedArrayBuffer(size);
|
|
360
|
-
const active = this.active.get(
|
|
372
|
+
const active = this.active.get(owner);
|
|
361
373
|
if (active) {
|
|
362
374
|
active.sabChannels.set(name, buffer);
|
|
363
375
|
}
|
|
@@ -366,14 +378,18 @@ export class ModuleHost implements ModuleContext {
|
|
|
366
378
|
|
|
367
379
|
provide<T>(token: ResourceToken<T>, value: T): void {
|
|
368
380
|
if (!this.currentModuleName) {
|
|
369
|
-
log.warn("
|
|
381
|
+
log.warn("module-host", `provide("${token.key}") called outside a module register() lifecycle — the resource won't be cleaned up on unload`);
|
|
370
382
|
}
|
|
383
|
+
this.provideFor(this.currentModuleName, token, value);
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
private provideFor<T>(owner: string, token: ResourceToken<T>, value: T): void {
|
|
371
387
|
if (isStrict()) {
|
|
372
|
-
assertNoDuplicate(this.providers, token as ResourceToken<unknown>,
|
|
388
|
+
assertNoDuplicate(this.providers, token as ResourceToken<unknown>, owner);
|
|
373
389
|
}
|
|
374
390
|
this.resources.set(token.key, { token: token as ResourceToken<unknown>, value });
|
|
375
|
-
this.providers.set(token.key,
|
|
376
|
-
const active = this.active.get(
|
|
391
|
+
this.providers.set(token.key, owner);
|
|
392
|
+
const active = this.active.get(owner);
|
|
377
393
|
if (active) {
|
|
378
394
|
active.providedKeys.add(token.key);
|
|
379
395
|
}
|
|
@@ -393,11 +409,15 @@ export class ModuleHost implements ModuleContext {
|
|
|
393
409
|
}
|
|
394
410
|
|
|
395
411
|
inject<T>(token: ResourceToken<T>): T {
|
|
412
|
+
return this.injectFor(this.currentModuleName, token);
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
private injectFor<T>(owner: string, token: ResourceToken<T>): T {
|
|
396
416
|
const entry = this.resources.get(token.key);
|
|
397
417
|
if (!entry) {
|
|
398
418
|
throw new Error(
|
|
399
|
-
`Module "${
|
|
400
|
-
`Add a
|
|
419
|
+
`Module "${owner}" injects "${token.key}" which is not provided. ` +
|
|
420
|
+
`Add a module that provides it, or use injectOptional() for safe reads.`,
|
|
401
421
|
);
|
|
402
422
|
}
|
|
403
423
|
return entry.value as T;
|
|
@@ -423,7 +443,7 @@ export class ModuleHost implements ModuleContext {
|
|
|
423
443
|
} else {
|
|
424
444
|
// Don't drop the callback silently — run it at disposeAll() so
|
|
425
445
|
// resources registered outside a lifecycle still get cleaned up.
|
|
426
|
-
log.warn("
|
|
446
|
+
log.warn("module-host", "onDispose called outside a module register() lifecycle — the callback will run at disposeAll() instead of being attributed to a module");
|
|
427
447
|
this.unattributedDisposeFns.push(fn);
|
|
428
448
|
}
|
|
429
449
|
}
|
|
@@ -438,6 +458,33 @@ export class ModuleHost implements ModuleContext {
|
|
|
438
458
|
setCurrentPlugin(name: string): void {
|
|
439
459
|
this.currentModuleName = name;
|
|
440
460
|
}
|
|
461
|
+
|
|
462
|
+
/**
|
|
463
|
+
* Per-module context facade handed to `register()`. Lifecycle calls are
|
|
464
|
+
* bound to the owning module at creation time — a module that retains its
|
|
465
|
+
* ctx and calls it later (async callback, or during another module's
|
|
466
|
+
* register()) stays correctly attributed instead of leaking onto whatever
|
|
467
|
+
* module happens to be activating. Mirrors RendererModuleHost.makeContext.
|
|
468
|
+
*/
|
|
469
|
+
private makeContext(name: string, active: ActiveModule): ModuleContext {
|
|
470
|
+
const devtoolsApi = () => this.devtools;
|
|
471
|
+
return {
|
|
472
|
+
// Lazy — the DevTools API may be injected after register() runs;
|
|
473
|
+
// resolving per-access keeps late wiring (setDevToolsAPI) working.
|
|
474
|
+
get devtools() { return devtoolsApi(); },
|
|
475
|
+
registerComponent: (n, s) => this.registerComponent(n, s),
|
|
476
|
+
registerSystem: (stage, system) => this.registerSystemFor(name, stage, system),
|
|
477
|
+
registerSystemObject: (system) => this.registerSystemObjectFor(name, system),
|
|
478
|
+
allocateSABChannel: (n, size) => this.allocateSABChannelFor(name, n, size),
|
|
479
|
+
provide: (token, value) => this.provideFor(name, token, value),
|
|
480
|
+
inject: (token) => this.injectFor(name, token),
|
|
481
|
+
injectOptional: (token) => this.injectOptional(token),
|
|
482
|
+
registerMigration: (fromVersion, fn) => this.registerMigration(fromVersion, fn),
|
|
483
|
+
onDispose: (fn) => {
|
|
484
|
+
active.disposeFns.push(fn);
|
|
485
|
+
},
|
|
486
|
+
};
|
|
487
|
+
}
|
|
441
488
|
}
|
|
442
489
|
|
|
443
490
|
// No-op DevTools API stub — used when setDevToolsAPI() hasn't been called.
|
package/core/src/module/index.ts
CHANGED
|
@@ -66,24 +66,30 @@ export interface ModuleDevToolsAPI {
|
|
|
66
66
|
}
|
|
67
67
|
|
|
68
68
|
export interface ModuleContext {
|
|
69
|
+
/**
|
|
70
|
+
* Register a component name and return its ComponentId.
|
|
71
|
+
* NOTE: `schema` is currently unused — the id is interned by name only
|
|
72
|
+
* (no defaults/definition are registered; use `component()` from the ecs
|
|
73
|
+
* barrel for a full definition). Reserved for future schema validation.
|
|
74
|
+
*/
|
|
69
75
|
registerComponent<T>(name: string, schema: T): ComponentId;
|
|
70
76
|
registerSystem(stage: Stage, system: SystemFn): void;
|
|
71
77
|
/** Register a pre-built System object (with queries) to the world schedule. */
|
|
72
78
|
registerSystemObject(system: System): void;
|
|
73
79
|
allocateSABChannel(name: string, size: number): SABChannel;
|
|
74
80
|
/**
|
|
75
|
-
* Provide a typed resource to the
|
|
81
|
+
* Provide a typed resource to the module graph. Other modules can
|
|
76
82
|
* `inject()` it by the same token. In DOWNDRAFT_STRICT mode, duplicate
|
|
77
83
|
* provides of the same token throw a DiagnosticError.
|
|
78
84
|
*/
|
|
79
85
|
provide<T>(token: ResourceToken<T>, value: T): void;
|
|
80
86
|
/**
|
|
81
|
-
* Read a typed resource provided by another
|
|
87
|
+
* Read a typed resource provided by another module. Throws if the token
|
|
82
88
|
* has no provider (use `injectOptional` for safe reads).
|
|
83
89
|
*/
|
|
84
90
|
inject<T>(token: ResourceToken<T>): T;
|
|
85
91
|
/**
|
|
86
|
-
* Read a typed resource, returning `undefined` if no
|
|
92
|
+
* Read a typed resource, returning `undefined` if no module provides it.
|
|
87
93
|
*/
|
|
88
94
|
injectOptional<T>(token: ResourceToken<T>): T | undefined;
|
|
89
95
|
registerMigration(fromVersion: number, fn: (data: unknown) => unknown): void;
|
|
@@ -100,9 +106,9 @@ export interface Module {
|
|
|
100
106
|
name: string;
|
|
101
107
|
version: string;
|
|
102
108
|
dependencies?: string[];
|
|
103
|
-
/** Typed tokens this
|
|
109
|
+
/** Typed tokens this module provides to the graph. Validated at activation. */
|
|
104
110
|
provides?: ResourceToken<unknown>[];
|
|
105
|
-
/** Typed tokens this
|
|
111
|
+
/** Typed tokens this module requires from the graph. Validated at activation. */
|
|
106
112
|
requires?: ResourceToken<unknown>[];
|
|
107
113
|
register(ctx: ModuleContext): void;
|
|
108
114
|
}
|
|
@@ -125,6 +125,9 @@ export interface ScreenUiCompositor {
|
|
|
125
125
|
render(pass: GPURenderPassEncoder, surfaceWidth: number, surfaceHeight: number): void;
|
|
126
126
|
/** When false for all compositors, no UI pass is opened. */
|
|
127
127
|
hasContent(): boolean;
|
|
128
|
+
/** Draw order — higher renders later (on top). Default 0; the devtools
|
|
129
|
+
* dock uses a large value so it overlays fullscreen game UI panels. */
|
|
130
|
+
order?: number;
|
|
128
131
|
}
|
|
129
132
|
|
|
130
133
|
// ── Renderer plugin context ──
|
|
@@ -164,6 +167,18 @@ export interface RendererModuleContext {
|
|
|
164
167
|
*/
|
|
165
168
|
registerUiCompositor?(c: ScreenUiCompositor): () => void;
|
|
166
169
|
|
|
170
|
+
/**
|
|
171
|
+
* The native host's worker-pass mailbox — workers finish command buffers
|
|
172
|
+
* on a shared-device view and postPass() them into named slots; the
|
|
173
|
+
* renderer drains each slot into the matching submit batch every frame
|
|
174
|
+
* (refs arriving between drains land in the next frame — passes are
|
|
175
|
+
* stale-tolerant, never rendezvous'd). Null off native / before the host
|
|
176
|
+
* boots. Well-known slots: "preSubmit" (joins the frame batch submitted
|
|
177
|
+
* after viewports+postfx), "preUi" (submitted ahead of the UI-composite
|
|
178
|
+
* pass so worker output is visible to the compositor the same frame).
|
|
179
|
+
*/
|
|
180
|
+
getGpuPassMailbox(): import("../platform/runtime").GpuPassMailboxLike | null;
|
|
181
|
+
|
|
167
182
|
// ── Frame / resize hooks ──
|
|
168
183
|
onFrame(phase: FramePhase, fn: FrameHook): () => void;
|
|
169
184
|
onResize(fn: ResizeHook): () => void;
|
|
@@ -111,9 +111,14 @@ if (typeof (globalThis as any).Bun !== "undefined" && typeof (globalThis as any)
|
|
|
111
111
|
// namespace gets cached as a package-looking specifier: re-resolution
|
|
112
112
|
// wraps it in another "dd-css:<dir>" layer per ancestor walked, looping
|
|
113
113
|
// forever at "/" until ENAMETOOLONG.
|
|
114
|
-
|
|
115
|
-
//
|
|
114
|
+
// Prefer the .ts sibling in source layouts; the transpiled npm dist
|
|
115
|
+
// ships css-stub.js. Both are safe baked specifiers — neither
|
|
116
116
|
// re-matches this /\.css$/ filter.
|
|
117
|
+
const { existsSync } = require("node:fs");
|
|
118
|
+
const tsStub = resolve(import.meta.dir, "css-stub.ts");
|
|
119
|
+
const stub = existsSync(tsStub)
|
|
120
|
+
? tsStub
|
|
121
|
+
: resolve(import.meta.dir, "css-stub.js");
|
|
117
122
|
build.onResolve({ filter: /\.css$/ }, () => ({ path: stub }));
|
|
118
123
|
// Transpile-cache entries written by older versions still carry
|
|
119
124
|
// "dd-css:<...>" specifiers — Bun routes those straight to the namespace
|
|
@@ -72,10 +72,13 @@ export function createGlob(callerDir: string): (pattern: string, options?: any)
|
|
|
72
72
|
|
|
73
73
|
allFiles.forEach((file) => {
|
|
74
74
|
const relPath = relative(fsCallerDir, file).replace(/\\/g, "/");
|
|
75
|
-
|
|
76
|
-
|
|
75
|
+
// Vite-style keys: `./x` for same-dir/child paths, `../x` for parent
|
|
76
|
+
// traversal — NOT `./../x`. Callers match on these keys (startsWith
|
|
77
|
+
// on the pattern's literal prefix, endsWith on subpaths).
|
|
78
|
+
const key = relPath.startsWith("..") ? relPath : "./" + relPath;
|
|
79
|
+
if (matchRegex.test(relPath) || matchRegex.test(key)) {
|
|
77
80
|
// For ?url queries, return the file:// URL
|
|
78
|
-
result[
|
|
81
|
+
result[key] = pathToFileURL(file).href;
|
|
79
82
|
}
|
|
80
83
|
});
|
|
81
84
|
return result;
|
|
@@ -95,11 +98,15 @@ export function createGlob(callerDir: string): (pattern: string, options?: any)
|
|
|
95
98
|
// converged on:
|
|
96
99
|
// 1. `__nativeGlob` — installed by the native host (platform-native's
|
|
97
100
|
// installAssetGlob); caller-relative via the baseDir argument.
|
|
98
|
-
// 2. `import.meta.glob` —
|
|
99
|
-
//
|
|
100
|
-
//
|
|
101
|
+
// 2. `import.meta.glob` — a real implementation only ever exists when a
|
|
102
|
+
// Vite transform rewrote a LITERAL `import.meta.glob(` call at the call
|
|
103
|
+
// site; a passed-around meta object can't carry it. On Vite's
|
|
104
|
+
// ModuleRunner the meta object DOES expose a `glob` property — but it
|
|
105
|
+
// is a stub that throws ("statically replaced during file
|
|
106
|
+
// transformation"), so the probe must tolerate the throw.
|
|
101
107
|
// 3. `createGlob(callerDir)` — filesystem glob relative to the caller's
|
|
102
|
-
// module dir (packaged binaries, bare runtimes without the host global
|
|
108
|
+
// module dir (packaged binaries, bare runtimes without the host global,
|
|
109
|
+
// and the dev ModuleRunner where `meta.glob` is the throwing stub).
|
|
103
110
|
//
|
|
104
111
|
// Usage:
|
|
105
112
|
// const models = globAssets("../assets/models/*.glb", import.meta);
|
|
@@ -118,7 +125,9 @@ export function globAssets(
|
|
|
118
125
|
return (native as (p: string, o?: unknown, baseDir?: string) => Record<string, string>)(pattern, opts, callerDir);
|
|
119
126
|
}
|
|
120
127
|
if (typeof meta.glob === "function") {
|
|
121
|
-
|
|
128
|
+
try {
|
|
129
|
+
return (meta.glob as (p: string, o?: unknown) => Record<string, string>)(pattern, opts);
|
|
130
|
+
} catch { /* ModuleRunner stub — fall through to the filesystem glob */ }
|
|
122
131
|
}
|
|
123
132
|
return createGlob(callerDir)(pattern, opts);
|
|
124
133
|
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// pkg-root.ts — package-root resolution for module-relative paths
|
|
3
|
+
//
|
|
4
|
+
// Modules that resolve package-relative paths (native crate dirs, staged
|
|
5
|
+
// asset roots) must anchor at the package root rather than hardcoding a
|
|
6
|
+
// ".." segment count: the transpiled npm dist/ nests modules one level
|
|
7
|
+
// deeper than src/, so source-relative math escapes into dist/.
|
|
8
|
+
// ============================================================================
|
|
9
|
+
|
|
10
|
+
import { existsSync } from "node:fs";
|
|
11
|
+
import { dirname, join } from "node:path";
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Nearest ancestor directory containing a package.json, walking up from
|
|
15
|
+
* `fromDir`. Layout-agnostic — a module under src/ and its transpiled copy
|
|
16
|
+
* under dist/src/ resolve to the same package root. Falls back to
|
|
17
|
+
* `fromDir` when no package.json ancestor exists (bare file imports).
|
|
18
|
+
*/
|
|
19
|
+
export function findPackageRoot(fromDir: string): string {
|
|
20
|
+
let dir = fromDir;
|
|
21
|
+
for (;;) {
|
|
22
|
+
if (existsSync(join(dir, "package.json"))) return dir;
|
|
23
|
+
const parent = dirname(dir);
|
|
24
|
+
if (parent === dir) return fromDir;
|
|
25
|
+
dir = parent;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -113,12 +113,41 @@ export function getHostCapabilities(): HostCapabilities {
|
|
|
113
113
|
return DOM_HOST_CAPABILITIES;
|
|
114
114
|
}
|
|
115
115
|
|
|
116
|
+
/** Structural view of the native host's per-device shared-GPU broker —
|
|
117
|
+
* typed here because platform-native is an optional peer. payload() yields
|
|
118
|
+
* the {gpu, cells} attach payload a worker needs for attachSharedDevice(). */
|
|
119
|
+
export interface GpuShareBrokerLike {
|
|
120
|
+
payload(): { gpu: unknown; cells: SharedArrayBuffer };
|
|
121
|
+
attached(): number;
|
|
122
|
+
isAlive(): boolean;
|
|
123
|
+
markLost(): void;
|
|
124
|
+
retire(timeoutMs?: number): Promise<boolean>;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/** Structural view of the native host's worker-pass mailbox — the renderer
|
|
128
|
+
* drains named slots into its submit batches; producers postPass() into
|
|
129
|
+
* them. See gpu/pass-channel.ts for slot conventions. */
|
|
130
|
+
export interface GpuPassMailboxLike {
|
|
131
|
+
/** Listen for gpuPass messages on a worker's message stream. */
|
|
132
|
+
watch(worker: { addEventListener(type: "message", fn: (e: { data: unknown }) => void): void; removeEventListener(type: "message", fn: (e: { data: unknown }) => void): void }): () => void;
|
|
133
|
+
/** Feed a raw message — for workers whose stream is owned elsewhere. */
|
|
134
|
+
feed(msg: unknown): boolean;
|
|
135
|
+
/** Import all pending refs for `slot` into owning command buffers —
|
|
136
|
+
* renderer-only; call right before the submit they should join. */
|
|
137
|
+
drain(slot: string): GPUCommandBuffer[];
|
|
138
|
+
}
|
|
139
|
+
|
|
116
140
|
/** The subset of the live native host object games legitimately reach for —
|
|
117
141
|
* primarily its GPU handles until the renderer gets an injected device
|
|
118
142
|
* (Phase 2 of the native re-architecture). */
|
|
119
143
|
export interface NativeHostHandle {
|
|
120
144
|
device?: GPUDevice;
|
|
121
145
|
adapter?: GPUAdapter;
|
|
146
|
+
/** Per-device shared-GPU broker (native only) — workers attach through
|
|
147
|
+
* payload() so one liveness cells set reaches every consumer. */
|
|
148
|
+
gpuShare?: GpuShareBrokerLike;
|
|
149
|
+
/** Mailbox for worker-produced command buffers drained by the renderer. */
|
|
150
|
+
passMailbox?: GpuPassMailboxLike;
|
|
122
151
|
[key: string]: unknown;
|
|
123
152
|
}
|
|
124
153
|
|
|
@@ -66,7 +66,7 @@ export async function discoverPlugins(
|
|
|
66
66
|
const r = host.discover(manifest, baseUrl);
|
|
67
67
|
if (!r.ok) {
|
|
68
68
|
rejected.push({ id: manifest.id, errors: r.errors });
|
|
69
|
-
log.warn("
|
|
69
|
+
log.warn("plugin-host", `Rejected manifest "${manifest.id}": ${r.errors.join("; ")}`);
|
|
70
70
|
}
|
|
71
71
|
});
|
|
72
72
|
await host.loadAll();
|
|
@@ -71,16 +71,18 @@ export function createAssetLoader(registry: AssetRegistry): ExtensionLoader {
|
|
|
71
71
|
const id = a.id;
|
|
72
72
|
switch (a.kind) {
|
|
73
73
|
case "mesh":
|
|
74
|
-
|
|
74
|
+
// Pathless mesh = procedural primitive prop (shape/physics meta
|
|
75
|
+
// only). Pass "" so the registry registers an empty URL.
|
|
76
|
+
await registry.registerMesh(id, a.path ?? "", manifestId, a as Record<string, unknown>);
|
|
75
77
|
return () => { registry.unregisterMesh(id); };
|
|
76
78
|
case "texture":
|
|
77
|
-
await registry.registerTexture(id, a.path, manifestId, a as Record<string, unknown>);
|
|
79
|
+
await registry.registerTexture(id, a.path ?? "", manifestId, a as Record<string, unknown>);
|
|
78
80
|
return () => { registry.unregisterTexture(id); };
|
|
79
81
|
case "pbr-material":
|
|
80
|
-
await registry.registerPBRMaterial(id, a.path, manifestId, a);
|
|
82
|
+
await registry.registerPBRMaterial(id, a.path ?? "", manifestId, a);
|
|
81
83
|
return () => { registry.unregisterPBRMaterial(id); };
|
|
82
84
|
case "texture-pipeline":
|
|
83
|
-
await registry.registerTexturePipeline(id, a.path, manifestId, a);
|
|
85
|
+
await registry.registerTexturePipeline(id, a.path ?? "", manifestId, a);
|
|
84
86
|
return () => { registry.unregisterTexturePipeline(id); };
|
|
85
87
|
default:
|
|
86
88
|
throw new Error(`Unknown asset kind: ${(a as any).kind}`);
|
package/core/src/plugin/host.ts
CHANGED
|
@@ -175,7 +175,7 @@ export class PluginHost {
|
|
|
175
175
|
*/
|
|
176
176
|
publishEvent(event: string, data: unknown): void {
|
|
177
177
|
if (this.opts.eventCatalog && !(event in this.opts.eventCatalog)) {
|
|
178
|
-
log.warn("
|
|
178
|
+
log.warn("plugin-host", `publishEvent("${event}") — not in the game's event catalog; delivering anyway`);
|
|
179
179
|
}
|
|
180
180
|
this.eventBus.publish(event, data);
|
|
181
181
|
}
|
|
@@ -190,7 +190,7 @@ export class PluginHost {
|
|
|
190
190
|
try {
|
|
191
191
|
drain(dt, elapsedTime);
|
|
192
192
|
} catch (e) {
|
|
193
|
-
log.error("
|
|
193
|
+
log.error("plugin-host", `Plugin tick error: ${(e as Error).message}`);
|
|
194
194
|
}
|
|
195
195
|
}
|
|
196
196
|
for (const loader of this.loaders.values()) {
|
|
@@ -252,7 +252,7 @@ export class PluginHost {
|
|
|
252
252
|
try {
|
|
253
253
|
order = this.registry.resolveOrder();
|
|
254
254
|
} catch (e) {
|
|
255
|
-
log.error("
|
|
255
|
+
log.error("plugin-host", `Dependency resolution failed: ${(e as Error).message}`);
|
|
256
256
|
// Mark all discovered as errored.
|
|
257
257
|
for (const [id, d] of this.discovered.entries()) {
|
|
258
258
|
this.active.set(id, {
|
|
@@ -286,7 +286,7 @@ export class PluginHost {
|
|
|
286
286
|
error: "a dependency failed to load",
|
|
287
287
|
source: d.source,
|
|
288
288
|
});
|
|
289
|
-
log.warn("
|
|
289
|
+
log.warn("plugin-host", `Skipping "${id}" — dependency failed`);
|
|
290
290
|
continue;
|
|
291
291
|
}
|
|
292
292
|
await this.loadOne(id);
|
|
@@ -313,7 +313,7 @@ export class PluginHost {
|
|
|
313
313
|
error: `no loader registered for format "${logicFormat}"`,
|
|
314
314
|
source: d.source,
|
|
315
315
|
});
|
|
316
|
-
log.error("
|
|
316
|
+
log.error("plugin-host", `No loader for "${id}" (format ${logicFormat})`);
|
|
317
317
|
return;
|
|
318
318
|
}
|
|
319
319
|
const granted = resolvePermissions(
|
|
@@ -346,7 +346,7 @@ export class PluginHost {
|
|
|
346
346
|
for (let _i = 0, _it = exts, _n = _it.length; _i < _n; _i++) { const ext = _it[_i];
|
|
347
347
|
const extLoader = this.extensionLoaders.get(ext.bucket);
|
|
348
348
|
if (!extLoader) {
|
|
349
|
-
log.warn("
|
|
349
|
+
log.warn("plugin-host", `No extension loader for bucket "${ext.bucket}" (mod "${id}") — skipping`);
|
|
350
350
|
continue;
|
|
351
351
|
}
|
|
352
352
|
try {
|
|
@@ -356,17 +356,17 @@ export class PluginHost {
|
|
|
356
356
|
a.disposeFns.push(dispose);
|
|
357
357
|
}
|
|
358
358
|
} catch (e) {
|
|
359
|
-
log.error("
|
|
359
|
+
log.error("plugin-host", `Extension load error in "${id}" (${ext.bucket}): ${(e as Error).message}`);
|
|
360
360
|
}
|
|
361
361
|
}
|
|
362
362
|
const a = this.active.get(id)!;
|
|
363
363
|
a.status = "active";
|
|
364
|
-
log.info("
|
|
364
|
+
log.info("plugin-host", `Loaded mod "${id}" (${logicFormat ?? "data"}/${m.tier})`);
|
|
365
365
|
} catch (e) {
|
|
366
366
|
const a = this.active.get(id)!;
|
|
367
367
|
a.status = "error";
|
|
368
368
|
a.error = (e as Error).message;
|
|
369
|
-
log.error("
|
|
369
|
+
log.error("plugin-host", `Failed to load mod "${id}": ${(e as Error).message}`);
|
|
370
370
|
}
|
|
371
371
|
}
|
|
372
372
|
|
|
@@ -442,7 +442,7 @@ export class PluginHost {
|
|
|
442
442
|
const catalog = this.opts.eventCatalog;
|
|
443
443
|
const check = (event: string, op: string) => {
|
|
444
444
|
if (catalog && !(event in catalog)) {
|
|
445
|
-
log.warn("
|
|
445
|
+
log.warn("plugin-host", `plugin "${pluginId}" ${op} unknown event "${event}" (not in catalog)`);
|
|
446
446
|
}
|
|
447
447
|
};
|
|
448
448
|
return {
|
|
@@ -466,7 +466,7 @@ export class PluginHost {
|
|
|
466
466
|
try {
|
|
467
467
|
a.disposeFns[i]();
|
|
468
468
|
} catch (e) {
|
|
469
|
-
log.error("
|
|
469
|
+
log.error("plugin-host", `Dispose error in plugin "${id}": ${(e as Error).message}`);
|
|
470
470
|
}
|
|
471
471
|
}
|
|
472
472
|
this.active.delete(id);
|
|
@@ -488,7 +488,7 @@ export class PluginHost {
|
|
|
488
488
|
async reload(id: string): Promise<void> {
|
|
489
489
|
const d = this.discovered.get(id);
|
|
490
490
|
if (!d) {
|
|
491
|
-
log.warn("
|
|
491
|
+
log.warn("plugin-host", `reload: "${id}" not discovered`);
|
|
492
492
|
return;
|
|
493
493
|
}
|
|
494
494
|
this.unload(id);
|
|
@@ -649,7 +649,7 @@ function fmt(msg: string, args: unknown[]): string {
|
|
|
649
649
|
}
|
|
650
650
|
|
|
651
651
|
function makeLogger(_pluginId: string): PluginLogger {
|
|
652
|
-
const prefix = `
|
|
652
|
+
const prefix = `plugin:${_pluginId}`;
|
|
653
653
|
return {
|
|
654
654
|
info: (msg, ...args) => log.info(prefix, fmt(msg, args)),
|
|
655
655
|
warn: (msg, ...args) => log.warn(prefix, fmt(msg, args)),
|
|
@@ -67,7 +67,7 @@ export class AssetPluginLoader implements PluginLoader {
|
|
|
67
67
|
await am.load(path);
|
|
68
68
|
loaded.push(path);
|
|
69
69
|
} catch (e) {
|
|
70
|
-
log.error("
|
|
70
|
+
log.error("asset-plugin-loader", `Failed to load texture "${path}" for plugin "${manifest.id}": ${(e as Error).message}`);
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
73
|
for (let _i = 0, _it = assets.audio ?? [], _n = _it.length; _i < _n; _i++) { const path = _it[_i];
|
|
@@ -75,7 +75,7 @@ export class AssetPluginLoader implements PluginLoader {
|
|
|
75
75
|
await am.load(path);
|
|
76
76
|
loaded.push(path);
|
|
77
77
|
} catch (e) {
|
|
78
|
-
log.error("
|
|
78
|
+
log.error("asset-plugin-loader", `Failed to load audio "${path}" for plugin "${manifest.id}": ${(e as Error).message}`);
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
81
|
for (let _i = 0, _it = assets.meshes ?? [], _n = _it.length; _i < _n; _i++) { const path = _it[_i];
|
|
@@ -83,7 +83,7 @@ export class AssetPluginLoader implements PluginLoader {
|
|
|
83
83
|
await am.load(path);
|
|
84
84
|
loaded.push(path);
|
|
85
85
|
} catch (e) {
|
|
86
|
-
log.error("
|
|
86
|
+
log.error("asset-plugin-loader", `Failed to load mesh "${path}" for plugin "${manifest.id}": ${(e as Error).message}`);
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
89
|
// Data files (JSON etc.) — loaded as raw text via the generic loader.
|
|
@@ -92,12 +92,12 @@ export class AssetPluginLoader implements PluginLoader {
|
|
|
92
92
|
await am.load(path);
|
|
93
93
|
loaded.push(path);
|
|
94
94
|
} catch (e) {
|
|
95
|
-
log.error("
|
|
95
|
+
log.error("asset-plugin-loader", `Failed to load data "${path}" for plugin "${manifest.id}": ${(e as Error).message}`);
|
|
96
96
|
}
|
|
97
97
|
}
|
|
98
98
|
|
|
99
99
|
this.loadedUris.set(manifest.id, loaded);
|
|
100
|
-
log.info("
|
|
100
|
+
log.info("asset-plugin-loader", `Loaded ${loaded.length} asset(s) for plugin "${manifest.id}" from ${base}`);
|
|
101
101
|
|
|
102
102
|
return () => this.dispose(manifest.id);
|
|
103
103
|
}
|
|
@@ -69,7 +69,7 @@ export class QuickjsPluginLoader implements PluginLoader {
|
|
|
69
69
|
bridge.eval(`register(ddPlugin);`, `${entryUrl}#register`);
|
|
70
70
|
|
|
71
71
|
bridge.drainJobs();
|
|
72
|
-
log.info("
|
|
72
|
+
log.info("quickjs-plugin-loader", `Loaded QuickJS plugin "${manifest.id}"`);
|
|
73
73
|
|
|
74
74
|
return () => {
|
|
75
75
|
bridge.dispose();
|
|
@@ -267,7 +267,7 @@ export class InlineWasmPluginLoader implements PluginLoader {
|
|
|
267
267
|
(subscriptions as any).__tickUnsub = unsub;
|
|
268
268
|
}
|
|
269
269
|
|
|
270
|
-
log.info("
|
|
270
|
+
log.info("inline-wasm-plugin-loader", `Loaded WASM plugin "${manifest.id}"`);
|
|
271
271
|
|
|
272
272
|
return () => {
|
|
273
273
|
const unsubTick = (subscriptions as any).__tickUnsub;
|
|
@@ -319,7 +319,7 @@ export class WasmPluginLoader implements PluginLoader {
|
|
|
319
319
|
});
|
|
320
320
|
|
|
321
321
|
worker.onerror = (e) => {
|
|
322
|
-
log.error("
|
|
322
|
+
log.error("wasm-plugin-loader", `worker error for "${manifest.id}": ${e.message}`);
|
|
323
323
|
};
|
|
324
324
|
|
|
325
325
|
// Send init message with the WASM URL.
|
|
@@ -395,7 +395,7 @@ export class WasmPluginLoader implements PluginLoader {
|
|
|
395
395
|
});
|
|
396
396
|
|
|
397
397
|
await ready;
|
|
398
|
-
log.info("
|
|
398
|
+
log.info("wasm-plugin-loader", `Loaded WASM plugin "${manifest.id}" in dedicated worker`);
|
|
399
399
|
|
|
400
400
|
return () => {
|
|
401
401
|
worker.postMessage({ __wasmDispose: true });
|
|
@@ -73,7 +73,7 @@ export class WorkerPluginLoader implements PluginLoader {
|
|
|
73
73
|
// sim-thread worker-js plugins are loaded by the sim worker's own host
|
|
74
74
|
// via direct dynamic import (not this loader). Renderer-side host skips.
|
|
75
75
|
log.info(
|
|
76
|
-
"
|
|
76
|
+
"worker-plugin-loader",
|
|
77
77
|
`plugin "${manifest.id}" thread=${manifest.thread} — skipping on this host (sim-side host loads it)`,
|
|
78
78
|
);
|
|
79
79
|
return;
|