murow 0.0.60 → 0.0.71
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 +52 -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-2d-renderer.js +1 -0
- package/dist/cjs/renderer/base-3d-renderer.js +1 -0
- package/dist/cjs/renderer/base-renderer.js +1 -0
- package/dist/cjs/renderer/index.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-2d-renderer.js +1 -0
- package/dist/esm/renderer/base-3d-renderer.js +1 -0
- package/dist/esm/renderer/base-renderer.js +1 -0
- package/dist/esm/renderer/index.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/loop → types/core/driver}/drivers/immediate.d.ts +1 -1
- package/dist/{core/loop → types/core/driver}/drivers/raf.d.ts +1 -1
- package/dist/{core/loop → types/core/driver}/drivers/timeout.d.ts +1 -1
- package/dist/{core/loop → types/core/driver}/index.d.ts +1 -1
- package/dist/{core → types/core}/events/event-system.d.ts +14 -33
- package/dist/{core → types/core}/fixed-ticker/fixed-ticker.d.ts +1 -1
- 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 +7 -1
- package/dist/types/core/input/index.d.ts +3 -0
- package/dist/types/core/input/manager.d.ts +56 -0
- package/dist/types/core/input/sources/browser.d.ts +9 -0
- package/dist/types/core/input/sources/index.d.ts +1 -0
- package/dist/types/core/input/types.d.ts +36 -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}/system-builder.d.ts +20 -9
- package/dist/{ecs → types/ecs}/world.d.ts +11 -0
- package/dist/types/game/index.d.ts +1 -0
- package/dist/types/game/loop/index.d.ts +1 -0
- package/dist/types/game/loop/loop.d.ts +175 -0
- package/dist/{index.d.ts → types/index.d.ts} +2 -0
- package/dist/{net → types/net}/index.d.ts +2 -2
- package/dist/{net → types/net}/server.d.ts +39 -19
- package/dist/{protocol → types/protocol}/intent/define-intent.d.ts +15 -0
- package/dist/{protocol → types/protocol}/intent/index.d.ts +1 -1
- package/dist/types/renderer/base-2d-renderer.d.ts +13 -0
- package/dist/types/renderer/base-3d-renderer.d.ts +10 -0
- package/dist/types/renderer/base-renderer.d.ts +21 -0
- package/dist/types/renderer/index.d.ts +4 -0
- package/dist/types/renderer/types.d.ts +79 -0
- package/dist/webgpu/cjs/index.js +6004 -0
- package/dist/webgpu/esm/index.js +5972 -0
- package/dist/webgpu/types/2d/animation.d.ts +97 -0
- package/dist/webgpu/types/2d/renderer.d.ts +55 -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/2d/sprite-accessor.test.d.ts +1 -0
- package/dist/webgpu/types/3d/gltf-skin-parser.d.ts +101 -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 +216 -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 +8 -0
- package/dist/webgpu/types/3d/skeletal-animation-compute/packer.d.ts +32 -0
- package/dist/webgpu/types/3d/skeletal-animation.d.ts +90 -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/math.d.ts +37 -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 +32 -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 +57 -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/events/event-system.js +0 -88
- package/dist/core/events/index.js +0 -1
- package/dist/core/fixed-ticker/fixed-ticker.js +0 -101
- 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 -9
- package/dist/core/lerp/index.js +0 -1
- package/dist/core/lerp/lerp.js +0 -42
- package/dist/core/loop/drivers/immediate.js +0 -61
- package/dist/core/loop/drivers/index.js +0 -3
- package/dist/core/loop/drivers/raf.js +0 -62
- package/dist/core/loop/drivers/timeout.js +0 -71
- package/dist/core/loop/index.js +0 -2
- package/dist/core/loop/loop.js +0 -47
- 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 -180
- package/dist/ecs/system.d.ts +0 -63
- package/dist/ecs/system.js +0 -92
- package/dist/ecs/world-systems.js +0 -79
- package/dist/ecs/world.js +0 -684
- package/dist/index.js +0 -24
- 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 -938
- 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/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 -169
- 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 -9
- 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/loop/README.md +0 -97
- package/src/core/loop/drivers/immediate.ts +0 -66
- package/src/core/loop/drivers/index.ts +0 -3
- package/src/core/loop/drivers/raf.ts +0 -67
- package/src/core/loop/drivers/timeout.ts +0 -77
- package/src/core/loop/index.ts +0 -2
- package/src/core/loop/loop.test.ts +0 -414
- package/src/core/loop/loop.ts +0 -71
- 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 -309
- package/src/ecs/system.ts +0 -111
- package/src/ecs/world-systems.ts +0 -83
- package/src/ecs/world.test.ts +0 -310
- package/src/ecs/world.ts +0 -828
- package/src/index.ts +0 -28
- 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 -1116
- 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 -182
- 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/loop/loop.d.ts → types/core/driver/driver.d.ts} +0 -0
- /package/dist/{core/loop → types/core/driver}/drivers/index.d.ts +0 -0
- /package/dist/{core → types/core}/events/index.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}/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}/world-systems.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}/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/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/{protocol/intent/intent.js → webgpu/types/2d/animation.test.d.ts} +0 -0
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @description
|
|
3
|
-
* A utility class for managing fixed-rate update ticks, useful for deterministic behaviour
|
|
4
|
-
* in both client and server.
|
|
5
|
-
*
|
|
6
|
-
* The `FixedTicker` accumulates elapsed time and determines how many fixed-interval "ticks"
|
|
7
|
-
* should be processed based on a specified tick rate. It also limits the maximum number of
|
|
8
|
-
* ticks per frame to prevent runaway update loops when frame times are long.
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* @remarks
|
|
12
|
-
* - The `tick` method should be called once per frame, passing the elapsed time in seconds.
|
|
13
|
-
* - The class ensures that no more than a safe number of ticks are processed per frame.
|
|
14
|
-
*/
|
|
15
|
-
export class FixedTicker {
|
|
16
|
-
constructor({ rate, onTick }) {
|
|
17
|
-
/**
|
|
18
|
-
* @description Accumulator for the time passed since the last tick
|
|
19
|
-
*/
|
|
20
|
-
this.accumulator = 0;
|
|
21
|
-
/**
|
|
22
|
-
* @description
|
|
23
|
-
* Internal counter for the number of ticks processed.
|
|
24
|
-
*/
|
|
25
|
-
this._tickCount = 0;
|
|
26
|
-
this.rate = rate;
|
|
27
|
-
this.intervalMs = 1000 / this.rate;
|
|
28
|
-
this.onTick = onTick;
|
|
29
|
-
// Allow up to rate/2 ticks per frame, but at least 1.
|
|
30
|
-
// Prevents runaway loops if delta is too large.
|
|
31
|
-
this.maxTicksPerFrame = Math.max(1, Math.floor(rate / 2));
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* @description
|
|
35
|
-
* Returns how many ticks to run.
|
|
36
|
-
*
|
|
37
|
-
* @param deltaTime Delta time in seconds
|
|
38
|
-
* @returns {number} Amount of ticks to run
|
|
39
|
-
*/
|
|
40
|
-
getTicks(deltaTime) {
|
|
41
|
-
this.accumulator += deltaTime * 1000;
|
|
42
|
-
let ticks = 0;
|
|
43
|
-
while (this.accumulator >= this.intervalMs &&
|
|
44
|
-
ticks < this.maxTicksPerFrame) {
|
|
45
|
-
this.accumulator -= this.intervalMs;
|
|
46
|
-
ticks++;
|
|
47
|
-
}
|
|
48
|
-
const skippedTicks = Math.floor(this.accumulator / this.intervalMs);
|
|
49
|
-
if (skippedTicks > 0 && this.onTickSkipped) {
|
|
50
|
-
this.onTickSkipped(skippedTicks);
|
|
51
|
-
}
|
|
52
|
-
return ticks;
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* @description
|
|
56
|
-
* Processes the ticks based on the elapsed time.
|
|
57
|
-
*
|
|
58
|
-
* @param deltaTime Delta time in seconds
|
|
59
|
-
*/
|
|
60
|
-
tick(deltaTime) {
|
|
61
|
-
const ticks = this.getTicks(deltaTime);
|
|
62
|
-
for (let i = 0; i < ticks; i++) {
|
|
63
|
-
this.onTick(1 / this.rate, this._tickCount++);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* @description
|
|
68
|
-
* Returns the number of ticks processed since the last reset.
|
|
69
|
-
*
|
|
70
|
-
* @returns {number} Number of ticks processed
|
|
71
|
-
*/
|
|
72
|
-
get tickCount() {
|
|
73
|
-
return this._tickCount;
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* @description
|
|
77
|
-
* Resets the tick count to zero.
|
|
78
|
-
*/
|
|
79
|
-
resetTickCount() {
|
|
80
|
-
this._tickCount = 0;
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* @description
|
|
84
|
-
* Returns the accumulated time in seconds, useful for interpolation.
|
|
85
|
-
*
|
|
86
|
-
* @returns {number} Accumulated time in seconds
|
|
87
|
-
*/
|
|
88
|
-
get accumulatedTime() {
|
|
89
|
-
return this.accumulator / 1000; // Convert to seconds
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* @description
|
|
93
|
-
* Returns the interpolation factor between 0 and 1 for smooth rendering between ticks.
|
|
94
|
-
* Clamped to prevent extrapolation when ticks are skipped.
|
|
95
|
-
*
|
|
96
|
-
* @returns {number} Alpha value between 0 and 1
|
|
97
|
-
*/
|
|
98
|
-
get alpha() {
|
|
99
|
-
return Math.min(this.accumulatedTime / (1 / this.rate), 1.0);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './fixed-ticker';
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @description
|
|
3
|
-
* Generates a unique identifier as a hexadecimal string.
|
|
4
|
-
* Can include a prefix and a custom total length.
|
|
5
|
-
*
|
|
6
|
-
* @param options Optional configuration: prefix and total size
|
|
7
|
-
* @returns A unique identifier string
|
|
8
|
-
*
|
|
9
|
-
* @example
|
|
10
|
-
* generateId(); // "f3a2b1c4d5e67890"
|
|
11
|
-
* generateId({ prefix: 'user_' }); // "user_f3a2b1c4d5e67890"
|
|
12
|
-
* generateId({ prefix: 'user_', size: 24 }); // "user_00f3a2b1c4d5e67890"
|
|
13
|
-
*/
|
|
14
|
-
export function generateId(options = {}) {
|
|
15
|
-
const { prefix = "", size = 16 } = options;
|
|
16
|
-
// compute number of hex characters to generate (subtract prefix length)
|
|
17
|
-
const hexLength = Math.max(size - prefix.length, 8); // min 8 hex chars
|
|
18
|
-
// number of 32-bit integers needed to cover the hexLength
|
|
19
|
-
const numInts = Math.ceil(hexLength / 8);
|
|
20
|
-
const arr = crypto.getRandomValues(new Uint32Array(numInts));
|
|
21
|
-
let id = arr.reduce((acc, val) => acc + val.toString(16).padStart(8, "0"), "");
|
|
22
|
-
// truncate/pad to desired length
|
|
23
|
-
id = id.slice(0, hexLength).padStart(hexLength, "0");
|
|
24
|
-
return `${prefix}${id}`;
|
|
25
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './generate-id';
|
package/dist/core/index.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export * from './binary-codec';
|
|
2
|
-
export * from './events';
|
|
3
|
-
export * from './fixed-ticker';
|
|
4
|
-
export * from './generate-id';
|
|
5
|
-
export * from './lerp';
|
|
6
|
-
export * from './loop';
|
|
7
|
-
export * from './navmesh';
|
|
8
|
-
export * from './pooled-codec';
|
|
9
|
-
export * from './prediction';
|
package/dist/core/lerp/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './lerp';
|
package/dist/core/lerp/lerp.js
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @description
|
|
3
|
-
* Performs linear interpolation between two values.
|
|
4
|
-
*
|
|
5
|
-
* Linear interpolation (lerp) calculates a value between a start and end point
|
|
6
|
-
* based on a normalized interpolation factor (t). When t = 0, the result equals
|
|
7
|
-
* the start value; when t = 1, the result equals the end value. Values of t
|
|
8
|
-
* between 0 and 1 produce intermediate results.
|
|
9
|
-
*
|
|
10
|
-
* @remarks
|
|
11
|
-
* - This function does not clamp the interpolation factor. Values of t outside
|
|
12
|
-
* the range [0, 1] will extrapolate beyond the start and end values.
|
|
13
|
-
* - For clamped interpolation, combine with a clamp function on the t parameter.
|
|
14
|
-
* - Commonly used for smooth animations, camera movements, and value transitions.
|
|
15
|
-
*
|
|
16
|
-
* @param start - The starting value (when t = 0)
|
|
17
|
-
* @param end - The ending value (when t = 1)
|
|
18
|
-
* @param t - The interpolation factor, typically in the range [0, 1]
|
|
19
|
-
*
|
|
20
|
-
* @returns {number} The interpolated value between start and end
|
|
21
|
-
*
|
|
22
|
-
* @example
|
|
23
|
-
* ```typescript
|
|
24
|
-
* // Basic interpolation
|
|
25
|
-
* lerp(0, 100, 0.5); // Returns 50
|
|
26
|
-
* lerp(0, 100, 0); // Returns 0
|
|
27
|
-
* lerp(0, 100, 1); // Returns 100
|
|
28
|
-
*
|
|
29
|
-
* // Animation example
|
|
30
|
-
* const startPos = 0;
|
|
31
|
-
* const endPos = 100;
|
|
32
|
-
* const progress = 0.75;
|
|
33
|
-
* const currentPos = lerp(startPos, endPos, progress); // Returns 75
|
|
34
|
-
*
|
|
35
|
-
* // Extrapolation (t outside [0, 1])
|
|
36
|
-
* lerp(0, 100, 1.5); // Returns 150
|
|
37
|
-
* lerp(0, 100, -0.5); // Returns -50
|
|
38
|
-
* ```
|
|
39
|
-
*/
|
|
40
|
-
export function lerp(start, end, t) {
|
|
41
|
-
return start + (end - start) * t;
|
|
42
|
-
}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Server-side game loop driver using setImmediate.
|
|
3
|
-
*
|
|
4
|
-
* This driver runs the game loop as fast as possible without blocking the event loop,
|
|
5
|
-
* making it suitable for Node.js server environments where high tick rates are desired.
|
|
6
|
-
*
|
|
7
|
-
* Delta time is automatically calculated between iterations and passed to the update callback in seconds.
|
|
8
|
-
*
|
|
9
|
-
* **Note:** This driver requires Node.js as it uses `setImmediate` which is not available in browsers.
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* ```typescript
|
|
13
|
-
* const driver = new ImmediateDriver((dt) => {
|
|
14
|
-
* world.tick(dt);
|
|
15
|
-
* broadcastState();
|
|
16
|
-
* });
|
|
17
|
-
* driver.start();
|
|
18
|
-
* ```
|
|
19
|
-
*/
|
|
20
|
-
export class ImmediateDriver {
|
|
21
|
-
/**
|
|
22
|
-
* @param update - Callback invoked each tick with delta time in seconds
|
|
23
|
-
*/
|
|
24
|
-
constructor(update) {
|
|
25
|
-
this.update = update;
|
|
26
|
-
this.last = performance.now();
|
|
27
|
-
this.running = false;
|
|
28
|
-
/**
|
|
29
|
-
* Internal loop method that calculates delta time and schedules the next iteration.
|
|
30
|
-
*
|
|
31
|
-
* Delta time is provided in seconds.
|
|
32
|
-
*/
|
|
33
|
-
this.loop = () => {
|
|
34
|
-
if (!this.running)
|
|
35
|
-
return;
|
|
36
|
-
const now = performance.now();
|
|
37
|
-
const dt = (now - this.last) / 1000;
|
|
38
|
-
this.last = now;
|
|
39
|
-
this.update(dt);
|
|
40
|
-
setImmediate(this.loop);
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Starts the game loop using setImmediate.
|
|
45
|
-
*
|
|
46
|
-
* Resets timing to prevent large initial delta.
|
|
47
|
-
*/
|
|
48
|
-
start() {
|
|
49
|
-
this.running = true;
|
|
50
|
-
this.last = performance.now();
|
|
51
|
-
this.loop();
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Stops the game loop.
|
|
55
|
-
*
|
|
56
|
-
* Note: Does not cancel already queued setImmediate callbacks.
|
|
57
|
-
*/
|
|
58
|
-
stop() {
|
|
59
|
-
this.running = false;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Client-side game loop driver using requestAnimationFrame.
|
|
3
|
-
*
|
|
4
|
-
* This driver synchronizes updates with the browser's display refresh rate (typically 60 FPS),
|
|
5
|
-
* providing smooth rendering and automatic throttling when the tab is not visible.
|
|
6
|
-
*
|
|
7
|
-
* Delta time is automatically calculated between frames and passed to the update callback in seconds.
|
|
8
|
-
*
|
|
9
|
-
* @example
|
|
10
|
-
* ```typescript
|
|
11
|
-
* const driver = new RafDriver((dt) => {
|
|
12
|
-
* player.update(dt);
|
|
13
|
-
* renderer.render();
|
|
14
|
-
* });
|
|
15
|
-
* driver.start();
|
|
16
|
-
* ```
|
|
17
|
-
*/
|
|
18
|
-
export class RafDriver {
|
|
19
|
-
/**
|
|
20
|
-
* @param update - Callback invoked each frame with delta time in seconds
|
|
21
|
-
*/
|
|
22
|
-
constructor(update) {
|
|
23
|
-
this.update = update;
|
|
24
|
-
this.last = performance.now();
|
|
25
|
-
this.running = false;
|
|
26
|
-
this.rafId = null;
|
|
27
|
-
/**
|
|
28
|
-
* Internal loop method that calculates delta time and schedules the next frame.
|
|
29
|
-
*
|
|
30
|
-
* Delta time is provided in seconds.
|
|
31
|
-
*/
|
|
32
|
-
this.loop = () => {
|
|
33
|
-
if (!this.running)
|
|
34
|
-
return;
|
|
35
|
-
const now = performance.now();
|
|
36
|
-
const dt = (now - this.last) / 1000;
|
|
37
|
-
this.last = now;
|
|
38
|
-
this.update(dt);
|
|
39
|
-
requestAnimationFrame(this.loop);
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Starts the game loop using requestAnimationFrame.
|
|
44
|
-
*
|
|
45
|
-
* Resets timing to prevent large initial delta.
|
|
46
|
-
*/
|
|
47
|
-
start() {
|
|
48
|
-
this.running = true;
|
|
49
|
-
this.last = performance.now();
|
|
50
|
-
this.rafId = requestAnimationFrame(this.loop);
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Stops the game loop and cancels any pending animation frame.
|
|
54
|
-
*/
|
|
55
|
-
stop() {
|
|
56
|
-
this.running = false;
|
|
57
|
-
if (this.rafId !== null) {
|
|
58
|
-
cancelAnimationFrame(this.rafId);
|
|
59
|
-
this.rafId = null;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
}
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Minimal delay for setTimeout-based loop scheduling.
|
|
3
|
-
* Using 1ms allows the event loop to process I/O while still maintaining high tick rates.
|
|
4
|
-
*/
|
|
5
|
-
const TIMEOUT_DELAY = 1;
|
|
6
|
-
/**
|
|
7
|
-
* Server-side game loop driver using setTimeout.
|
|
8
|
-
*
|
|
9
|
-
* This driver provides a more controlled alternative to setImmediate, running the game loop
|
|
10
|
-
* with a minimal delay (1ms) between iterations. This ensures the event loop can process
|
|
11
|
-
* I/O operations while maintaining high tick rates.
|
|
12
|
-
*
|
|
13
|
-
* Unlike setImmediate which runs as fast as possible, setTimeout provides better I/O responsiveness
|
|
14
|
-
* by yielding to the event loop between ticks with a minimal delay.
|
|
15
|
-
*
|
|
16
|
-
* Delta time is automatically calculated between iterations and passed to the update callback in seconds.
|
|
17
|
-
*
|
|
18
|
-
* **Note:** This driver is designed for Node.js/Bun server environments. For maximum performance
|
|
19
|
-
* without I/O concerns, use ImmediateDriver instead.
|
|
20
|
-
*
|
|
21
|
-
* @example
|
|
22
|
-
* ```typescript
|
|
23
|
-
* const driver = new TimeoutDriver((dt) => {
|
|
24
|
-
* world.tick(dt);
|
|
25
|
-
* broadcastState();
|
|
26
|
-
* });
|
|
27
|
-
* driver.start();
|
|
28
|
-
* ```
|
|
29
|
-
*/
|
|
30
|
-
export class TimeoutDriver {
|
|
31
|
-
/**
|
|
32
|
-
* @param update - Callback invoked each tick with delta time in seconds
|
|
33
|
-
*/
|
|
34
|
-
constructor(update) {
|
|
35
|
-
this.update = update;
|
|
36
|
-
this.last = performance.now();
|
|
37
|
-
this.running = false;
|
|
38
|
-
/**
|
|
39
|
-
* Internal loop method that calculates delta time and schedules the next iteration.
|
|
40
|
-
*
|
|
41
|
-
* Delta time is provided in seconds. Uses 1ms delay to allow I/O processing.
|
|
42
|
-
*/
|
|
43
|
-
this.loop = () => {
|
|
44
|
-
if (!this.running)
|
|
45
|
-
return;
|
|
46
|
-
const now = performance.now();
|
|
47
|
-
const dt = (now - this.last) / 1000;
|
|
48
|
-
this.last = now;
|
|
49
|
-
this.update(dt);
|
|
50
|
-
setTimeout(this.loop, TIMEOUT_DELAY);
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Starts the game loop using setTimeout with minimal delay.
|
|
55
|
-
*
|
|
56
|
-
* Resets timing to prevent large initial delta.
|
|
57
|
-
*/
|
|
58
|
-
start() {
|
|
59
|
-
this.running = true;
|
|
60
|
-
this.last = performance.now();
|
|
61
|
-
this.loop();
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Stops the game loop.
|
|
65
|
-
*
|
|
66
|
-
* Note: Does not cancel already queued setTimeout callbacks.
|
|
67
|
-
*/
|
|
68
|
-
stop() {
|
|
69
|
-
this.running = false;
|
|
70
|
-
}
|
|
71
|
-
}
|
package/dist/core/loop/index.js
DELETED
package/dist/core/loop/loop.js
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { ImmediateDriver, RafDriver, TimeoutDriver } from "./drivers";
|
|
2
|
-
// Re-export driver classes for testing and direct usage
|
|
3
|
-
export { ImmediateDriver, RafDriver, TimeoutDriver };
|
|
4
|
-
/**
|
|
5
|
-
* Factory function to create a loop driver for the specified environment.
|
|
6
|
-
*
|
|
7
|
-
* @param type - The environment type
|
|
8
|
-
* - `'client'`: Browser RAF driver (60 FPS, syncs with display)
|
|
9
|
-
* - `'server'`: Node.js setImmediate driver (maximum performance)
|
|
10
|
-
* - `'server-timeout'`: Node.js setTimeout driver (balanced with I/O)
|
|
11
|
-
* @param update - Callback function invoked each frame with delta time in seconds
|
|
12
|
-
* @returns A configured LoopDriver instance ready to start
|
|
13
|
-
*
|
|
14
|
-
* @example
|
|
15
|
-
* ```typescript
|
|
16
|
-
* // Client
|
|
17
|
-
* const clientDriver = createDriver('client', (dt) => {
|
|
18
|
-
* game.update(dt);
|
|
19
|
-
* renderer.render();
|
|
20
|
-
* });
|
|
21
|
-
* clientDriver.start();
|
|
22
|
-
*
|
|
23
|
-
* // Server (maximum performance)
|
|
24
|
-
* const serverDriver = createDriver('server', (dt) => {
|
|
25
|
-
* simulation.tick(dt);
|
|
26
|
-
* });
|
|
27
|
-
* serverDriver.start();
|
|
28
|
-
*
|
|
29
|
-
* // Server (balanced with I/O)
|
|
30
|
-
* const balancedDriver = createDriver('server-timeout', (dt) => {
|
|
31
|
-
* simulation.tick(dt);
|
|
32
|
-
* handleNetworkIO();
|
|
33
|
-
* });
|
|
34
|
-
* balancedDriver.start();
|
|
35
|
-
* ```
|
|
36
|
-
*/
|
|
37
|
-
export function createDriver(type, update) {
|
|
38
|
-
if (type === 'server-immediate') {
|
|
39
|
-
return new ImmediateDriver(update);
|
|
40
|
-
}
|
|
41
|
-
else if (type === 'server-timeout') {
|
|
42
|
-
return new TimeoutDriver(update);
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
return new RafDriver(update);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './navmesh';
|
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* NavMesh Worker Pool - Manages multiple workers for parallel pathfinding
|
|
3
|
-
*/
|
|
4
|
-
export class NavMeshWorkerPool {
|
|
5
|
-
constructor(poolSize, workerPath, navType = 'grid', obstacles = []) {
|
|
6
|
-
this.poolSize = poolSize;
|
|
7
|
-
this.workerPath = workerPath;
|
|
8
|
-
this.navType = navType;
|
|
9
|
-
this.obstacles = obstacles;
|
|
10
|
-
this.workers = [];
|
|
11
|
-
this.nextWorkerIndex = 0;
|
|
12
|
-
this.requestId = 0;
|
|
13
|
-
this.pendingRequests = new Map();
|
|
14
|
-
this.initialized = false;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Initialize all workers in the pool
|
|
18
|
-
*/
|
|
19
|
-
async init() {
|
|
20
|
-
if (this.initialized)
|
|
21
|
-
return;
|
|
22
|
-
const initPromises = [];
|
|
23
|
-
for (let i = 0; i < this.poolSize; i++) {
|
|
24
|
-
const worker = new Worker(this.workerPath, { type: 'module' });
|
|
25
|
-
// Set up message handler
|
|
26
|
-
worker.onmessage = (e) => {
|
|
27
|
-
const msg = e.data;
|
|
28
|
-
if (msg.type === 'PATH_RESULT') {
|
|
29
|
-
const request = this.pendingRequests.get(msg.id);
|
|
30
|
-
if (request) {
|
|
31
|
-
request.resolve(msg.path);
|
|
32
|
-
this.pendingRequests.delete(msg.id);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
else if (msg.type === 'ERROR') {
|
|
36
|
-
// Reject all pending requests for this worker
|
|
37
|
-
for (const [id, request] of this.pendingRequests.entries()) {
|
|
38
|
-
request.reject(new Error(msg.error));
|
|
39
|
-
this.pendingRequests.delete(id);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
};
|
|
43
|
-
worker.onerror = (error) => {
|
|
44
|
-
console.error('Worker error:', error);
|
|
45
|
-
// Reject all pending requests for this worker
|
|
46
|
-
for (const [id, request] of this.pendingRequests.entries()) {
|
|
47
|
-
request.reject(new Error('Worker error'));
|
|
48
|
-
this.pendingRequests.delete(id);
|
|
49
|
-
}
|
|
50
|
-
};
|
|
51
|
-
this.workers.push(worker);
|
|
52
|
-
// Initialize worker
|
|
53
|
-
const readyPromise = new Promise((resolve) => {
|
|
54
|
-
const onReady = (e) => {
|
|
55
|
-
if (e.data.type === 'READY') {
|
|
56
|
-
worker.removeEventListener('message', onReady);
|
|
57
|
-
resolve();
|
|
58
|
-
}
|
|
59
|
-
};
|
|
60
|
-
worker.addEventListener('message', onReady);
|
|
61
|
-
});
|
|
62
|
-
worker.postMessage({
|
|
63
|
-
type: 'INIT',
|
|
64
|
-
navType: this.navType,
|
|
65
|
-
obstacles: this.obstacles,
|
|
66
|
-
});
|
|
67
|
-
initPromises.push(readyPromise);
|
|
68
|
-
}
|
|
69
|
-
await Promise.all(initPromises);
|
|
70
|
-
this.initialized = true;
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Find a path using the next available worker (round-robin)
|
|
74
|
-
*/
|
|
75
|
-
async findPath(from, to) {
|
|
76
|
-
if (!this.initialized) {
|
|
77
|
-
throw new Error('Worker pool not initialized. Call init() first.');
|
|
78
|
-
}
|
|
79
|
-
const id = this.requestId++;
|
|
80
|
-
const worker = this.workers[this.nextWorkerIndex];
|
|
81
|
-
this.nextWorkerIndex = (this.nextWorkerIndex + 1) % this.workers.length;
|
|
82
|
-
return new Promise((resolve, reject) => {
|
|
83
|
-
this.pendingRequests.set(id, { id, from, to, resolve, reject });
|
|
84
|
-
worker.postMessage({
|
|
85
|
-
type: 'FIND_PATH',
|
|
86
|
-
id,
|
|
87
|
-
from,
|
|
88
|
-
to,
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Add an obstacle to all workers
|
|
94
|
-
*/
|
|
95
|
-
async addObstacle(obstacle) {
|
|
96
|
-
if (!this.initialized) {
|
|
97
|
-
throw new Error('Worker pool not initialized. Call init() first.');
|
|
98
|
-
}
|
|
99
|
-
// Add to all workers
|
|
100
|
-
const promises = this.workers.map((worker) => {
|
|
101
|
-
return new Promise((resolve) => {
|
|
102
|
-
const onAdded = (e) => {
|
|
103
|
-
if (e.data.type === 'OBSTACLE_ADDED') {
|
|
104
|
-
worker.removeEventListener('message', onAdded);
|
|
105
|
-
resolve(e.data.obstacleId);
|
|
106
|
-
}
|
|
107
|
-
};
|
|
108
|
-
worker.addEventListener('message', onAdded);
|
|
109
|
-
worker.postMessage({ type: 'ADD_OBSTACLE', obstacle });
|
|
110
|
-
});
|
|
111
|
-
});
|
|
112
|
-
const ids = await Promise.all(promises);
|
|
113
|
-
return ids[0]; // All workers should return the same ID
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Remove an obstacle from all workers
|
|
117
|
-
*/
|
|
118
|
-
async removeObstacle(obstacleId) {
|
|
119
|
-
if (!this.initialized) {
|
|
120
|
-
throw new Error('Worker pool not initialized. Call init() first.');
|
|
121
|
-
}
|
|
122
|
-
const promises = this.workers.map((worker) => {
|
|
123
|
-
return new Promise((resolve) => {
|
|
124
|
-
const onRemoved = (e) => {
|
|
125
|
-
if (e.data.type === 'OBSTACLE_REMOVED') {
|
|
126
|
-
worker.removeEventListener('message', onRemoved);
|
|
127
|
-
resolve();
|
|
128
|
-
}
|
|
129
|
-
};
|
|
130
|
-
worker.addEventListener('message', onRemoved);
|
|
131
|
-
worker.postMessage({ type: 'REMOVE_OBSTACLE', obstacleId });
|
|
132
|
-
});
|
|
133
|
-
});
|
|
134
|
-
await Promise.all(promises);
|
|
135
|
-
}
|
|
136
|
-
/**
|
|
137
|
-
* Move an obstacle in all workers
|
|
138
|
-
*/
|
|
139
|
-
async moveObstacle(obstacleId, pos) {
|
|
140
|
-
if (!this.initialized) {
|
|
141
|
-
throw new Error('Worker pool not initialized. Call init() first.');
|
|
142
|
-
}
|
|
143
|
-
const promises = this.workers.map((worker) => {
|
|
144
|
-
return new Promise((resolve) => {
|
|
145
|
-
const onMoved = (e) => {
|
|
146
|
-
if (e.data.type === 'OBSTACLE_MOVED') {
|
|
147
|
-
worker.removeEventListener('message', onMoved);
|
|
148
|
-
resolve();
|
|
149
|
-
}
|
|
150
|
-
};
|
|
151
|
-
worker.addEventListener('message', onMoved);
|
|
152
|
-
worker.postMessage({ type: 'MOVE_OBSTACLE', obstacleId, pos });
|
|
153
|
-
});
|
|
154
|
-
});
|
|
155
|
-
await Promise.all(promises);
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* Terminate all workers
|
|
159
|
-
*/
|
|
160
|
-
terminate() {
|
|
161
|
-
for (const worker of this.workers) {
|
|
162
|
-
worker.terminate();
|
|
163
|
-
}
|
|
164
|
-
this.workers = [];
|
|
165
|
-
this.pendingRequests.clear();
|
|
166
|
-
this.initialized = false;
|
|
167
|
-
}
|
|
168
|
-
/**
|
|
169
|
-
* Get the number of pending requests
|
|
170
|
-
*/
|
|
171
|
-
get pendingCount() {
|
|
172
|
-
return this.pendingRequests.size;
|
|
173
|
-
}
|
|
174
|
-
/**
|
|
175
|
-
* Get the pool size
|
|
176
|
-
*/
|
|
177
|
-
get size() {
|
|
178
|
-
return this.workers.length;
|
|
179
|
-
}
|
|
180
|
-
}
|