murow 0.0.70 → 0.0.72
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +54 -37
- package/dist/cjs/core/binary-codec/binary-codec.js +1 -0
- package/dist/cjs/core/binary-codec/index.js +1 -0
- package/dist/cjs/core/driver/driver.js +1 -0
- package/dist/cjs/core/driver/drivers/immediate.js +1 -0
- package/dist/cjs/core/driver/drivers/index.js +1 -0
- package/dist/cjs/core/driver/drivers/raf.js +1 -0
- package/dist/cjs/core/driver/drivers/timeout.js +1 -0
- package/dist/cjs/core/driver/index.js +1 -0
- package/dist/cjs/core/events/event-system.js +1 -0
- package/dist/cjs/core/events/index.js +1 -0
- package/dist/cjs/core/fixed-ticker/fixed-ticker.js +1 -0
- package/dist/cjs/core/fixed-ticker/index.js +1 -0
- package/dist/cjs/core/free-list/free-list.js +1 -0
- package/dist/cjs/core/free-list/index.js +1 -0
- package/dist/cjs/core/generate-id/generate-id.js +1 -0
- package/dist/cjs/core/generate-id/index.js +1 -0
- package/dist/cjs/core/index.js +1 -0
- package/dist/cjs/core/input/index.js +1 -0
- package/dist/cjs/core/input/manager.js +1 -0
- package/dist/cjs/core/input/sources/browser.js +1 -0
- package/dist/cjs/core/input/sources/index.js +1 -0
- package/dist/cjs/core/input/types.js +1 -0
- package/dist/cjs/core/lerp/index.js +1 -0
- package/dist/cjs/core/lerp/lerp.js +1 -0
- package/dist/cjs/core/navmesh/index.js +1 -0
- package/dist/cjs/core/navmesh/navmesh-worker-pool.js +1 -0
- package/dist/cjs/core/navmesh/navmesh.js +1 -0
- package/dist/cjs/core/navmesh/navmesh.worker.js +1 -0
- package/dist/cjs/core/pooled-codec/index.js +1 -0
- package/dist/cjs/core/pooled-codec/pooled-codec.js +1 -0
- package/dist/cjs/core/prediction/index.js +1 -0
- package/dist/cjs/core/prediction/prediction.js +1 -0
- package/dist/cjs/core/ray/index.js +1 -0
- package/dist/cjs/core/ray/ray-2d.js +1 -0
- package/dist/cjs/core/ray/ray-3d.js +1 -0
- package/dist/cjs/core/simple-rng/index.js +1 -0
- package/dist/cjs/core/simple-rng/simple-rng.js +1 -0
- package/dist/cjs/core/sparse-batcher/index.js +1 -0
- package/dist/cjs/core/sparse-batcher/sparse-batcher.js +1 -0
- package/dist/cjs/ecs/component-store.js +1 -0
- package/dist/cjs/ecs/component.js +1 -0
- package/dist/cjs/ecs/entity-handle.js +1 -0
- package/dist/cjs/ecs/index.js +1 -0
- package/dist/cjs/ecs/system-builder.js +1 -0
- package/dist/cjs/ecs/world-systems.js +1 -0
- package/dist/cjs/ecs/world.js +1 -0
- package/dist/cjs/game/index.js +1 -0
- package/dist/cjs/game/loop/index.js +1 -0
- package/dist/cjs/game/loop/loop.js +1 -0
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/net/adapters/browser-websocket.js +1 -0
- package/dist/cjs/net/adapters/bun-websocket.js +1 -0
- package/dist/cjs/net/buffer-pool.js +1 -0
- package/dist/cjs/net/client.js +1 -0
- package/dist/cjs/net/index.js +1 -0
- package/dist/cjs/net/server.js +1 -0
- package/dist/cjs/net/types.js +1 -0
- package/dist/cjs/net/validators.js +1 -0
- package/dist/cjs/protocol/index.js +1 -0
- package/dist/cjs/protocol/intent/define-intent.js +1 -0
- package/dist/cjs/protocol/intent/index.js +1 -0
- package/dist/cjs/protocol/intent/intent-registry.js +1 -0
- package/dist/cjs/protocol/intent/intent.js +1 -0
- package/dist/cjs/protocol/rpc/define-rpc.js +1 -0
- package/dist/cjs/protocol/rpc/index.js +1 -0
- package/dist/cjs/protocol/rpc/rpc-registry.js +1 -0
- package/dist/cjs/protocol/rpc/rpc.js +1 -0
- package/dist/cjs/protocol/snapshot/index.js +1 -0
- package/dist/cjs/protocol/snapshot/snapshot-codec.js +1 -0
- package/dist/cjs/protocol/snapshot/snapshot-registry.js +1 -0
- package/dist/cjs/protocol/snapshot/snapshot.js +1 -0
- package/dist/cjs/renderer/base/renderer-2d.js +1 -0
- package/dist/cjs/renderer/base/renderer-3d.js +1 -0
- package/dist/cjs/renderer/base/renderer.js +1 -0
- package/dist/cjs/renderer/gltf/helpers.js +1 -0
- package/dist/cjs/renderer/gltf/parser.js +1 -0
- package/dist/cjs/renderer/gltf/skeletal-animation.js +1 -0
- package/dist/cjs/renderer/gltf/skin-parser.js +1 -0
- package/dist/cjs/renderer/index.js +1 -0
- package/dist/cjs/renderer/math.js +1 -0
- package/dist/cjs/renderer/prefab-bucket/concrete.js +1 -0
- package/dist/cjs/renderer/prefab-bucket/index.js +1 -0
- package/dist/cjs/renderer/prefab-bucket/parsers.js +1 -0
- package/dist/cjs/renderer/prefab-bucket/specs.js +1 -0
- package/dist/cjs/renderer/spritesheet/helpers.js +1 -0
- package/dist/cjs/renderer/spritesheet/parser.js +1 -0
- package/dist/cjs/renderer/types.js +1 -0
- package/dist/esm/core/binary-codec/binary-codec.js +1 -0
- package/dist/esm/core/binary-codec/index.js +1 -0
- package/dist/esm/core/driver/driver.js +1 -0
- package/dist/esm/core/driver/drivers/immediate.js +1 -0
- package/dist/esm/core/driver/drivers/index.js +1 -0
- package/dist/esm/core/driver/drivers/raf.js +1 -0
- package/dist/esm/core/driver/drivers/timeout.js +1 -0
- package/dist/esm/core/driver/index.js +1 -0
- package/dist/esm/core/events/event-system.js +1 -0
- package/dist/esm/core/events/index.js +1 -0
- package/dist/esm/core/fixed-ticker/fixed-ticker.js +1 -0
- package/dist/esm/core/fixed-ticker/index.js +1 -0
- package/dist/esm/core/free-list/free-list.js +1 -0
- package/dist/esm/core/free-list/index.js +1 -0
- package/dist/esm/core/generate-id/generate-id.js +1 -0
- package/dist/esm/core/generate-id/index.js +1 -0
- package/dist/esm/core/index.js +1 -0
- package/dist/esm/core/input/index.js +1 -0
- package/dist/esm/core/input/manager.js +1 -0
- package/dist/esm/core/input/sources/browser.js +1 -0
- package/dist/esm/core/input/sources/index.js +1 -0
- package/dist/esm/core/input/types.js +0 -0
- package/dist/esm/core/lerp/index.js +1 -0
- package/dist/esm/core/lerp/lerp.js +1 -0
- package/dist/esm/core/navmesh/index.js +1 -0
- package/dist/esm/core/navmesh/navmesh-worker-pool.js +1 -0
- package/dist/esm/core/navmesh/navmesh.js +1 -0
- package/dist/esm/core/navmesh/navmesh.worker.js +1 -0
- package/dist/esm/core/pooled-codec/index.js +1 -0
- package/dist/esm/core/pooled-codec/pooled-codec.js +1 -0
- package/dist/esm/core/prediction/index.js +1 -0
- package/dist/esm/core/prediction/prediction.js +1 -0
- package/dist/esm/core/ray/index.js +1 -0
- package/dist/esm/core/ray/ray-2d.js +1 -0
- package/dist/esm/core/ray/ray-3d.js +1 -0
- package/dist/esm/core/simple-rng/index.js +1 -0
- package/dist/esm/core/simple-rng/simple-rng.js +1 -0
- package/dist/esm/core/sparse-batcher/index.js +1 -0
- package/dist/esm/core/sparse-batcher/sparse-batcher.js +1 -0
- package/dist/esm/ecs/component-store.js +1 -0
- package/dist/esm/ecs/component.js +1 -0
- package/dist/esm/ecs/entity-handle.js +1 -0
- package/dist/esm/ecs/index.js +1 -0
- package/dist/esm/ecs/system-builder.js +1 -0
- package/dist/esm/ecs/world-systems.js +1 -0
- package/dist/esm/ecs/world.js +1 -0
- package/dist/esm/game/index.js +1 -0
- package/dist/esm/game/loop/index.js +1 -0
- package/dist/esm/game/loop/loop.js +1 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/net/adapters/browser-websocket.js +1 -0
- package/dist/esm/net/adapters/bun-websocket.js +1 -0
- package/dist/esm/net/buffer-pool.js +1 -0
- package/dist/esm/net/client.js +1 -0
- package/dist/esm/net/index.js +1 -0
- package/dist/esm/net/server.js +1 -0
- package/dist/esm/net/types.js +1 -0
- package/dist/esm/net/validators.js +1 -0
- package/dist/esm/protocol/index.js +1 -0
- package/dist/esm/protocol/intent/define-intent.js +1 -0
- package/dist/esm/protocol/intent/index.js +1 -0
- package/dist/esm/protocol/intent/intent-registry.js +1 -0
- package/dist/esm/protocol/intent/intent.js +0 -0
- package/dist/esm/protocol/rpc/define-rpc.js +1 -0
- package/dist/esm/protocol/rpc/index.js +1 -0
- package/dist/esm/protocol/rpc/rpc-registry.js +1 -0
- package/dist/esm/protocol/rpc/rpc.js +0 -0
- package/dist/esm/protocol/snapshot/index.js +1 -0
- package/dist/esm/protocol/snapshot/snapshot-codec.js +1 -0
- package/dist/esm/protocol/snapshot/snapshot-registry.js +1 -0
- package/dist/esm/protocol/snapshot/snapshot.js +1 -0
- package/dist/esm/renderer/base/renderer-2d.js +1 -0
- package/dist/esm/renderer/base/renderer-3d.js +1 -0
- package/dist/esm/renderer/base/renderer.js +1 -0
- package/dist/esm/renderer/gltf/helpers.js +1 -0
- package/dist/esm/renderer/gltf/parser.js +1 -0
- package/dist/esm/renderer/gltf/skeletal-animation.js +1 -0
- package/dist/esm/renderer/gltf/skin-parser.js +1 -0
- package/dist/esm/renderer/index.js +1 -0
- package/dist/esm/renderer/math.js +1 -0
- package/dist/esm/renderer/prefab-bucket/concrete.js +1 -0
- package/dist/esm/renderer/prefab-bucket/index.js +1 -0
- package/dist/esm/renderer/prefab-bucket/parsers.js +1 -0
- package/dist/esm/renderer/prefab-bucket/specs.js +0 -0
- package/dist/esm/renderer/spritesheet/helpers.js +1 -0
- package/dist/esm/renderer/spritesheet/parser.js +1 -0
- package/dist/esm/renderer/types.js +0 -0
- package/dist/{core → types/core}/binary-codec/binary-codec.d.ts +4 -0
- package/dist/{core → types/core}/events/event-system.d.ts +14 -33
- package/dist/types/core/free-list/free-list.d.ts +31 -0
- package/dist/types/core/free-list/index.d.ts +1 -0
- package/dist/{core → types/core}/index.d.ts +5 -0
- package/dist/{core → types/core}/input/index.d.ts +1 -0
- package/dist/{core → types/core}/input/manager.d.ts +2 -0
- package/dist/{core → types/core}/navmesh/navmesh.d.ts +1 -21
- package/dist/types/core/ray/index.d.ts +2 -0
- package/dist/types/core/ray/ray-2d.d.ts +37 -0
- package/dist/types/core/ray/ray-3d.d.ts +42 -0
- package/dist/types/core/simple-rng/index.d.ts +1 -0
- package/dist/types/core/simple-rng/simple-rng.d.ts +36 -0
- package/dist/types/core/sparse-batcher/index.d.ts +1 -0
- package/dist/types/core/sparse-batcher/sparse-batcher.d.ts +55 -0
- package/dist/{ecs → types/ecs}/world.d.ts +11 -0
- package/dist/{game → types/game}/loop/loop.d.ts +33 -29
- package/dist/{index.d.ts → types/index.d.ts} +1 -0
- package/dist/{net → types/net}/index.d.ts +2 -2
- package/dist/types/renderer/base/renderer-2d.d.ts +13 -0
- package/dist/types/renderer/base/renderer-3d.d.ts +10 -0
- package/dist/types/renderer/base/renderer.d.ts +21 -0
- package/dist/types/renderer/gltf/helpers.d.ts +43 -0
- package/dist/types/renderer/gltf/parser.d.ts +49 -0
- package/dist/types/renderer/gltf/skeletal-animation.d.ts +96 -0
- package/dist/types/renderer/gltf/skin-parser.d.ts +107 -0
- package/dist/types/renderer/index.d.ts +15 -0
- package/dist/types/renderer/math.d.ts +37 -0
- package/dist/types/renderer/prefab-bucket/concrete.d.ts +55 -0
- package/dist/types/renderer/prefab-bucket/index.d.ts +113 -0
- package/dist/types/renderer/prefab-bucket/parsers.d.ts +8 -0
- package/dist/types/renderer/prefab-bucket/specs.d.ts +166 -0
- package/dist/types/renderer/spritesheet/helpers.d.ts +38 -0
- package/dist/types/renderer/spritesheet/parser.d.ts +21 -0
- package/dist/types/renderer/types.d.ts +89 -0
- package/dist/webgpu/cjs/index.js +5401 -0
- package/dist/webgpu/esm/index.js +5378 -0
- package/dist/webgpu/types/2d/animation.d.ts +97 -0
- package/dist/webgpu/types/2d/renderer.d.ts +86 -0
- package/dist/webgpu/types/2d/shader.d.ts +61 -0
- package/dist/webgpu/types/2d/sprite-accessor.d.ts +47 -0
- package/dist/webgpu/types/3d/clip-resync-coordinator.d.ts +20 -0
- package/dist/webgpu/types/3d/morph-animation.d.ts +69 -0
- package/dist/webgpu/types/3d/morph-animation.test.d.ts +1 -0
- package/dist/webgpu/types/3d/renderer.d.ts +266 -0
- package/dist/webgpu/types/3d/shader.d.ts +136 -0
- package/dist/webgpu/types/3d/skeletal-animation-compute/index.d.ts +2 -0
- package/dist/webgpu/types/3d/skeletal-animation-compute/kernel.d.ts +25 -0
- package/dist/webgpu/types/3d/skeletal-animation-compute/packer.d.ts +32 -0
- package/dist/webgpu/types/camera/camera-2d.d.ts +53 -0
- package/dist/webgpu/types/camera/camera-2d.test.d.ts +1 -0
- package/dist/webgpu/types/camera/camera-3d.d.ts +81 -0
- package/dist/webgpu/types/camera/camera-3d.test.d.ts +1 -0
- package/dist/webgpu/types/camera/index.d.ts +2 -0
- package/dist/webgpu/types/compute/compute-builder.d.ts +123 -0
- package/dist/webgpu/types/compute/compute-builder.test.d.ts +1 -0
- package/dist/webgpu/types/core/constants.d.ts +59 -0
- package/dist/webgpu/types/core/constants.test.d.ts +1 -0
- package/dist/webgpu/types/core/index.d.ts +2 -0
- package/dist/webgpu/types/core/types.d.ts +125 -0
- package/dist/webgpu/types/core/types.test.d.ts +1 -0
- package/dist/webgpu/types/geometry/built-in.d.ts +58 -0
- package/dist/webgpu/types/geometry/built-in.test.d.ts +1 -0
- package/dist/webgpu/types/geometry/geometry-builder.d.ts +281 -0
- package/dist/webgpu/types/geometry/geometry-builder.test.d.ts +1 -0
- package/dist/webgpu/types/geometry/index.d.ts +2 -0
- package/dist/webgpu/types/index.d.ts +35 -0
- package/dist/webgpu/types/particle/emitter.d.ts +36 -0
- package/dist/webgpu/types/shaders/index.d.ts +2 -0
- package/dist/webgpu/types/shaders/runtime-transpile.d.ts +18 -0
- package/dist/webgpu/types/shaders/sprite-2d.wgsl.d.ts +10 -0
- package/dist/webgpu/types/shaders/typegpu.d.ts +9 -0
- package/dist/webgpu/types/shaders/utils.d.ts +28 -0
- package/dist/webgpu/types/shaders/utils.test.d.ts +1 -0
- package/dist/webgpu/types/spritesheet/index.d.ts +1 -0
- package/dist/webgpu/types/spritesheet/spritesheet.d.ts +28 -0
- package/dist/webgpu/types/spritesheet/spritesheet.test.d.ts +1 -0
- package/package.json +96 -26
- package/dist/core/binary-codec/binary-codec.js +0 -354
- package/dist/core/binary-codec/index.js +0 -1
- package/dist/core/driver/driver.js +0 -47
- package/dist/core/driver/drivers/immediate.js +0 -61
- package/dist/core/driver/drivers/index.js +0 -3
- package/dist/core/driver/drivers/raf.js +0 -62
- package/dist/core/driver/drivers/timeout.js +0 -71
- package/dist/core/driver/index.js +0 -2
- package/dist/core/events/event-system.js +0 -88
- package/dist/core/events/index.js +0 -1
- package/dist/core/fixed-ticker/fixed-ticker.js +0 -105
- package/dist/core/fixed-ticker/index.js +0 -1
- package/dist/core/generate-id/generate-id.js +0 -25
- package/dist/core/generate-id/index.js +0 -1
- package/dist/core/index.js +0 -10
- package/dist/core/input/index.js +0 -2
- package/dist/core/input/manager.js +0 -211
- package/dist/core/input/sources/browser.js +0 -29
- package/dist/core/input/sources/index.js +0 -1
- package/dist/core/lerp/index.js +0 -1
- package/dist/core/lerp/lerp.js +0 -42
- package/dist/core/navmesh/index.js +0 -1
- package/dist/core/navmesh/navmesh-worker-pool.js +0 -180
- package/dist/core/navmesh/navmesh.js +0 -799
- package/dist/core/navmesh/navmesh.worker.js +0 -79
- package/dist/core/pooled-codec/index.js +0 -1
- package/dist/core/pooled-codec/pooled-codec.js +0 -410
- package/dist/core/prediction/index.js +0 -1
- package/dist/core/prediction/prediction.js +0 -99
- package/dist/core.esm.js +0 -1
- package/dist/core.js +0 -1
- package/dist/ecs/component-store.js +0 -175
- package/dist/ecs/component.js +0 -43
- package/dist/ecs/entity-handle.js +0 -515
- package/dist/ecs/example.js +0 -125
- package/dist/ecs/index.js +0 -4
- package/dist/ecs/system-builder.js +0 -249
- package/dist/ecs/world-systems.js +0 -79
- package/dist/ecs/world.js +0 -767
- package/dist/game/index.js +0 -1
- package/dist/game/loop/index.js +0 -1
- package/dist/game/loop/loop.js +0 -108
- package/dist/index.js +0 -26
- package/dist/net/adapters/browser-websocket.js +0 -74
- package/dist/net/adapters/bun-websocket.js +0 -245
- package/dist/net/buffer-pool.js +0 -89
- package/dist/net/client.js +0 -586
- package/dist/net/index.js +0 -58
- package/dist/net/server.js +0 -974
- package/dist/net/types.js +0 -31
- package/dist/net/validators.js +0 -88
- package/dist/protocol/index.js +0 -92
- package/dist/protocol/intent/define-intent.js +0 -125
- package/dist/protocol/intent/index.js +0 -91
- package/dist/protocol/intent/intent-registry.js +0 -91
- package/dist/protocol/rpc/define-rpc.js +0 -84
- package/dist/protocol/rpc/index.js +0 -3
- package/dist/protocol/rpc/rpc-registry.js +0 -159
- package/dist/protocol/rpc/rpc.js +0 -12
- package/dist/protocol/snapshot/index.js +0 -43
- package/dist/protocol/snapshot/snapshot-codec.js +0 -67
- package/dist/protocol/snapshot/snapshot-registry.js +0 -168
- package/dist/protocol/snapshot/snapshot.js +0 -30
- package/src/core/binary-codec/README.md +0 -60
- package/src/core/binary-codec/binary-codec.test.ts +0 -300
- package/src/core/binary-codec/binary-codec.ts +0 -448
- package/src/core/binary-codec/index.ts +0 -1
- package/src/core/driver/README.md +0 -97
- package/src/core/driver/driver.test.ts +0 -414
- package/src/core/driver/driver.ts +0 -71
- package/src/core/driver/drivers/immediate.ts +0 -66
- package/src/core/driver/drivers/index.ts +0 -3
- package/src/core/driver/drivers/raf.ts +0 -67
- package/src/core/driver/drivers/timeout.ts +0 -77
- package/src/core/driver/index.ts +0 -2
- package/src/core/events/README.md +0 -47
- package/src/core/events/event-system.test.ts +0 -243
- package/src/core/events/event-system.ts +0 -140
- package/src/core/events/index.ts +0 -1
- package/src/core/fixed-ticker/README.md +0 -77
- package/src/core/fixed-ticker/fixed-ticker.test.ts +0 -151
- package/src/core/fixed-ticker/fixed-ticker.ts +0 -174
- package/src/core/fixed-ticker/index.ts +0 -1
- package/src/core/generate-id/README.md +0 -18
- package/src/core/generate-id/generate-id.test.ts +0 -79
- package/src/core/generate-id/generate-id.ts +0 -37
- package/src/core/generate-id/index.ts +0 -1
- package/src/core/index.ts +0 -10
- package/src/core/input/README.md +0 -24
- package/src/core/input/index.ts +0 -2
- package/src/core/input/manager.ts +0 -259
- package/src/core/input/sources/browser.ts +0 -39
- package/src/core/input/sources/index.ts +0 -1
- package/src/core/input/types.ts +0 -40
- package/src/core/lerp/README.md +0 -79
- package/src/core/lerp/index.ts +0 -1
- package/src/core/lerp/lerp.test.ts +0 -90
- package/src/core/lerp/lerp.ts +0 -42
- package/src/core/navmesh/README.md +0 -164
- package/src/core/navmesh/index.ts +0 -1
- package/src/core/navmesh/navmesh-worker-pool.ts +0 -236
- package/src/core/navmesh/navmesh-workers.test.ts +0 -356
- package/src/core/navmesh/navmesh.test.ts +0 -344
- package/src/core/navmesh/navmesh.ts +0 -1047
- package/src/core/navmesh/navmesh.worker.ts +0 -147
- package/src/core/pooled-codec/README.md +0 -70
- package/src/core/pooled-codec/index.ts +0 -1
- package/src/core/pooled-codec/pooled-codec.test.ts +0 -862
- package/src/core/pooled-codec/pooled-codec.ts +0 -504
- package/src/core/prediction/README.md +0 -64
- package/src/core/prediction/index.ts +0 -1
- package/src/core/prediction/prediction.test.ts +0 -423
- package/src/core/prediction/prediction.ts +0 -112
- package/src/ecs/README.md +0 -427
- package/src/ecs/benchmark.test.ts +0 -1645
- package/src/ecs/component-store.ts +0 -198
- package/src/ecs/component.ts +0 -90
- package/src/ecs/entity-handle.test.ts +0 -393
- package/src/ecs/entity-handle.ts +0 -563
- package/src/ecs/example.ts +0 -152
- package/src/ecs/index.ts +0 -4
- package/src/ecs/system-builder.ts +0 -404
- package/src/ecs/world-systems.ts +0 -83
- package/src/ecs/world.test.ts +0 -310
- package/src/ecs/world.ts +0 -904
- package/src/game/index.ts +0 -1
- package/src/game/loop/README.md +0 -32
- package/src/game/loop/index.ts +0 -1
- package/src/game/loop/loop.ts +0 -236
- package/src/index.ts +0 -32
- package/src/net/README.md +0 -474
- package/src/net/adapters/browser-websocket.ts +0 -86
- package/src/net/adapters/bun-websocket.ts +0 -292
- package/src/net/buffer-pool.ts +0 -106
- package/src/net/client.test.ts +0 -807
- package/src/net/client.ts +0 -695
- package/src/net/index.ts +0 -60
- package/src/net/server.test.ts +0 -799
- package/src/net/server.ts +0 -1152
- package/src/net/types.ts +0 -228
- package/src/net/validators.ts +0 -104
- package/src/protocol/README.md +0 -469
- package/src/protocol/index.ts +0 -93
- package/src/protocol/intent/define-intent.test.ts +0 -397
- package/src/protocol/intent/define-intent.ts +0 -201
- package/src/protocol/intent/index.ts +0 -94
- package/src/protocol/intent/intent-registry.test.ts +0 -198
- package/src/protocol/intent/intent-registry.ts +0 -112
- package/src/protocol/intent/intent.ts +0 -12
- package/src/protocol/rpc/define-rpc.test.ts +0 -141
- package/src/protocol/rpc/define-rpc.ts +0 -113
- package/src/protocol/rpc/index.ts +0 -3
- package/src/protocol/rpc/rpc-registry.test.ts +0 -168
- package/src/protocol/rpc/rpc-registry.ts +0 -176
- package/src/protocol/rpc/rpc.ts +0 -37
- package/src/protocol/snapshot/index.ts +0 -45
- package/src/protocol/snapshot/snapshot-codec.test.ts +0 -138
- package/src/protocol/snapshot/snapshot-codec.ts +0 -87
- package/src/protocol/snapshot/snapshot-registry.test.ts +0 -310
- package/src/protocol/snapshot/snapshot-registry.ts +0 -201
- package/src/protocol/snapshot/snapshot.test.ts +0 -76
- package/src/protocol/snapshot/snapshot.ts +0 -41
- /package/dist/{core → types/core}/binary-codec/index.d.ts +0 -0
- /package/dist/{core → types/core}/driver/driver.d.ts +0 -0
- /package/dist/{core → types/core}/driver/drivers/immediate.d.ts +0 -0
- /package/dist/{core → types/core}/driver/drivers/index.d.ts +0 -0
- /package/dist/{core → types/core}/driver/drivers/raf.d.ts +0 -0
- /package/dist/{core → types/core}/driver/drivers/timeout.d.ts +0 -0
- /package/dist/{core → types/core}/driver/index.d.ts +0 -0
- /package/dist/{core → types/core}/events/index.d.ts +0 -0
- /package/dist/{core → types/core}/fixed-ticker/fixed-ticker.d.ts +0 -0
- /package/dist/{core → types/core}/fixed-ticker/index.d.ts +0 -0
- /package/dist/{core → types/core}/generate-id/generate-id.d.ts +0 -0
- /package/dist/{core → types/core}/generate-id/index.d.ts +0 -0
- /package/dist/{core → types/core}/input/sources/browser.d.ts +0 -0
- /package/dist/{core → types/core}/input/sources/index.d.ts +0 -0
- /package/dist/{core → types/core}/input/types.d.ts +0 -0
- /package/dist/{core → types/core}/lerp/index.d.ts +0 -0
- /package/dist/{core → types/core}/lerp/lerp.d.ts +0 -0
- /package/dist/{core → types/core}/navmesh/index.d.ts +0 -0
- /package/dist/{core → types/core}/navmesh/navmesh-worker-pool.d.ts +0 -0
- /package/dist/{core → types/core}/navmesh/navmesh.worker.d.ts +0 -0
- /package/dist/{core → types/core}/pooled-codec/index.d.ts +0 -0
- /package/dist/{core → types/core}/pooled-codec/pooled-codec.d.ts +0 -0
- /package/dist/{core → types/core}/prediction/index.d.ts +0 -0
- /package/dist/{core → types/core}/prediction/prediction.d.ts +0 -0
- /package/dist/{ecs → types/ecs}/component-store.d.ts +0 -0
- /package/dist/{ecs → types/ecs}/component.d.ts +0 -0
- /package/dist/{ecs → types/ecs}/entity-handle.d.ts +0 -0
- /package/dist/{ecs → types/ecs}/example.d.ts +0 -0
- /package/dist/{ecs → types/ecs}/index.d.ts +0 -0
- /package/dist/{ecs → types/ecs}/system-builder.d.ts +0 -0
- /package/dist/{ecs → types/ecs}/world-systems.d.ts +0 -0
- /package/dist/{game → types/game}/index.d.ts +0 -0
- /package/dist/{game → types/game}/loop/index.d.ts +0 -0
- /package/dist/{net → types/net}/adapters/browser-websocket.d.ts +0 -0
- /package/dist/{net → types/net}/adapters/bun-websocket.d.ts +0 -0
- /package/dist/{net → types/net}/buffer-pool.d.ts +0 -0
- /package/dist/{net → types/net}/client.d.ts +0 -0
- /package/dist/{net → types/net}/server.d.ts +0 -0
- /package/dist/{net → types/net}/types.d.ts +0 -0
- /package/dist/{net → types/net}/validators.d.ts +0 -0
- /package/dist/{protocol → types/protocol}/index.d.ts +0 -0
- /package/dist/{protocol → types/protocol}/intent/define-intent.d.ts +0 -0
- /package/dist/{protocol → types/protocol}/intent/index.d.ts +0 -0
- /package/dist/{protocol → types/protocol}/intent/intent-registry.d.ts +0 -0
- /package/dist/{protocol → types/protocol}/intent/intent.d.ts +0 -0
- /package/dist/{protocol → types/protocol}/rpc/define-rpc.d.ts +0 -0
- /package/dist/{protocol → types/protocol}/rpc/index.d.ts +0 -0
- /package/dist/{protocol → types/protocol}/rpc/rpc-registry.d.ts +0 -0
- /package/dist/{protocol → types/protocol}/rpc/rpc.d.ts +0 -0
- /package/dist/{protocol → types/protocol}/snapshot/index.d.ts +0 -0
- /package/dist/{protocol → types/protocol}/snapshot/snapshot-codec.d.ts +0 -0
- /package/dist/{protocol → types/protocol}/snapshot/snapshot-registry.d.ts +0 -0
- /package/dist/{protocol → types/protocol}/snapshot/snapshot.d.ts +0 -0
- /package/dist/{core/input/types.js → webgpu/types/2d/animation.test.d.ts} +0 -0
- /package/dist/{protocol/intent/intent.js → webgpu/types/2d/sprite-accessor.test.d.ts} +0 -0
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BasePrefabBucket — generic, renderer-agnostic registry of reusable spawn
|
|
3
|
+
* templates. Backends (e.g. `@murow/webgpu`) extend this with specialized
|
|
4
|
+
* spec/prefab unions; most users want the concrete `PrefabBucket` class
|
|
5
|
+
* exported alongside this one (see `./prefab-bucket-concrete.ts`).
|
|
6
|
+
*
|
|
7
|
+
* Lifecycle:
|
|
8
|
+
* 1. `add()` / `addAll()` collect specs (sync, no I/O)
|
|
9
|
+
* 2. `load()` resolves all async work (fetch, parse) in parallel
|
|
10
|
+
* 3. `get()` returns parsed prefabs by id; the bucket is now frozen
|
|
11
|
+
*
|
|
12
|
+
* Typed ids: with `const` generics, `bucket.get('typo')` is a compile-time
|
|
13
|
+
* error once the bucket has been populated. The id-to-spec mapping is
|
|
14
|
+
* threaded through generics so subclasses can narrow `get()`'s return type
|
|
15
|
+
* to the specific prefab variant for that id (not just the union).
|
|
16
|
+
*/
|
|
17
|
+
import { EventSystem } from '../../core/events';
|
|
18
|
+
export type PrefabMode = '2d' | '3d';
|
|
19
|
+
/**
|
|
20
|
+
* `T | (string & {})` — accept a literal `T` (for autocomplete) but don't
|
|
21
|
+
* collapse to plain `string`. Lets callers pass any string while still getting
|
|
22
|
+
* suggestions for the known set.
|
|
23
|
+
*/
|
|
24
|
+
export type StringOr<T extends string> = T | (string & {});
|
|
25
|
+
export interface PrefabSpecBase {
|
|
26
|
+
readonly type: string;
|
|
27
|
+
readonly id: string;
|
|
28
|
+
/** Optional user-defined sidecar data carried through to the parsed prefab. */
|
|
29
|
+
readonly metadata?: Record<string, unknown>;
|
|
30
|
+
}
|
|
31
|
+
export interface PrefabBase {
|
|
32
|
+
readonly type: string;
|
|
33
|
+
readonly id: string;
|
|
34
|
+
/** User-defined sidecar data passed through from the spec. */
|
|
35
|
+
readonly metadata?: Record<string, unknown>;
|
|
36
|
+
}
|
|
37
|
+
/** `clips-changed` fires when a prefab's animation set is mutated by lazy load/unload. */
|
|
38
|
+
export type PrefabBucketEvents = [
|
|
39
|
+
[
|
|
40
|
+
'clips-changed',
|
|
41
|
+
{
|
|
42
|
+
prefabId: string;
|
|
43
|
+
added: readonly string[];
|
|
44
|
+
removed: readonly string[];
|
|
45
|
+
}
|
|
46
|
+
]
|
|
47
|
+
];
|
|
48
|
+
/** Context passed to each parser at load time, carrying the bucket's shared event channel. */
|
|
49
|
+
export interface PrefabParserContext {
|
|
50
|
+
readonly events: EventSystem<PrefabBucketEvents>;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Pluggable parser registry — keyed by spec `type`. Each entry knows how to turn
|
|
54
|
+
* one variant of spec into its parsed prefab. The bucket itself is mode-agnostic;
|
|
55
|
+
* the webgpu package (or any other backend) registers parsers at construction.
|
|
56
|
+
*/
|
|
57
|
+
export type PrefabParser<Spec extends PrefabSpecBase = PrefabSpecBase, Prefab extends PrefabBase = PrefabBase> = (spec: Spec, ctx: PrefabParserContext) => Promise<Prefab> | Prefab;
|
|
58
|
+
export type PrefabParserMap<Spec extends PrefabSpecBase, Prefab extends PrefabBase> = Record<string, PrefabParser<Spec, Prefab>>;
|
|
59
|
+
export declare class BasePrefabBucket<M extends PrefabMode = PrefabMode, Spec extends PrefabSpecBase = PrefabSpecBase, Prefab extends PrefabBase = PrefabBase, Specs extends Record<string, Spec> = {}> {
|
|
60
|
+
readonly mode: M;
|
|
61
|
+
/** Shared notification channel — see `PrefabBucketEvents`. */
|
|
62
|
+
readonly events: EventSystem<PrefabBucketEvents>;
|
|
63
|
+
private parsers;
|
|
64
|
+
private pending;
|
|
65
|
+
private pendingIds;
|
|
66
|
+
private prefabs;
|
|
67
|
+
constructor(mode: M, parsers?: PrefabParserMap<Spec, Prefab>);
|
|
68
|
+
/** Add a single spec. Throws if id is a duplicate or if the bucket is already loaded. */
|
|
69
|
+
add<const S extends Spec>(spec: S): BasePrefabBucket<M, Spec, Prefab, Specs & {
|
|
70
|
+
[K in S['id']]: S;
|
|
71
|
+
}>;
|
|
72
|
+
/**
|
|
73
|
+
* Add multiple specs. Validates the whole batch (ids unique, not loaded) before
|
|
74
|
+
* committing, so the bucket never lands in a half-applied state.
|
|
75
|
+
*/
|
|
76
|
+
addAll<const Ss extends readonly Spec[]>(specs: Ss): BasePrefabBucket<M, Spec, Prefab, Specs & {
|
|
77
|
+
[K in Ss[number]['id']]: Extract<Ss[number], {
|
|
78
|
+
id: K;
|
|
79
|
+
}>;
|
|
80
|
+
}>;
|
|
81
|
+
/** Load all pending specs in parallel. Idempotent if already loaded. */
|
|
82
|
+
load(): Promise<void>;
|
|
83
|
+
/**
|
|
84
|
+
* Returns the parsed prefab by id. The default return type is the prefab
|
|
85
|
+
* union; subclasses may pass a second generic `R` to narrow the return
|
|
86
|
+
* type per-id (e.g. mapping `Specs[K]` to its concrete prefab variant).
|
|
87
|
+
*
|
|
88
|
+
* Accepts any string at runtime but offers autocomplete for the known ids.
|
|
89
|
+
*/
|
|
90
|
+
get<K extends keyof Specs & string, R extends Prefab = Prefab>(id: StringOr<K>): R;
|
|
91
|
+
/** True once `load()` has resolved. */
|
|
92
|
+
get loaded(): boolean;
|
|
93
|
+
/** Number of prefabs in the bucket (pending if not loaded, parsed if loaded). */
|
|
94
|
+
get size(): number;
|
|
95
|
+
/** All parsed prefabs. Throws if not loaded yet. Order is registration order. */
|
|
96
|
+
entries(): Prefab[];
|
|
97
|
+
/**
|
|
98
|
+
* Return all parsed prefabs whose `type` matches the given discriminator.
|
|
99
|
+
* The default return type is the prefab union narrowed structurally;
|
|
100
|
+
* subclasses may pass a second generic `R` to narrow further per-type.
|
|
101
|
+
*
|
|
102
|
+
* Accepts any string at runtime; offers autocomplete for the known types.
|
|
103
|
+
*/
|
|
104
|
+
getAllByType<T extends Prefab['type'] & string, R extends Prefab = Extract<Prefab, {
|
|
105
|
+
type: T;
|
|
106
|
+
}>>(type: StringOr<T>): R[];
|
|
107
|
+
/**
|
|
108
|
+
* Drop every runtime-loaded clip across all prefabs, restoring each to
|
|
109
|
+
* its parse-time animation set. Called by the renderer on destroy so
|
|
110
|
+
* a kept-alive bucket doesn't carry runtime state into the next session.
|
|
111
|
+
*/
|
|
112
|
+
resetAnimations(): void;
|
|
113
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spec parsers — pure functions that turn a prefab spec into its parsed prefab.
|
|
3
|
+
* Used by createPrefabBucket; not part of the public surface.
|
|
4
|
+
*/
|
|
5
|
+
import type { PrefabParserMap } from './index';
|
|
6
|
+
import type { Prefab2D, Prefab2DSpec, Prefab3D, Prefab3DSpec } from './specs';
|
|
7
|
+
export declare const parsers3d: PrefabParserMap<Prefab3DSpec, Prefab3D>;
|
|
8
|
+
export declare const parsers2d: PrefabParserMap<Prefab2DSpec, Prefab2D>;
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prefab spec / prefab type unions.
|
|
3
|
+
*
|
|
4
|
+
* Specs describe what to load (URLs, sizes, options). Prefabs are the
|
|
5
|
+
* parsed CPU-side result — the renderer reads these at init() to size
|
|
6
|
+
* GPU buffers and uploads them; user code retrieves them by id and
|
|
7
|
+
* passes them to `addInstance` / `addSprite`.
|
|
8
|
+
*
|
|
9
|
+
* These types are renderer-agnostic. The actual GPU upload lives in
|
|
10
|
+
* specific backends (e.g. `@murow/webgpu`).
|
|
11
|
+
*/
|
|
12
|
+
import type { ParsedGltf } from '../gltf/parser';
|
|
13
|
+
import type { ParsedSpritesheet } from '../spritesheet/parser';
|
|
14
|
+
/**
|
|
15
|
+
* Extracts the spec's `metadata` literal type for the parsed prefab.
|
|
16
|
+
* Missing metadata defaults to `{}` at parse time, so the parsed prefab's
|
|
17
|
+
* `metadata` field is always present — no `?.` needed.
|
|
18
|
+
*
|
|
19
|
+
* - Required field → exact literal type (e.g. `{ scale: 0.5 }`)
|
|
20
|
+
* - Optional field → `NonNullable<M>` (you know the field is there at runtime,
|
|
21
|
+
* but its shape isn't pinned because the spec didn't pin it)
|
|
22
|
+
* - Absent → `Record<string, unknown>` (default open shape)
|
|
23
|
+
*/
|
|
24
|
+
type MetadataOf<S> = S extends {
|
|
25
|
+
readonly metadata: infer M;
|
|
26
|
+
} ? M : S extends {
|
|
27
|
+
readonly metadata?: infer M;
|
|
28
|
+
} ? NonNullable<M> : Record<string, unknown>;
|
|
29
|
+
export interface GltfSpec {
|
|
30
|
+
readonly type: 'gltf';
|
|
31
|
+
/** Unique identifier for the prefab. */
|
|
32
|
+
readonly id: string;
|
|
33
|
+
/** URL to the .gltf or .glb file. */
|
|
34
|
+
readonly src: string;
|
|
35
|
+
/** Optional whitelist of animation clip names to keep. Defaults to all. Filter them here and get type-safety and more performance. */
|
|
36
|
+
readonly animations?: readonly string[];
|
|
37
|
+
/**
|
|
38
|
+
* Release the source glTF JSON + accessor reader after parse. Saves
|
|
39
|
+
* memory but removes `loadAnimations` / `unloadAnimations` at runtime
|
|
40
|
+
* and the type level.
|
|
41
|
+
*/
|
|
42
|
+
readonly freezeAnimations?: boolean;
|
|
43
|
+
/** Optional user-defined sidecar data (scale, speed, gameplay hints, etc). */
|
|
44
|
+
readonly metadata?: Record<string, unknown>;
|
|
45
|
+
}
|
|
46
|
+
export interface GridSpec {
|
|
47
|
+
readonly type: 'grid';
|
|
48
|
+
/** Unique identifier for the prefab. */
|
|
49
|
+
readonly id: string;
|
|
50
|
+
readonly size: number;
|
|
51
|
+
readonly step: number;
|
|
52
|
+
readonly lineWidth: number;
|
|
53
|
+
/** Optional user-defined sidecar data (scale, speed, gameplay hints, etc). */
|
|
54
|
+
readonly metadata?: Record<string, unknown>;
|
|
55
|
+
}
|
|
56
|
+
export type Prefab3DSpec = GltfSpec | GridSpec;
|
|
57
|
+
/**
|
|
58
|
+
* Map a spec's `animations` tuple to a record-keyed-by-name. Used to type
|
|
59
|
+
* `GltfPrefab.animations` so `prefab.animations.Run` is a string literal
|
|
60
|
+
* (and `prefab.animations.Typo` is a compile-time error).
|
|
61
|
+
*/
|
|
62
|
+
export type AnimationsRecord<A extends readonly string[]> = {
|
|
63
|
+
readonly [K in A[number]]: K;
|
|
64
|
+
};
|
|
65
|
+
/** Animation fields for a spec with a non-empty literal `animations` tuple. */
|
|
66
|
+
type NarrowAnimations<S extends GltfSpec> = {
|
|
67
|
+
readonly animations: AnimationsRecord<Extract<S['animations'], readonly string[]>>;
|
|
68
|
+
readonly animationList: Extract<S['animations'], readonly string[]>;
|
|
69
|
+
};
|
|
70
|
+
/** Animation fields for a spec where `animations` was declared optional (default). */
|
|
71
|
+
type WideAnimations = {
|
|
72
|
+
readonly animations?: Record<string, string>;
|
|
73
|
+
readonly animationList?: readonly string[];
|
|
74
|
+
};
|
|
75
|
+
/** Lazy clip-management methods. Present when the spec didn't set `freezeAnimations: true`. */
|
|
76
|
+
export type UnfrozenAnimationMethods = {
|
|
77
|
+
/** Decode and pack clips by name. Already-loaded names are no-ops; unknown names throw. */
|
|
78
|
+
loadAnimations(names: readonly string[]): Promise<void>;
|
|
79
|
+
/** Drop clips from the packed buffer. No-op for clips that aren't loaded. */
|
|
80
|
+
unloadAnimations(names: readonly string[]): void;
|
|
81
|
+
/** Restore the prefab to its spec-declared (parse-time) animation set. */
|
|
82
|
+
resetAnimations(): void;
|
|
83
|
+
};
|
|
84
|
+
/** Optional-method version of `UnfrozenAnimationMethods`, used on the wide-union `GltfPrefab<GltfSpec>`. */
|
|
85
|
+
type OptionalAnimationMethods = {
|
|
86
|
+
loadAnimations?: UnfrozenAnimationMethods['loadAnimations'];
|
|
87
|
+
unloadAnimations?: UnfrozenAnimationMethods['unloadAnimations'];
|
|
88
|
+
resetAnimations?: UnfrozenAnimationMethods['resetAnimations'];
|
|
89
|
+
};
|
|
90
|
+
/** Common (non-conditional) fields of every parsed glTF prefab. */
|
|
91
|
+
type GltfPrefabBase<S extends GltfSpec> = {
|
|
92
|
+
readonly type: 'gltf';
|
|
93
|
+
readonly id: S['id'];
|
|
94
|
+
readonly parsed: ParsedGltf;
|
|
95
|
+
readonly skinnedPartCount: number;
|
|
96
|
+
readonly jointCount: number;
|
|
97
|
+
/** Total vertices across all primitives. */
|
|
98
|
+
readonly totalVertexCount: number;
|
|
99
|
+
/** Passed through from the spec. */
|
|
100
|
+
readonly metadata: MetadataOf<S>;
|
|
101
|
+
};
|
|
102
|
+
/**
|
|
103
|
+
* Animation record/list fields, narrowed by what the spec declared:
|
|
104
|
+
* - literal `animations` tuple → narrow record + tuple
|
|
105
|
+
* - `animations?` (declared optional) → wide record + array
|
|
106
|
+
* - field absent → no animation fields
|
|
107
|
+
*/
|
|
108
|
+
type GltfPrefabAnimationFields<S extends GltfSpec> = S extends {
|
|
109
|
+
animations: readonly [string, ...string[]];
|
|
110
|
+
} ? NarrowAnimations<S> : S extends {
|
|
111
|
+
animations?: readonly string[] | undefined;
|
|
112
|
+
} ? WideAnimations : {};
|
|
113
|
+
/** Pull out the `freezeAnimations` literal: `true`/`false` if pinned, `boolean` if wide, `never` if absent. */
|
|
114
|
+
type FreezeFlagOf<S> = S extends {
|
|
115
|
+
freezeAnimations?: infer F;
|
|
116
|
+
} ? F : never;
|
|
117
|
+
/**
|
|
118
|
+
* Lazy-method narrowing:
|
|
119
|
+
* - wide spec (`freezeAnimations?: boolean`) → optional methods, so the
|
|
120
|
+
* union `Prefab3D` doesn't re-add them to a narrowed-frozen variant
|
|
121
|
+
* - literal `true` → no methods
|
|
122
|
+
* - literal `false` or absent → required methods
|
|
123
|
+
*/
|
|
124
|
+
type GltfPrefabLazyMethods<S extends GltfSpec> = boolean extends FreezeFlagOf<S> ? OptionalAnimationMethods : S extends {
|
|
125
|
+
freezeAnimations: true;
|
|
126
|
+
} ? {} : UnfrozenAnimationMethods;
|
|
127
|
+
/** Parsed glTF prefab, with `id`, `metadata`, `animations`, and `freezeAnimations` narrowed by the spec literal. */
|
|
128
|
+
export type GltfPrefab<S extends GltfSpec = GltfSpec> = GltfPrefabBase<S> & GltfPrefabAnimationFields<S> & GltfPrefabLazyMethods<S>;
|
|
129
|
+
export interface GridPrefab<S extends GridSpec = GridSpec> {
|
|
130
|
+
readonly type: 'grid';
|
|
131
|
+
readonly id: S['id'];
|
|
132
|
+
readonly size: number;
|
|
133
|
+
readonly step: number;
|
|
134
|
+
readonly lineWidth: number;
|
|
135
|
+
readonly metadata: MetadataOf<S>;
|
|
136
|
+
}
|
|
137
|
+
export type Prefab3D = GltfPrefab | GridPrefab;
|
|
138
|
+
export interface SpritesheetSpec {
|
|
139
|
+
readonly type: 'spritesheet';
|
|
140
|
+
readonly id: string;
|
|
141
|
+
/** URL to the image. */
|
|
142
|
+
readonly src: string;
|
|
143
|
+
readonly frameWidth?: number;
|
|
144
|
+
readonly frameHeight?: number;
|
|
145
|
+
/** URL to a texture-packer JSON file. Mutually exclusive with frameWidth/frameHeight. */
|
|
146
|
+
readonly data?: string;
|
|
147
|
+
readonly metadata?: Record<string, unknown>;
|
|
148
|
+
}
|
|
149
|
+
export type Prefab2DSpec = SpritesheetSpec;
|
|
150
|
+
export interface SpritesheetPrefab<S extends SpritesheetSpec = SpritesheetSpec> {
|
|
151
|
+
readonly type: 'spritesheet';
|
|
152
|
+
readonly id: S['id'];
|
|
153
|
+
readonly parsed: ParsedSpritesheet;
|
|
154
|
+
readonly frameCount: number;
|
|
155
|
+
readonly width: number;
|
|
156
|
+
readonly height: number;
|
|
157
|
+
readonly metadata: MetadataOf<S>;
|
|
158
|
+
}
|
|
159
|
+
export type Prefab2D = SpritesheetPrefab;
|
|
160
|
+
/**
|
|
161
|
+
* Maps a spec variant to its concrete parsed prefab variant. Used by the
|
|
162
|
+
* bucket's `get()` so `bucket.get('minion')` returns `GltfPrefab` directly,
|
|
163
|
+
* not the discriminated union.
|
|
164
|
+
*/
|
|
165
|
+
export type PrefabFor<S> = S extends GltfSpec ? GltfPrefab<S> : S extends GridSpec ? GridPrefab<S> : S extends SpritesheetSpec ? SpritesheetPrefab<S> : never;
|
|
166
|
+
export {};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure spritesheet helpers — UV math and image loading.
|
|
3
|
+
*
|
|
4
|
+
* Renderer-agnostic. The actual GPU-bound `Spritesheet` class (with `GPUTexture` /
|
|
5
|
+
* `GPUSampler`) lives in the webgpu package.
|
|
6
|
+
*/
|
|
7
|
+
import type { SpriteUV } from '../types';
|
|
8
|
+
export interface GridSpritesheetConfig {
|
|
9
|
+
image: string;
|
|
10
|
+
frameWidth: number;
|
|
11
|
+
frameHeight: number;
|
|
12
|
+
}
|
|
13
|
+
export interface TexturePackerFrame {
|
|
14
|
+
frame: {
|
|
15
|
+
x: number;
|
|
16
|
+
y: number;
|
|
17
|
+
w: number;
|
|
18
|
+
h: number;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export interface TexturePackerData {
|
|
22
|
+
frames: Record<string, TexturePackerFrame>;
|
|
23
|
+
meta: {
|
|
24
|
+
size: {
|
|
25
|
+
w: number;
|
|
26
|
+
h: number;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export interface SpritesheetConfig {
|
|
31
|
+
image: string;
|
|
32
|
+
frameWidth?: number;
|
|
33
|
+
frameHeight?: number;
|
|
34
|
+
data?: string;
|
|
35
|
+
}
|
|
36
|
+
export declare function computeGridUVs(imageWidth: number, imageHeight: number, frameWidth: number, frameHeight: number): SpriteUV[];
|
|
37
|
+
export declare function computeTexturePackerUVs(data: TexturePackerData): SpriteUV[];
|
|
38
|
+
export declare function loadImage(url: string): Promise<ImageBitmap>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spritesheet parser — fetches an image (and optionally a texture-packer JSON)
|
|
3
|
+
* and returns CPU-side data ready for GPU upload. Pure: no device, no GPU buffers.
|
|
4
|
+
*
|
|
5
|
+
* The renderer's `loadSpritesheet` is a thin wrapper that calls this then uploads.
|
|
6
|
+
* Splitting parse from upload lets callers fetch all spritesheets in parallel
|
|
7
|
+
* (via `Promise.all`) before a renderer exists.
|
|
8
|
+
*/
|
|
9
|
+
import type { SpriteUV, SpritesheetSource } from '../types';
|
|
10
|
+
/** CPU-side result of parsing a spritesheet source. */
|
|
11
|
+
export interface ParsedSpritesheet {
|
|
12
|
+
bitmap: ImageBitmap;
|
|
13
|
+
uvs: SpriteUV[];
|
|
14
|
+
width: number;
|
|
15
|
+
height: number;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Parse a spritesheet source: fetch the image, decode it, and resolve UVs.
|
|
19
|
+
* Does no GPU work. Safe to call in parallel; safe to call before a renderer exists.
|
|
20
|
+
*/
|
|
21
|
+
export declare function parseSpritesheet(source: SpritesheetSource): Promise<ParsedSpritesheet>;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import type { Ray3D } from '../core/ray/ray-3d';
|
|
2
|
+
export type ClearColor = [r: number, g: number, b: number, a: number];
|
|
3
|
+
export interface RendererOptions {
|
|
4
|
+
clearColor?: ClearColor;
|
|
5
|
+
/** Automatically resize the canvas and reconfigure the GPU context on window resize. */
|
|
6
|
+
autoResize?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface Renderer2DOptions extends RendererOptions {
|
|
9
|
+
/**
|
|
10
|
+
* Sprite instance budget. Optional when a prefab bucket is provided —
|
|
11
|
+
* the renderer will derive a sensible default from `maxInstances`.
|
|
12
|
+
*/
|
|
13
|
+
maxSprites?: number;
|
|
14
|
+
}
|
|
15
|
+
export interface Renderer3DOptions extends RendererOptions {
|
|
16
|
+
/**
|
|
17
|
+
* Non-skinned instance budget. Optional when a prefab bucket is provided —
|
|
18
|
+
* the renderer will derive a sensible default from the bucket.
|
|
19
|
+
*/
|
|
20
|
+
maxModels?: number;
|
|
21
|
+
enableLighting?: boolean;
|
|
22
|
+
}
|
|
23
|
+
export interface Camera2DState {
|
|
24
|
+
x: number;
|
|
25
|
+
y: number;
|
|
26
|
+
zoom: number;
|
|
27
|
+
rotation: number;
|
|
28
|
+
setPosition(x: number, y: number): void;
|
|
29
|
+
move(x: number, y: number): void;
|
|
30
|
+
screenToWorld(screenX: number, screenY: number): [number, number];
|
|
31
|
+
}
|
|
32
|
+
export interface Camera3DState {
|
|
33
|
+
position: [x: number, y: number, z: number];
|
|
34
|
+
target: [x: number, y: number, z: number];
|
|
35
|
+
up: [x: number, y: number, z: number];
|
|
36
|
+
fov: number;
|
|
37
|
+
near: number;
|
|
38
|
+
far: number;
|
|
39
|
+
aspect: number;
|
|
40
|
+
movement: 'local' | 'grounded' | 'global';
|
|
41
|
+
setPosition(x: number, y: number, z: number): void;
|
|
42
|
+
move(right: number, up: number, forward: number): void;
|
|
43
|
+
screenToRay(screenX: number, screenY: number): Ray3D;
|
|
44
|
+
}
|
|
45
|
+
export interface SpritesheetSource {
|
|
46
|
+
image: string;
|
|
47
|
+
frameWidth?: number;
|
|
48
|
+
frameHeight?: number;
|
|
49
|
+
data?: string;
|
|
50
|
+
}
|
|
51
|
+
export interface SpriteOptions {
|
|
52
|
+
sheet: SpritesheetHandle;
|
|
53
|
+
/** Frame index into the spritesheet. Defaults to 0. */
|
|
54
|
+
sprite?: number;
|
|
55
|
+
/** World position. Defaults to `[0, 0]`. */
|
|
56
|
+
position?: readonly [x: number, y: number];
|
|
57
|
+
layer?: number;
|
|
58
|
+
/** Per-axis scale. Pass a single number to scale uniformly. Defaults to `[1, 1]`. */
|
|
59
|
+
scale?: number | readonly [x: number, y: number];
|
|
60
|
+
/** Rotation in radians. Defaults to 0. */
|
|
61
|
+
rotation?: number;
|
|
62
|
+
opacity?: number;
|
|
63
|
+
flipX?: boolean;
|
|
64
|
+
flipY?: boolean;
|
|
65
|
+
tint?: readonly [r: number, g: number, b: number, a: number];
|
|
66
|
+
}
|
|
67
|
+
export interface SpritesheetHandle {
|
|
68
|
+
readonly id: number;
|
|
69
|
+
readonly frameCount: number;
|
|
70
|
+
getUV(spriteIndex: number): SpriteUV;
|
|
71
|
+
}
|
|
72
|
+
export interface SpriteUV {
|
|
73
|
+
minX: number;
|
|
74
|
+
minY: number;
|
|
75
|
+
maxX: number;
|
|
76
|
+
maxY: number;
|
|
77
|
+
}
|
|
78
|
+
export interface SpriteHandle {
|
|
79
|
+
readonly slot: number;
|
|
80
|
+
x: number;
|
|
81
|
+
y: number;
|
|
82
|
+
rotation: number;
|
|
83
|
+
scaleX: number;
|
|
84
|
+
scaleY: number;
|
|
85
|
+
opacity: number;
|
|
86
|
+
layer: number;
|
|
87
|
+
flipX: boolean;
|
|
88
|
+
flipY: boolean;
|
|
89
|
+
}
|