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
package/dist/core.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var F=Object.defineProperty;var ee=Object.getOwnPropertyDescriptor;var te=Object.getOwnPropertyNames;var se=Object.prototype.hasOwnProperty;var re=(o,e)=>()=>(o&&(e=o(o=0)),e);var L=(o,e)=>{for(var t in e)F(o,t,{get:e[t],enumerable:!0})},ne=(o,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of te(e))!se.call(o,r)&&r!==t&&F(o,r,{get:()=>e[r],enumerable:!(s=ee(e,r))||s.enumerable});return o};var ie=o=>ne(F({},"__esModule",{value:!0}),o);var K={};L(K,{NavMeshWorkerPool:()=>I});var I,B=re(()=>{I=class{constructor(e,t,s="grid",r=[]){this.poolSize=e;this.workerPath=t;this.navType=s;this.obstacles=r;this.workers=[];this.nextWorkerIndex=0;this.requestId=0;this.pendingRequests=new Map;this.initialized=!1}async init(){if(this.initialized)return;let e=[];for(let t=0;t<this.poolSize;t++){let s=new Worker(this.workerPath,{type:"module"});s.onmessage=a=>{let n=a.data;if(n.type==="PATH_RESULT"){let i=this.pendingRequests.get(n.id);i&&(i.resolve(n.path),this.pendingRequests.delete(n.id))}else if(n.type==="ERROR")for(let[i,l]of this.pendingRequests.entries())l.reject(new Error(n.error)),this.pendingRequests.delete(i)},s.onerror=a=>{console.error("Worker error:",a);for(let[n,i]of this.pendingRequests.entries())i.reject(new Error("Worker error")),this.pendingRequests.delete(n)},this.workers.push(s);let r=new Promise(a=>{let n=i=>{i.data.type==="READY"&&(s.removeEventListener("message",n),a())};s.addEventListener("message",n)});s.postMessage({type:"INIT",navType:this.navType,obstacles:this.obstacles}),e.push(r)}await Promise.all(e),this.initialized=!0}async findPath(e,t){if(!this.initialized)throw new Error("Worker pool not initialized. Call init() first.");let s=this.requestId++,r=this.workers[this.nextWorkerIndex];return this.nextWorkerIndex=(this.nextWorkerIndex+1)%this.workers.length,new Promise((a,n)=>{this.pendingRequests.set(s,{id:s,from:e,to:t,resolve:a,reject:n}),r.postMessage({type:"FIND_PATH",id:s,from:e,to:t})})}async addObstacle(e){if(!this.initialized)throw new Error("Worker pool not initialized. Call init() first.");let t=this.workers.map(r=>new Promise(a=>{let n=i=>{i.data.type==="OBSTACLE_ADDED"&&(r.removeEventListener("message",n),a(i.data.obstacleId))};r.addEventListener("message",n),r.postMessage({type:"ADD_OBSTACLE",obstacle:e})}));return(await Promise.all(t))[0]}async removeObstacle(e){if(!this.initialized)throw new Error("Worker pool not initialized. Call init() first.");let t=this.workers.map(s=>new Promise(r=>{let a=n=>{n.data.type==="OBSTACLE_REMOVED"&&(s.removeEventListener("message",a),r())};s.addEventListener("message",a),s.postMessage({type:"REMOVE_OBSTACLE",obstacleId:e})}));await Promise.all(t)}async moveObstacle(e,t){if(!this.initialized)throw new Error("Worker pool not initialized. Call init() first.");let s=this.workers.map(r=>new Promise(a=>{let n=i=>{i.data.type==="OBSTACLE_MOVED"&&(r.removeEventListener("message",n),a())};r.addEventListener("message",n),r.postMessage({type:"MOVE_OBSTACLE",obstacleId:e,pos:t})}));await Promise.all(s)}terminate(){for(let e of this.workers)e.terminate();this.workers=[],this.pendingRequests.clear(),this.initialized=!1}get pendingCount(){return this.pendingRequests.size}get size(){return this.workers.length}}});var pe={};L(pe,{BaseBinaryCodec:()=>O,BinaryCodec:()=>x,BinaryPrimitives:()=>m,EventSystem:()=>P,FixedTicker:()=>U,ImmediateDriver:()=>k,IntentTracker:()=>M,NavMesh:()=>_,ObjectPool:()=>g,PooledArrayDecoder:()=>W,PooledCodec:()=>j,PooledDecoder:()=>T,PooledEncoder:()=>E,RafDriver:()=>v,Reconciliator:()=>q,TimeoutDriver:()=>w,createDriver:()=>ce,generateId:()=>oe,lerp:()=>ae});module.exports=ie(pe);var Y=Symbol("schemaSize");function X(o){let e=o[Y];if(e!==void 0)return e;let t=0;for(let s of Object.keys(o))t+=o[s].size;return o[Y]=t,t}var O=class{static encodeInto(e,t){let s=X(e),r=new ArrayBuffer(s),a=new DataView(r),n=0;for(let i of Object.keys(e)){let l=e[i];l.write(a,n,t[i]),n+=l.size}return new Uint8Array(r)}static decodeInto(e,t,s){let r=X(e);if(t.byteLength<r)throw new RangeError(`Buffer too small: expected ${r} bytes, got ${t.byteLength}`);let a=new DataView(t.buffer,t.byteOffset,t.byteLength),n=0;for(let i of Object.keys(e)){let l=e[i];s[i]=l.read(a,n),n+=l.size}return s}},m=class{static{this.u8={size:1,write:(e,t,s)=>e.setUint8(t,s),read:(e,t)=>e.getUint8(t),toNil:()=>0}}static{this.u16={size:2,write:(e,t,s)=>e.setUint16(t,s,!1),read:(e,t)=>e.getUint16(t,!1),toNil:()=>0}}static{this.u32={size:4,write:(e,t,s)=>e.setUint32(t,s,!1),read:(e,t)=>e.getUint32(t,!1),toNil:()=>0}}static{this.i8={size:1,write:(e,t,s)=>e.setInt8(t,s),read:(e,t)=>e.getInt8(t),toNil:()=>0}}static{this.i16={size:2,write:(e,t,s)=>e.setInt16(t,s,!1),read:(e,t)=>e.getInt16(t,!1),toNil:()=>0}}static{this.i32={size:4,write:(e,t,s)=>e.setInt32(t,s,!1),read:(e,t)=>e.getInt32(t,!1),toNil:()=>0}}static{this.f32={size:4,write:(e,t,s)=>e.setFloat32(t,s,!1),read:(e,t)=>e.getFloat32(t,!1),toNil:()=>0}}static{this.f64={size:8,write:(e,t,s)=>e.setFloat64(t,s,!1),read:(e,t)=>e.getFloat64(t,!1),toNil:()=>0}}static{this.bool={size:1,write:(e,t,s)=>e.setUint8(t,s?1:0),read:(e,t)=>e.getUint8(t)!==0,toNil:()=>!1}}static string(e){return{size:e+2,write(t,s,r){let n=new TextEncoder().encode(r);if(n.length>e)throw new RangeError(`String too long, max ${e} bytes`);t.setUint16(s,n.length,!1);for(let i=0;i<n.length;i++)t.setUint8(s+2+i,n[i]);for(let i=n.length;i<e;i++)t.setUint8(s+2+i,0)},read(t,s){let r=t.getUint16(s,!1),a=new Uint8Array(r);for(let n=0;n<r;n++)a[n]=t.getUint8(s+2+n);return new TextDecoder().decode(a)},toNil:()=>""}}static{this.vec2={size:8,write(e,t,s){e.setFloat32(t,s.x,!1),e.setFloat32(t+4,s.y,!1)},read(e,t){return{x:e.getFloat32(t,!1),y:e.getFloat32(t+4,!1)}},toNil:()=>({x:0,y:0})}}static{this.vec3={size:12,write(e,t,s){e.setFloat32(t,s.x,!1),e.setFloat32(t+4,s.y,!1),e.setFloat32(t+8,s.z,!1)},read(e,t){return{x:e.getFloat32(t,!1),y:e.getFloat32(t+4,!1),z:e.getFloat32(t+8,!1)}},toNil:()=>({x:0,y:0,z:0})}}static{this.color={size:4,write(e,t,s){e.setUint8(t,s.r),e.setUint8(t+1,s.g),e.setUint8(t+2,s.b),e.setUint8(t+3,s.a)},read(e,t){return{r:e.getUint8(t),g:e.getUint8(t+1),b:e.getUint8(t+2),a:e.getUint8(t+3)}},toNil:()=>({r:0,g:0,b:0,a:0})}}static{this.f32_le={size:4,write:(e,t,s)=>e.setFloat32(t,s,!0),read:(e,t)=>e.getFloat32(t,!0),toNil:()=>0}}static{this.f64_le={size:8,write:(e,t,s)=>e.setFloat64(t,s,!0),read:(e,t)=>e.getFloat64(t,!0),toNil:()=>0}}static{this.u16_le={size:2,write:(e,t,s)=>e.setUint16(t,s,!0),read:(e,t)=>e.getUint16(t,!0),toNil:()=>0}}static{this.u32_le={size:4,write:(e,t,s)=>e.setUint32(t,s,!0),read:(e,t)=>e.getUint32(t,!0),toNil:()=>0}}static{this.i16_le={size:2,write:(e,t,s)=>e.setInt16(t,s,!0),read:(e,t)=>e.getInt16(t,!0),toNil:()=>0}}static{this.i32_le={size:4,write:(e,t,s)=>e.setInt32(t,s,!0),read:(e,t)=>e.getInt32(t,!0),toNil:()=>0}}static{this.vec2_le={size:8,write:(e,t,s)=>{e.setFloat32(t,s[0],!0),e.setFloat32(t+4,s[1],!0)},read:(e,t)=>[e.getFloat32(t,!0),e.getFloat32(t+4,!0)],toNil:()=>[0,0]}}static{this.vec3_le={size:12,write:(e,t,s)=>{e.setFloat32(t,s[0],!0),e.setFloat32(t+4,s[1],!0),e.setFloat32(t+8,s[2],!0)},read:(e,t)=>[e.getFloat32(t,!0),e.getFloat32(t+4,!0),e.getFloat32(t+8,!0)],toNil:()=>[0,0,0]}}static{this.vec4_le={size:16,write:(e,t,s)=>{e.setFloat32(t,s[0],!0),e.setFloat32(t+4,s[1],!0),e.setFloat32(t+8,s[2],!0),e.setFloat32(t+12,s[3],!0)},read:(e,t)=>[e.getFloat32(t,!0),e.getFloat32(t+4,!0),e.getFloat32(t+8,!0),e.getFloat32(t+12,!0)],toNil:()=>[0,0,0,0]}}},x=class extends O{static{this.u8=m.u8}static{this.u16=m.u16}static{this.u32=m.u32}static{this.i8=m.i8}static{this.i16=m.i16}static{this.i32=m.i32}static{this.f32=m.f32}static{this.bool=m.bool}static{this.string=m.string}static{this.vec2=m.vec2}static{this.vec3=m.vec3}static{this.color=m.color}static encode(e,t){return this.encodeInto(e,t)}static decode(e,t,s){return this.decodeInto(e,t,s)}};var P=class{constructor({events:e}){this.callbacks=new Map,this.events=e;for(let t of this.events)this.callbacks.set(t,new Set)}on(e,t){let s=this.callbacks.get(e);if(!s)return console.warn(`Event "${e}" does not exist.`);s.add(t)}once(e,t){let s=r=>{t(r),this.off(e,s)};this.on(e,s)}emit(e,t){let s=this.callbacks.get(e);if(!s)return console.warn(`Event "${e}" does not exist.`);for(let r of s)r(t)}off(e,t){let s=this.callbacks.get(e);if(!s)return console.warn(`Event "${e}" does not exist.`);s.delete(t)}clear(e){if(!e){this.callbacks.clear();for(let s of this.events)this.callbacks.set(s,new Set);return}let t=this.callbacks.get(e);if(!t)return console.warn(`Event "${e}" does not exist.`);t.clear()}};var U=class{constructor({rate:e,onTick:t}){this.accumulator=0;this._tickCount=0;this.rate=e,this.intervalMs=1e3/this.rate,this.onTick=t,this.maxTicksPerFrame=Math.max(1,Math.floor(e/2))}getTicks(e){this.accumulator+=e*1e3;let t=0;for(;this.accumulator>=this.intervalMs&&t<this.maxTicksPerFrame;)this.accumulator-=this.intervalMs,t++;let s=Math.floor(this.accumulator/this.intervalMs);return s>0&&this.onTickSkipped&&this.onTickSkipped(s),t}tick(e){let t=this.getTicks(e);for(let s=0;s<t;s++)this.onTick(1/this.rate,this._tickCount++)}get tickCount(){return this._tickCount}resetTickCount(){this._tickCount=0}get accumulatedTime(){return this.accumulator/1e3}get alpha(){return Math.min(this.accumulatedTime/(1/this.rate),1)}};function oe(o={}){let{prefix:e="",size:t=16}=o,s=Math.max(t-e.length,8),r=Math.ceil(s/8),n=crypto.getRandomValues(new Uint32Array(r)).reduce((i,l)=>i+l.toString(16).padStart(8,"0"),"");return n=n.slice(0,s).padStart(s,"0"),`${e}${n}`}function ae(o,e,t){return o+(e-o)*t}var k=class{constructor(e){this.update=e;this.last=performance.now();this.running=!1;this.loop=()=>{if(!this.running)return;let e=performance.now(),t=(e-this.last)/1e3;this.last=e,this.update(t),setImmediate(this.loop)}}start(){this.running=!0,this.last=performance.now(),this.loop()}stop(){this.running=!1}};var v=class{constructor(e){this.update=e;this.last=performance.now();this.running=!1;this.rafId=null;this.loop=()=>{if(!this.running)return;let e=performance.now(),t=(e-this.last)/1e3;this.last=e,this.update(t),requestAnimationFrame(this.loop)}}start(){this.running=!0,this.last=performance.now(),this.rafId=requestAnimationFrame(this.loop)}stop(){this.running=!1,this.rafId!==null&&(cancelAnimationFrame(this.rafId),this.rafId=null)}};var le=1,w=class{constructor(e){this.update=e;this.last=performance.now();this.running=!1;this.loop=()=>{if(!this.running)return;let e=performance.now(),t=(e-this.last)/1e3;this.last=e,this.update(t),setTimeout(this.loop,le)}}start(){this.running=!0,this.last=performance.now(),this.loop()}stop(){this.running=!1}};function ce(o,e){return o==="server-immediate"?new k(e):o==="server-timeout"?new w(e):new v(e)}var de=[{x:1,y:0},{x:-1,y:0},{x:0,y:1},{x:0,y:-1}],S=o=>({x:Math.floor(o.x),y:Math.floor(o.y)}),$=o=>({x:o.x+.5,y:o.y+.5}),ue=(()=>{let o=1;return()=>o++})(),b=(o,e)=>o&65535|(e&65535)<<16,V=o=>({x:o<<16>>16,y:o>>16}),A=class{constructor(e){this.scoreFn=e;this.heap=[]}push(e){this.heap.push(e),this.bubbleUp(this.heap.length-1)}pop(){let e=this.heap[0],t=this.heap.pop();return this.heap.length>0&&t!==void 0&&(this.heap[0]=t,this.sinkDown(0)),e}get size(){return this.heap.length}bubbleUp(e){let t=this.heap[e],s=this.scoreFn(t);for(;e>0;){let r=(e+1>>1)-1,a=this.heap[r];if(s>=this.scoreFn(a))break;this.heap[r]=t,this.heap[e]=a,e=r}}sinkDown(e){let t=this.heap.length,s=this.heap[e],r=this.scoreFn(s);for(;;){let a=e+1<<1,n=a-1,i=null,l;if(n<t){let c=this.heap[n];l=this.scoreFn(c),l<r&&(i=n)}if(a<t){let c=this.heap[a];this.scoreFn(c)<(i===null?r:l)&&(i=a)}if(i===null)break;this.heap[e]=this.heap[i],this.heap[i]=s,e=i}}},R=class{constructor(e=1){this.grid=new Map;this.obstacleCells=new Map;this.cellSize=e}hash(e,t){let s=Math.floor(e/this.cellSize),r=Math.floor(t/this.cellSize);return b(s,r)}add(e,t){let s=this.getCellsForObstacle(t);for(let r of s)this.grid.has(r)||this.grid.set(r,new Set),this.grid.get(r).add(e);this.obstacleCells.set(e,s)}remove(e){let t=this.obstacleCells.get(e);if(t){for(let s of t){let r=this.grid.get(s);r&&(r.delete(e),r.size===0&&this.grid.delete(s))}this.obstacleCells.delete(e)}}query(e){let t=this.hash(e.x,e.y);return this.grid.get(t)||new Set}clear(){this.grid.clear(),this.obstacleCells.clear()}getCellsForObstacle(e){let t=new Set;if(e.type==="circle"){let s=e.radius,r=Math.floor((e.pos.x-s)/this.cellSize),a=Math.floor((e.pos.x+s)/this.cellSize),n=Math.floor((e.pos.y-s)/this.cellSize),i=Math.floor((e.pos.y+s)/this.cellSize);for(let l=r;l<=a;l++)for(let c=n;c<=i;c++)t.add(b(l,c))}else if(e.type==="rect"){let s=e.pos.x+e.size.x/2,r=e.pos.y+e.size.y/2,a=e.size.x/2,n=e.size.y/2,i=Math.sqrt(a*a+n*n),l=Math.floor((s-i)/this.cellSize),c=Math.floor((s+i)/this.cellSize),u=Math.floor((r-i)/this.cellSize),d=Math.floor((r+i)/this.cellSize);for(let h=l;h<=c;h++)for(let f=u;f<=d;f++)t.add(b(h,f))}else if(e.type==="polygon"){let s=J(e),r=Math.floor(s.minX/this.cellSize),a=Math.floor(s.maxX/this.cellSize),n=Math.floor(s.minY/this.cellSize),i=Math.floor(s.maxY/this.cellSize);for(let l=r;l<=a;l++)for(let c=n;c<=i;c++)t.add(b(l,c))}return t}};function H(o,e){let t=o.x-e.pos.x,s=o.y-e.pos.y;return t*t+s*s<=e.radius*e.radius}function G(o,e){let t=e.pos.x+e.size.x/2,s=e.pos.y+e.size.y/2;if(e.rotation){let r=Math.cos(-e.rotation),a=Math.sin(-e.rotation),n=o.x-t,i=o.y-s,l=n*r-i*a,c=n*a+i*r;return Math.abs(l)<=e.size.x/2&&Math.abs(c)<=e.size.y/2}return o.x>=e.pos.x&&o.y>=e.pos.y&&o.x<=e.pos.x+e.size.x&&o.y<=e.pos.y+e.size.y}function Z(o,e){let t=!1,s=e.points,r=e.rotation?Math.cos(e.rotation):1,a=e.rotation?Math.sin(e.rotation):0;for(let n=0,i=s.length-1;n<s.length;i=n++){let l=s[n].x,c=s[n].y,u=s[i].x,d=s[i].y;if(e.rotation){let f=l*r-c*a,y=l*a+c*r,p=u*r-d*a,z=u*a+d*r;l=f,c=y,u=p,d=z}l+=e.pos.x,c+=e.pos.y,u+=e.pos.x,d+=e.pos.y,c>o.y!=d>o.y&&o.x<(u-l)*(o.y-c)/(d-c)+l&&(t=!t)}return t}function J(o){let e=1/0,t=1/0,s=-1/0,r=-1/0,a=o.rotation?Math.cos(o.rotation):1,n=o.rotation?Math.sin(o.rotation):0;for(let i of o.points){let l=i.x,c=i.y;if(o.rotation){let u=l*a-c*n,d=l*n+c*a;l=u,c=d}l+=o.pos.x,c+=o.pos.y,e=Math.min(e,l),t=Math.min(t,c),s=Math.max(s,l),r=Math.max(r,c)}return{minX:e,minY:t,maxX:s,maxY:r}}var N=class{constructor(){this.items=new Map;this.spatial=new R(1);this._cachedItems=[];this.dirty=!0;this.version=0}add(e){let t=ue(),s={...e,id:t};return this.items.set(t,s),this.spatial.add(t,s),this.dirty=!0,this.version++,t}move(e,t){let s=this.items.get(e);if(!s)return;this.spatial.remove(e);let r={...s,pos:{...t}};this.items.set(e,r),this.spatial.add(e,r),this.dirty=!0,this.version++}remove(e){this.spatial.remove(e),this.items.delete(e),this.dirty=!0,this.version++}at(e){let t=this.spatial.query(e);for(let s of t){let r=this.items.get(s);if(!(!r||r.solid===!1)&&(r.type==="circle"&&H(e,r)||r.type==="rect"&&G(e,r)||r.type==="polygon"&&Z(e,r)))return r}}get values(){return this.dirty?(this._cachedItems=[...this.items.values()],this.dirty=!1,this._cachedItems):this._cachedItems}},C=class{constructor(e){this.obstacles=e;this.blocked=new Set}rebuild(){this.blocked.clear();for(let e of this.obstacles.values)if(e.solid!==!1){if(e.type==="circle"){let t=Math.ceil(e.radius),s=Math.floor(e.pos.x),r=Math.floor(e.pos.y);for(let a=-t;a<=t;a++)for(let n=-t;n<=t;n++){let i=s+a,l=r+n,c={x:i+.5,y:l+.5};H(c,e)&&this.blocked.add(b(i,l))}}else if(e.type==="rect"){let t=e.pos.x+e.size.x/2,s=e.pos.y+e.size.y/2,r=e.size.x/2,a=e.size.y/2,n=Math.sqrt(r*r+a*a),i=Math.floor(t-n),l=Math.ceil(t+n),c=Math.floor(s-n),u=Math.ceil(s+n);for(let d=i;d<=l;d++)for(let h=c;h<=u;h++){let f={x:d+.5,y:h+.5};G(f,e)&&this.blocked.add(b(d,h))}}else if(e.type==="polygon"){let t=J(e),s=Math.floor(t.minX),r=Math.ceil(t.maxX),a=Math.floor(t.minY),n=Math.ceil(t.maxY);for(let i=s;i<=r;i++)for(let l=a;l<=n;l++){let c={x:i+.5,y:l+.5};Z(c,e)&&this.blocked.add(b(i,l))}}}}findPath(e,t){return Q(S(e),S(t),(s,r)=>!this.blocked.has(b(s,r))).map($)}},D=class{constructor(e){this.obstacles=e}rebuild(){}findPath(e,t){let s=Math.ceil(Math.hypot(t.x-e.x,t.y-e.y)*2),r=!1;for(let n=1;n<=s;n++){let i=n/s,l={x:e.x+(t.x-e.x)*i,y:e.y+(t.y-e.y)*i};if(this.obstacles.at(l)){r=!0;break}}return r?Q(S(e),S(t),(n,i)=>{let l={x:n+.5,y:i+.5};return!this.obstacles.at(l)}).map($):[e,t]}},_=class{constructor(e,t){this.type=e;this.lastVersion=-1;this.pendingPaths=0;this.AUTO_WORKER_THRESHOLD=20;this.obstacles=new N,this.options={workers:t?.workers??!1,workerPoolSize:t?.workerPoolSize??4,workerPath:t?.workerPath??"./navmesh.worker.js"},e==="grid"&&(this.grid=new C(this.obstacles)),e==="graph"&&(this.graph=new D(this.obstacles)),this.options.workers===!0&&this.initWorkerPool()}async initWorkerPool(){if(!this.workerPool)try{let{NavMeshWorkerPool:e}=await Promise.resolve().then(()=>(B(),K));this.workerPool=new e(this.options.workerPoolSize,this.options.workerPath,this.type,this.obstacles.values),await this.workerPool.init()}catch(e){console.warn("Failed to initialize worker pool, falling back to sync:",e),this.options.workers=!1}}shouldUseWorkers(){return this.options.workers===!1?!1:this.options.workers===!0?!0:this.pendingPaths>=this.AUTO_WORKER_THRESHOLD}addObstacle(e){return this.obstacles.add(e)}moveObstacle(e,t){this.obstacles.move(e,t)}removeObstacle(e){this.obstacles.remove(e)}getObstacles(){return this.obstacles.values}findPath({from:e,to:t}){return this.shouldUseWorkers()&&this.workerPool?(this.pendingPaths++,this.findPathAsync(e,t).finally(()=>{this.pendingPaths--})):(this.rebuild(),this.type==="grid"?this.grid.findPath(e,t):this.graph.findPath(e,t))}async findPathAsync(e,t){return this.options.workers==="auto"&&!this.workerPool&&await this.initWorkerPool(),this.workerPool?this.workerPool.findPath(e,t):(this.rebuild(),this.type==="grid"?this.grid.findPath(e,t):this.graph.findPath(e,t))}rebuild(){this.lastVersion!==this.obstacles.version&&(this.grid?.rebuild(),this.graph?.rebuild(),this.lastVersion=this.obstacles.version)}dispose(){this.workerPool&&(this.workerPool.terminate(),this.workerPool=void 0)}getWorkerStatus(){return{workersEnabled:this.options.workers,workerPoolActive:!!this.workerPool,pendingPaths:this.pendingPaths,usingWorkersNow:this.shouldUseWorkers()}}};function Q(o,e,t){let s=new Map,r=new Map,a=new Set,n=new Set,i=d=>b(d.x,d.y),l=(d,h)=>Math.abs(d.x-h.x)+Math.abs(d.y-h.y),c=new A(d=>{let h=V(d);return r.get(d)+l(h,e)}),u=i(o);for(r.set(u,0),c.push(u),n.add(u);c.size>0;){let d=c.pop();n.delete(d);let h=V(d);if(h.x===e.x&&h.y===e.y)return he(s,h);a.add(d);for(let f of de){let y={x:h.x+f.x,y:h.y+f.y};if(!t(y.x,y.y))continue;let p=i(y);if(a.has(p))continue;let z=r.get(d)+1;z<(r.get(p)??1/0)&&(r.set(p,z),s.set(p,d),n.has(p)||(c.push(p),n.add(p)))}}return[]}function he(o,e){let t=[e],s=b(e.x,e.y);for(;o.has(s);)s=o.get(s),t.push(V(s));return t.reverse()}var g=class{constructor(e){this.factory=e;this.pool=[]}acquire(){return this.pool.pop()??this.factory()}release(e){this.pool.push(e)}releaseAll(e){this.pool.push(...e)}},T=class{constructor(e){this.schema=e;this.pool=new g(()=>this.createNil())}createNil(){let e={};for(let t of Object.keys(this.schema)){let s=this.schema[t];e[t]="toNil"in s?s.toNil():void 0}return e}decode(e){let t=this.pool.acquire();return this.decodeInto(e,t),t}decodeInto(e,t){let s=0;for(let r of Object.keys(this.schema)){let a=this.schema[r];if("decodeAll"in a){let n=a.decodeAll(e.subarray(s));t[r]=n.value,s+=n.bytesRead}else if("decodeField"in a){let n=a.decodeField(e.subarray(s));t[r]=n.value,s+=n.bytesRead}else if("decode"in a){let n=a.decode(e.subarray(s));t[r]=n.value,s+=n.bytesRead}else{let n=a.size||0,i=e.subarray(s,s+n);x.decodeInto({[r]:a},i,t),s+=n}}}release(e){this.pool.release(e)}},W=class{constructor(e){this.pooledDecoder=new T(e)}decodeAll(e){return e.map(t=>this.pooledDecoder.decode(t))}releaseAll(e){e.forEach(t=>this.pooledDecoder.release(t))}},E=class{constructor(e,t=1024){this.schema=e;this.bufferSize=t;this.pool=new g(()=>new Uint8Array(t))}encode(e){let t=this.pool.acquire(),s=0;for(let r of Object.keys(this.schema)){let a=this.schema[r];if("encode"in a){let n=a.encode(e[r]);t.set(n,s),s+=n.length}else if("encodeAll"in a){let n=a.encodeAll(e[r]),i=0;for(let l of n)t.set(l,s+i),i+=l.length;s+=i}else{let n=x.encode({[r]:a},{[r]:e[r]});t.set(n,s),s+=n.length}}return t.subarray(0,s)}release(e){this.pool.release(e)}},j=class{constructor(e){this.schema=e;this.encoder=new E(e),this.decoder=new T(e)}calculateSize(e){let t=0;for(let s of Object.keys(this.schema)){let r=this.schema[s];"size"in r?t+=r.size:"calculateSize"in r&&(t+=r.calculateSize(e[s]))}return t}encodeInto(e,t,s){let r=new DataView(t.buffer,t.byteOffset),a=s;for(let n of Object.keys(this.schema)){let i=this.schema[n];if("write"in i)i.write(r,a,e[n]),a+=i.size;else if("encodeInto"in i){let l=i.encodeInto(e[n],t,a);a+=l}else if("encode"in i){let l=i.encode(e[n]);t.set(l,a),a+=l.length}}return a-s}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}release(e){this.decoder.release(e)}static array(e){let t=0;for(let l of Object.keys(e)){let c=e[l];t+=c.size||0}let s=new g(()=>new Uint8Array(16384)),r=new g(()=>{let l={};for(let c of Object.keys(e)){let u=e[c];l[c]="toNil"in u?u.toNil():void 0}return l}),a=new g(()=>[]),n=null,i=null;return{__arrayType:void 0,calculateSize(l){return 2+l.length*t},encodeInto(l,c,u){let d=new DataView(c.buffer,c.byteOffset);d.setUint16(u,l.length,!1);let h=u+2;for(let f of l)for(let y of Object.keys(e)){let p=e[y];p.write(d,h,f[y]),h+=p.size}return h-u},encode(l){let c=2+l.length*t,u=s.acquire();u.length<c&&(s.release(u),u=new Uint8Array(Math.max(c,u.length*2))),(!n||n.buffer!==u.buffer)&&(n=new DataView(u.buffer,u.byteOffset)),n.setUint16(0,l.length,!1);let d=2;for(let f of l)for(let y of Object.keys(e)){let p=e[y];p.write(n,d,f[y]),d+=p.size}let h=new Uint8Array(d);return h.set(u.subarray(0,d)),s.release(u),h},decodeField(l){let c=l[0]<<8|l[1],u=a.acquire();u.length=c,(!i||i.buffer!==l.buffer||i.byteOffset!==l.byteOffset)&&(i=new DataView(l.buffer,l.byteOffset));let d=2;for(let h=0;h<c;h++){let f=r.acquire();for(let y of Object.keys(e)){let p=e[y];f[y]=p.read(i,d),d+=p.size}u[h]=f}return{value:u,bytesRead:d}},decode(l){return this.decodeField(l).value},toNil(){return[]}}}};var M=class{constructor(){this.tracker=new Map}get size(){return this.tracker.size}track(e,t){return this.tracker.has(e)||this.tracker.set(e,[]),this.tracker.get(e).push(t),t}dropUpTo(e){let t=[];for(let[s,r]of this.tracker)s<=e?this.tracker.delete(s):t.push([s,r]);return t.sort(([s],[r])=>s-r),t.map(([s,r])=>r).flat()}values(){return Array.from(this.tracker.entries()).sort(([e],[t])=>e-t).map(([e,t])=>t).flat()}},q=class{constructor(e){this.options=e;this.tracker=new M}trackIntent(e,t){this.tracker.track(e,t)}onSnapshot(e){this.options.onLoadState(e.state);let t=this.tracker.dropUpTo(e.tick);t.length>0&&this.options.onReplay(t)}replay(e){this.options.onReplay(e)}};
|
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Stores component data using separate TypedArrays per field (SoA - Structure of Arrays).
|
|
3
|
-
* Alternative to DataView-based storage for comparison.
|
|
4
|
-
*
|
|
5
|
-
* Tradeoffs:
|
|
6
|
-
* + Faster individual field access (native typed array operations)
|
|
7
|
-
* + Better for column-major access patterns
|
|
8
|
-
* + SIMD-friendly (can vectorize single-field operations)
|
|
9
|
-
* - Worse cache locality for row-major access (whole component reads)
|
|
10
|
-
* - More memory fragmentation (separate arrays)
|
|
11
|
-
* - Slightly higher memory overhead (each TypedArray has its own header)
|
|
12
|
-
*/
|
|
13
|
-
export class ComponentStore {
|
|
14
|
-
constructor(component, maxEntities) {
|
|
15
|
-
this.component = component;
|
|
16
|
-
this.maxEntities = maxEntities;
|
|
17
|
-
this.stride = component.size;
|
|
18
|
-
// Pre-compute field metadata
|
|
19
|
-
this.fieldKeys = component.fieldNames;
|
|
20
|
-
this.fields = [];
|
|
21
|
-
this.fieldIndexMap = {};
|
|
22
|
-
this.arrays = [];
|
|
23
|
-
// Create separate typed array for each field
|
|
24
|
-
for (let i = 0; i < this.fieldKeys.length; i++) {
|
|
25
|
-
const key = this.fieldKeys[i];
|
|
26
|
-
const field = component.schema[key];
|
|
27
|
-
this.fields.push(field);
|
|
28
|
-
this.fieldIndexMap[key] = i;
|
|
29
|
-
// Allocate appropriate typed array based on field type
|
|
30
|
-
switch (field.size) {
|
|
31
|
-
case 4:
|
|
32
|
-
// Could be f32, i32, or u32 - check field type
|
|
33
|
-
if (field.read.toString().includes("getFloat32")) {
|
|
34
|
-
this.arrays.push(new Float32Array(maxEntities));
|
|
35
|
-
}
|
|
36
|
-
else if (field.read.toString().includes("getInt32")) {
|
|
37
|
-
this.arrays.push(new Int32Array(maxEntities));
|
|
38
|
-
}
|
|
39
|
-
else {
|
|
40
|
-
this.arrays.push(new Uint32Array(maxEntities));
|
|
41
|
-
}
|
|
42
|
-
break;
|
|
43
|
-
case 2:
|
|
44
|
-
this.arrays.push(new Uint16Array(maxEntities));
|
|
45
|
-
break;
|
|
46
|
-
case 1:
|
|
47
|
-
this.arrays.push(new Uint8Array(maxEntities));
|
|
48
|
-
break;
|
|
49
|
-
default:
|
|
50
|
-
// Fallback to Uint8Array with multiple elements
|
|
51
|
-
this.arrays.push(new Uint8Array(maxEntities * field.size));
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
// Create single reusable object
|
|
55
|
-
this.reusableObject = {};
|
|
56
|
-
for (let i = 0; i < this.fieldKeys.length; i++) {
|
|
57
|
-
this.reusableObject[this.fieldKeys[i]] = this.fields[i].toNil();
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Get component data for an entity.
|
|
62
|
-
*
|
|
63
|
-
* ⚠️ IMPORTANT: Returns a REUSED object that is overwritten on the next get() call.
|
|
64
|
-
*/
|
|
65
|
-
get(entityId) {
|
|
66
|
-
const length = this.fields.length;
|
|
67
|
-
// Unrolled loop for common cases
|
|
68
|
-
if (length === 2) {
|
|
69
|
-
this.reusableObject[this.fieldKeys[0]] = this.arrays[0][entityId];
|
|
70
|
-
this.reusableObject[this.fieldKeys[1]] = this.arrays[1][entityId];
|
|
71
|
-
}
|
|
72
|
-
else if (length === 3) {
|
|
73
|
-
this.reusableObject[this.fieldKeys[0]] = this.arrays[0][entityId];
|
|
74
|
-
this.reusableObject[this.fieldKeys[1]] = this.arrays[1][entityId];
|
|
75
|
-
this.reusableObject[this.fieldKeys[2]] = this.arrays[2][entityId];
|
|
76
|
-
}
|
|
77
|
-
else if (length === 4) {
|
|
78
|
-
this.reusableObject[this.fieldKeys[0]] = this.arrays[0][entityId];
|
|
79
|
-
this.reusableObject[this.fieldKeys[1]] = this.arrays[1][entityId];
|
|
80
|
-
this.reusableObject[this.fieldKeys[2]] = this.arrays[2][entityId];
|
|
81
|
-
this.reusableObject[this.fieldKeys[3]] = this.arrays[3][entityId];
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
// Generic loop for other sizes
|
|
85
|
-
for (let i = 0; i < length; i++) {
|
|
86
|
-
this.reusableObject[this.fieldKeys[i]] = this.arrays[i][entityId];
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
return this.reusableObject;
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Get a mutable copy of component data.
|
|
93
|
-
*/
|
|
94
|
-
getMutable(entityId) {
|
|
95
|
-
const copy = {};
|
|
96
|
-
this.copyTo(entityId, copy);
|
|
97
|
-
return copy;
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Copy component data into a provided object.
|
|
101
|
-
*/
|
|
102
|
-
copyTo(entityId, target) {
|
|
103
|
-
for (let i = 0; i < this.fields.length; i++) {
|
|
104
|
-
target[this.fieldKeys[i]] = this.arrays[i][entityId];
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* Set component data for an entity.
|
|
109
|
-
*/
|
|
110
|
-
set(entityId, data) {
|
|
111
|
-
const length = this.fields.length;
|
|
112
|
-
// Unrolled loop for common cases
|
|
113
|
-
if (length === 2) {
|
|
114
|
-
this.arrays[0][entityId] = data[this.fieldKeys[0]];
|
|
115
|
-
this.arrays[1][entityId] = data[this.fieldKeys[1]];
|
|
116
|
-
}
|
|
117
|
-
else if (length === 3) {
|
|
118
|
-
this.arrays[0][entityId] = data[this.fieldKeys[0]];
|
|
119
|
-
this.arrays[1][entityId] = data[this.fieldKeys[1]];
|
|
120
|
-
this.arrays[2][entityId] = data[this.fieldKeys[2]];
|
|
121
|
-
}
|
|
122
|
-
else if (length === 4) {
|
|
123
|
-
this.arrays[0][entityId] = data[this.fieldKeys[0]];
|
|
124
|
-
this.arrays[1][entityId] = data[this.fieldKeys[1]];
|
|
125
|
-
this.arrays[2][entityId] = data[this.fieldKeys[2]];
|
|
126
|
-
this.arrays[3][entityId] = data[this.fieldKeys[3]];
|
|
127
|
-
}
|
|
128
|
-
else {
|
|
129
|
-
// Generic loop for other sizes
|
|
130
|
-
for (let i = 0; i < length; i++) {
|
|
131
|
-
this.arrays[i][entityId] = data[this.fieldKeys[i]];
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* Update specific fields of a component.
|
|
137
|
-
* Optimized to avoid Object.keys() allocation in hot path.
|
|
138
|
-
*/
|
|
139
|
-
update(entityId, partial) {
|
|
140
|
-
// Direct iteration
|
|
141
|
-
for (const key in partial) {
|
|
142
|
-
const i = this.fieldIndexMap[key];
|
|
143
|
-
this.arrays[i][entityId] = partial[key];
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* Clear component data for an entity (set to default values)
|
|
148
|
-
*/
|
|
149
|
-
clear(entityId) {
|
|
150
|
-
for (let i = 0; i < this.fields.length; i++) {
|
|
151
|
-
this.arrays[i][entityId] = this.fields[i].toNil();
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Get direct access to the underlying arrays.
|
|
156
|
-
* Advanced use only - for SIMD operations, batch processing, etc.
|
|
157
|
-
*/
|
|
158
|
-
getRawArrays() {
|
|
159
|
-
return this.arrays;
|
|
160
|
-
}
|
|
161
|
-
/**
|
|
162
|
-
* Get a specific field's array directly.
|
|
163
|
-
* Useful for vectorized operations on a single field across all entities.
|
|
164
|
-
*/
|
|
165
|
-
getFieldArray(fieldName) {
|
|
166
|
-
const index = this.fieldIndexMap[fieldName];
|
|
167
|
-
return this.arrays[index];
|
|
168
|
-
}
|
|
169
|
-
/**
|
|
170
|
-
* Get the stride in bytes (for compatibility with DataView version).
|
|
171
|
-
*/
|
|
172
|
-
getStride() {
|
|
173
|
-
return this.stride;
|
|
174
|
-
}
|
|
175
|
-
}
|
package/dist/ecs/component.js
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { PooledCodec } from "../core/pooled-codec";
|
|
2
|
-
/**
|
|
3
|
-
* Calculate the byte size of a schema
|
|
4
|
-
*/
|
|
5
|
-
function calculateSchemaSize(schema) {
|
|
6
|
-
let size = 0;
|
|
7
|
-
for (const key of Object.keys(schema)) {
|
|
8
|
-
size += schema[key].size;
|
|
9
|
-
}
|
|
10
|
-
return size;
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Define a component type with its binary schema.
|
|
14
|
-
*
|
|
15
|
-
* @example
|
|
16
|
-
* ```typescript
|
|
17
|
-
* const Transform = defineComponent('Transform', {
|
|
18
|
-
* x: BinaryCodec.f32,
|
|
19
|
-
* y: BinaryCodec.f32,
|
|
20
|
-
* rotation: BinaryCodec.f32,
|
|
21
|
-
* });
|
|
22
|
-
*
|
|
23
|
-
* const Health = defineComponent('Health', {
|
|
24
|
-
* current: BinaryCodec.u16,
|
|
25
|
-
* max: BinaryCodec.u16,
|
|
26
|
-
* });
|
|
27
|
-
* ```
|
|
28
|
-
*/
|
|
29
|
-
export function defineComponent(name, schema) {
|
|
30
|
-
const size = calculateSchemaSize(schema);
|
|
31
|
-
const fieldNames = Object.keys(schema);
|
|
32
|
-
const fieldCount = fieldNames.length;
|
|
33
|
-
// Create PooledCodec for array serialization
|
|
34
|
-
const arrayCodec = PooledCodec.array(schema);
|
|
35
|
-
return {
|
|
36
|
-
name,
|
|
37
|
-
schema,
|
|
38
|
-
size,
|
|
39
|
-
fieldCount,
|
|
40
|
-
fieldNames,
|
|
41
|
-
arrayCodec,
|
|
42
|
-
};
|
|
43
|
-
}
|