murow 0.0.70 → 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 → types/core}/events/event-system.d.ts +14 -33
- package/dist/types/core/free-list/free-list.d.ts +31 -0
- package/dist/types/core/free-list/index.d.ts +1 -0
- package/dist/{core → types/core}/index.d.ts +5 -0
- package/dist/{core → types/core}/input/index.d.ts +1 -0
- package/dist/{core → types/core}/input/manager.d.ts +2 -0
- package/dist/{core → types/core}/navmesh/navmesh.d.ts +1 -21
- package/dist/types/core/ray/index.d.ts +2 -0
- package/dist/types/core/ray/ray-2d.d.ts +37 -0
- package/dist/types/core/ray/ray-3d.d.ts +42 -0
- package/dist/types/core/simple-rng/index.d.ts +1 -0
- package/dist/types/core/simple-rng/simple-rng.d.ts +36 -0
- package/dist/types/core/sparse-batcher/index.d.ts +1 -0
- package/dist/types/core/sparse-batcher/sparse-batcher.d.ts +55 -0
- package/dist/{ecs → types/ecs}/world.d.ts +11 -0
- package/dist/{game → types/game}/loop/loop.d.ts +33 -29
- package/dist/{index.d.ts → types/index.d.ts} +1 -0
- package/dist/{net → types/net}/index.d.ts +2 -2
- package/dist/types/renderer/base-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/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/driver/driver.js +0 -47
- package/dist/core/driver/drivers/immediate.js +0 -61
- package/dist/core/driver/drivers/index.js +0 -3
- package/dist/core/driver/drivers/raf.js +0 -62
- package/dist/core/driver/drivers/timeout.js +0 -71
- package/dist/core/driver/index.js +0 -2
- package/dist/core/events/event-system.js +0 -88
- package/dist/core/events/index.js +0 -1
- package/dist/core/fixed-ticker/fixed-ticker.js +0 -105
- package/dist/core/fixed-ticker/index.js +0 -1
- package/dist/core/generate-id/generate-id.js +0 -25
- package/dist/core/generate-id/index.js +0 -1
- package/dist/core/index.js +0 -10
- package/dist/core/input/index.js +0 -2
- package/dist/core/input/manager.js +0 -211
- package/dist/core/input/sources/browser.js +0 -29
- package/dist/core/input/sources/index.js +0 -1
- package/dist/core/lerp/index.js +0 -1
- package/dist/core/lerp/lerp.js +0 -42
- package/dist/core/navmesh/index.js +0 -1
- package/dist/core/navmesh/navmesh-worker-pool.js +0 -180
- package/dist/core/navmesh/navmesh.js +0 -799
- package/dist/core/navmesh/navmesh.worker.js +0 -79
- package/dist/core/pooled-codec/index.js +0 -1
- package/dist/core/pooled-codec/pooled-codec.js +0 -410
- package/dist/core/prediction/index.js +0 -1
- package/dist/core/prediction/prediction.js +0 -99
- package/dist/core.esm.js +0 -1
- package/dist/core.js +0 -1
- package/dist/ecs/component-store.js +0 -175
- package/dist/ecs/component.js +0 -43
- package/dist/ecs/entity-handle.js +0 -515
- package/dist/ecs/example.js +0 -125
- package/dist/ecs/index.js +0 -4
- package/dist/ecs/system-builder.js +0 -249
- package/dist/ecs/world-systems.js +0 -79
- package/dist/ecs/world.js +0 -767
- package/dist/game/index.js +0 -1
- package/dist/game/loop/index.js +0 -1
- package/dist/game/loop/loop.js +0 -108
- package/dist/index.js +0 -26
- package/dist/net/adapters/browser-websocket.js +0 -74
- package/dist/net/adapters/bun-websocket.js +0 -245
- package/dist/net/buffer-pool.js +0 -89
- package/dist/net/client.js +0 -586
- package/dist/net/index.js +0 -58
- package/dist/net/server.js +0 -974
- package/dist/net/types.js +0 -31
- package/dist/net/validators.js +0 -88
- package/dist/protocol/index.js +0 -92
- package/dist/protocol/intent/define-intent.js +0 -125
- package/dist/protocol/intent/index.js +0 -91
- package/dist/protocol/intent/intent-registry.js +0 -91
- package/dist/protocol/rpc/define-rpc.js +0 -84
- package/dist/protocol/rpc/index.js +0 -3
- package/dist/protocol/rpc/rpc-registry.js +0 -159
- package/dist/protocol/rpc/rpc.js +0 -12
- package/dist/protocol/snapshot/index.js +0 -43
- package/dist/protocol/snapshot/snapshot-codec.js +0 -67
- package/dist/protocol/snapshot/snapshot-registry.js +0 -168
- package/dist/protocol/snapshot/snapshot.js +0 -30
- package/src/core/binary-codec/README.md +0 -60
- package/src/core/binary-codec/binary-codec.test.ts +0 -300
- package/src/core/binary-codec/binary-codec.ts +0 -448
- package/src/core/binary-codec/index.ts +0 -1
- package/src/core/driver/README.md +0 -97
- package/src/core/driver/driver.test.ts +0 -414
- package/src/core/driver/driver.ts +0 -71
- package/src/core/driver/drivers/immediate.ts +0 -66
- package/src/core/driver/drivers/index.ts +0 -3
- package/src/core/driver/drivers/raf.ts +0 -67
- package/src/core/driver/drivers/timeout.ts +0 -77
- package/src/core/driver/index.ts +0 -2
- package/src/core/events/README.md +0 -47
- package/src/core/events/event-system.test.ts +0 -243
- package/src/core/events/event-system.ts +0 -140
- package/src/core/events/index.ts +0 -1
- package/src/core/fixed-ticker/README.md +0 -77
- package/src/core/fixed-ticker/fixed-ticker.test.ts +0 -151
- package/src/core/fixed-ticker/fixed-ticker.ts +0 -174
- package/src/core/fixed-ticker/index.ts +0 -1
- package/src/core/generate-id/README.md +0 -18
- package/src/core/generate-id/generate-id.test.ts +0 -79
- package/src/core/generate-id/generate-id.ts +0 -37
- package/src/core/generate-id/index.ts +0 -1
- package/src/core/index.ts +0 -10
- package/src/core/input/README.md +0 -24
- package/src/core/input/index.ts +0 -2
- package/src/core/input/manager.ts +0 -259
- package/src/core/input/sources/browser.ts +0 -39
- package/src/core/input/sources/index.ts +0 -1
- package/src/core/input/types.ts +0 -40
- package/src/core/lerp/README.md +0 -79
- package/src/core/lerp/index.ts +0 -1
- package/src/core/lerp/lerp.test.ts +0 -90
- package/src/core/lerp/lerp.ts +0 -42
- package/src/core/navmesh/README.md +0 -164
- package/src/core/navmesh/index.ts +0 -1
- package/src/core/navmesh/navmesh-worker-pool.ts +0 -236
- package/src/core/navmesh/navmesh-workers.test.ts +0 -356
- package/src/core/navmesh/navmesh.test.ts +0 -344
- package/src/core/navmesh/navmesh.ts +0 -1047
- package/src/core/navmesh/navmesh.worker.ts +0 -147
- package/src/core/pooled-codec/README.md +0 -70
- package/src/core/pooled-codec/index.ts +0 -1
- package/src/core/pooled-codec/pooled-codec.test.ts +0 -862
- package/src/core/pooled-codec/pooled-codec.ts +0 -504
- package/src/core/prediction/README.md +0 -64
- package/src/core/prediction/index.ts +0 -1
- package/src/core/prediction/prediction.test.ts +0 -423
- package/src/core/prediction/prediction.ts +0 -112
- package/src/ecs/README.md +0 -427
- package/src/ecs/benchmark.test.ts +0 -1645
- package/src/ecs/component-store.ts +0 -198
- package/src/ecs/component.ts +0 -90
- package/src/ecs/entity-handle.test.ts +0 -393
- package/src/ecs/entity-handle.ts +0 -563
- package/src/ecs/example.ts +0 -152
- package/src/ecs/index.ts +0 -4
- package/src/ecs/system-builder.ts +0 -404
- package/src/ecs/world-systems.ts +0 -83
- package/src/ecs/world.test.ts +0 -310
- package/src/ecs/world.ts +0 -904
- package/src/game/index.ts +0 -1
- package/src/game/loop/README.md +0 -32
- package/src/game/loop/index.ts +0 -1
- package/src/game/loop/loop.ts +0 -236
- package/src/index.ts +0 -32
- package/src/net/README.md +0 -474
- package/src/net/adapters/browser-websocket.ts +0 -86
- package/src/net/adapters/bun-websocket.ts +0 -292
- package/src/net/buffer-pool.ts +0 -106
- package/src/net/client.test.ts +0 -807
- package/src/net/client.ts +0 -695
- package/src/net/index.ts +0 -60
- package/src/net/server.test.ts +0 -799
- package/src/net/server.ts +0 -1152
- package/src/net/types.ts +0 -228
- package/src/net/validators.ts +0 -104
- package/src/protocol/README.md +0 -469
- package/src/protocol/index.ts +0 -93
- package/src/protocol/intent/define-intent.test.ts +0 -397
- package/src/protocol/intent/define-intent.ts +0 -201
- package/src/protocol/intent/index.ts +0 -94
- package/src/protocol/intent/intent-registry.test.ts +0 -198
- package/src/protocol/intent/intent-registry.ts +0 -112
- package/src/protocol/intent/intent.ts +0 -12
- package/src/protocol/rpc/define-rpc.test.ts +0 -141
- package/src/protocol/rpc/define-rpc.ts +0 -113
- package/src/protocol/rpc/index.ts +0 -3
- package/src/protocol/rpc/rpc-registry.test.ts +0 -168
- package/src/protocol/rpc/rpc-registry.ts +0 -176
- package/src/protocol/rpc/rpc.ts +0 -37
- package/src/protocol/snapshot/index.ts +0 -45
- package/src/protocol/snapshot/snapshot-codec.test.ts +0 -138
- package/src/protocol/snapshot/snapshot-codec.ts +0 -87
- package/src/protocol/snapshot/snapshot-registry.test.ts +0 -310
- package/src/protocol/snapshot/snapshot-registry.ts +0 -201
- package/src/protocol/snapshot/snapshot.test.ts +0 -76
- package/src/protocol/snapshot/snapshot.ts +0 -41
- /package/dist/{core → types/core}/binary-codec/index.d.ts +0 -0
- /package/dist/{core → types/core}/driver/driver.d.ts +0 -0
- /package/dist/{core → types/core}/driver/drivers/immediate.d.ts +0 -0
- /package/dist/{core → types/core}/driver/drivers/index.d.ts +0 -0
- /package/dist/{core → types/core}/driver/drivers/raf.d.ts +0 -0
- /package/dist/{core → types/core}/driver/drivers/timeout.d.ts +0 -0
- /package/dist/{core → types/core}/driver/index.d.ts +0 -0
- /package/dist/{core → types/core}/events/index.d.ts +0 -0
- /package/dist/{core → types/core}/fixed-ticker/fixed-ticker.d.ts +0 -0
- /package/dist/{core → types/core}/fixed-ticker/index.d.ts +0 -0
- /package/dist/{core → types/core}/generate-id/generate-id.d.ts +0 -0
- /package/dist/{core → types/core}/generate-id/index.d.ts +0 -0
- /package/dist/{core → types/core}/input/sources/browser.d.ts +0 -0
- /package/dist/{core → types/core}/input/sources/index.d.ts +0 -0
- /package/dist/{core → types/core}/input/types.d.ts +0 -0
- /package/dist/{core → types/core}/lerp/index.d.ts +0 -0
- /package/dist/{core → types/core}/lerp/lerp.d.ts +0 -0
- /package/dist/{core → types/core}/navmesh/index.d.ts +0 -0
- /package/dist/{core → types/core}/navmesh/navmesh-worker-pool.d.ts +0 -0
- /package/dist/{core → types/core}/navmesh/navmesh.worker.d.ts +0 -0
- /package/dist/{core → types/core}/pooled-codec/index.d.ts +0 -0
- /package/dist/{core → types/core}/pooled-codec/pooled-codec.d.ts +0 -0
- /package/dist/{core → types/core}/prediction/index.d.ts +0 -0
- /package/dist/{core → types/core}/prediction/prediction.d.ts +0 -0
- /package/dist/{ecs → types/ecs}/component-store.d.ts +0 -0
- /package/dist/{ecs → types/ecs}/component.d.ts +0 -0
- /package/dist/{ecs → types/ecs}/entity-handle.d.ts +0 -0
- /package/dist/{ecs → types/ecs}/example.d.ts +0 -0
- /package/dist/{ecs → types/ecs}/index.d.ts +0 -0
- /package/dist/{ecs → types/ecs}/system-builder.d.ts +0 -0
- /package/dist/{ecs → types/ecs}/world-systems.d.ts +0 -0
- /package/dist/{game → types/game}/index.d.ts +0 -0
- /package/dist/{game → types/game}/loop/index.d.ts +0 -0
- /package/dist/{net → types/net}/adapters/browser-websocket.d.ts +0 -0
- /package/dist/{net → types/net}/adapters/bun-websocket.d.ts +0 -0
- /package/dist/{net → types/net}/buffer-pool.d.ts +0 -0
- /package/dist/{net → types/net}/client.d.ts +0 -0
- /package/dist/{net → types/net}/server.d.ts +0 -0
- /package/dist/{net → types/net}/types.d.ts +0 -0
- /package/dist/{net → types/net}/validators.d.ts +0 -0
- /package/dist/{protocol → types/protocol}/index.d.ts +0 -0
- /package/dist/{protocol → types/protocol}/intent/define-intent.d.ts +0 -0
- /package/dist/{protocol → types/protocol}/intent/index.d.ts +0 -0
- /package/dist/{protocol → types/protocol}/intent/intent-registry.d.ts +0 -0
- /package/dist/{protocol → types/protocol}/intent/intent.d.ts +0 -0
- /package/dist/{protocol → types/protocol}/rpc/define-rpc.d.ts +0 -0
- /package/dist/{protocol → types/protocol}/rpc/index.d.ts +0 -0
- /package/dist/{protocol → types/protocol}/rpc/rpc-registry.d.ts +0 -0
- /package/dist/{protocol → types/protocol}/rpc/rpc.d.ts +0 -0
- /package/dist/{protocol → types/protocol}/snapshot/index.d.ts +0 -0
- /package/dist/{protocol → types/protocol}/snapshot/snapshot-codec.d.ts +0 -0
- /package/dist/{protocol → types/protocol}/snapshot/snapshot-registry.d.ts +0 -0
- /package/dist/{protocol → types/protocol}/snapshot/snapshot.d.ts +0 -0
- /package/dist/{core/input/types.js → webgpu/types/2d/animation.test.d.ts} +0 -0
- /package/dist/{protocol/intent/intent.js → webgpu/types/2d/sprite-accessor.test.d.ts} +0 -0
|
@@ -1,448 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A binary field descriptor.
|
|
3
|
-
* Defines how a single value is serialized/deserialized
|
|
4
|
-
* at a fixed byte size.
|
|
5
|
-
*/
|
|
6
|
-
export type Field<T> = {
|
|
7
|
-
/** Size of the field in bytes */
|
|
8
|
-
size: number;
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Writes a value into a DataView at the given offset.
|
|
12
|
-
* @param dv DataView to write into
|
|
13
|
-
* @param o Byte offset
|
|
14
|
-
* @param v Value to write
|
|
15
|
-
*/
|
|
16
|
-
write(dv: DataView, o: number, v: T): void;
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Reads a value from a DataView at the given offset.
|
|
20
|
-
* @param dv DataView to read from
|
|
21
|
-
* @param o Byte offset
|
|
22
|
-
*/
|
|
23
|
-
read(dv: DataView, o: number): T;
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Returns the nil value
|
|
27
|
-
*/
|
|
28
|
-
toNil(): T;
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* A schema mapping object keys to binary fields.
|
|
33
|
-
* The order of iteration defines the binary layout.
|
|
34
|
-
*
|
|
35
|
-
* IMPORTANT:
|
|
36
|
-
* Property order is respected as insertion order.
|
|
37
|
-
* Do not rely on computed or dynamic keys.
|
|
38
|
-
*/
|
|
39
|
-
export type Schema<T> = {
|
|
40
|
-
[K in keyof T]: Field<T[K]>;
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Internal symbol used to cache computed schema byte size.
|
|
45
|
-
*/
|
|
46
|
-
const SCHEMA_SIZE = Symbol("schemaSize");
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Computes and caches the total byte size of a schema.
|
|
50
|
-
* @param schema Binary schema definition
|
|
51
|
-
*/
|
|
52
|
-
function getSchemaSize<T extends object>(schema: Schema<T>): number {
|
|
53
|
-
const cached = (schema as any)[SCHEMA_SIZE];
|
|
54
|
-
if (cached !== undefined) return cached;
|
|
55
|
-
|
|
56
|
-
let size = 0;
|
|
57
|
-
for (const k of Object.keys(schema) as (keyof T)[]) {
|
|
58
|
-
size += schema[k].size;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
(schema as any)[SCHEMA_SIZE] = size;
|
|
62
|
-
return size;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Base codec implementation.
|
|
67
|
-
* Handles schema-driven encoding/decoding.
|
|
68
|
-
*/
|
|
69
|
-
export class BaseBinaryCodec {
|
|
70
|
-
/**
|
|
71
|
-
* Encodes an object into a binary buffer using the given schema.
|
|
72
|
-
*
|
|
73
|
-
* Allocates a right-sized buffer per call.
|
|
74
|
-
* Safe for concurrent and re-entrant usage.
|
|
75
|
-
*
|
|
76
|
-
* @param schema Binary schema definition
|
|
77
|
-
* @param data Object to encode
|
|
78
|
-
* @returns A Uint8Array containing the encoded bytes
|
|
79
|
-
*/
|
|
80
|
-
protected static encodeInto<T extends object>(
|
|
81
|
-
schema: Schema<T>,
|
|
82
|
-
data: T
|
|
83
|
-
): Uint8Array {
|
|
84
|
-
const size = getSchemaSize(schema);
|
|
85
|
-
const buffer = new ArrayBuffer(size);
|
|
86
|
-
const view = new DataView(buffer);
|
|
87
|
-
|
|
88
|
-
let o = 0;
|
|
89
|
-
for (const k of Object.keys(schema) as (keyof T)[]) {
|
|
90
|
-
const f = schema[k];
|
|
91
|
-
f.write(view, o, data[k]);
|
|
92
|
-
o += f.size;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
return new Uint8Array(buffer);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Decodes a binary buffer into a target object using the given schema.
|
|
100
|
-
*
|
|
101
|
-
* Validates buffer size before reading.
|
|
102
|
-
* Does not mutate shared state.
|
|
103
|
-
*
|
|
104
|
-
* @param schema Binary schema definition
|
|
105
|
-
* @param buf Buffer containing encoded data
|
|
106
|
-
* @param target Target object to mutate
|
|
107
|
-
* @returns The mutated target object
|
|
108
|
-
*/
|
|
109
|
-
static decodeInto<T extends object>(
|
|
110
|
-
schema: Schema<T>,
|
|
111
|
-
buf: Uint8Array,
|
|
112
|
-
target: T
|
|
113
|
-
): T {
|
|
114
|
-
const expectedSize = getSchemaSize(schema);
|
|
115
|
-
|
|
116
|
-
if (buf.byteLength < expectedSize) {
|
|
117
|
-
throw new RangeError(
|
|
118
|
-
`Buffer too small: expected ${expectedSize} bytes, got ${buf.byteLength}`
|
|
119
|
-
);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
const view = new DataView(
|
|
123
|
-
buf.buffer,
|
|
124
|
-
buf.byteOffset,
|
|
125
|
-
buf.byteLength
|
|
126
|
-
);
|
|
127
|
-
|
|
128
|
-
let o = 0;
|
|
129
|
-
for (const k of Object.keys(schema) as (keyof T)[]) {
|
|
130
|
-
const f = schema[k];
|
|
131
|
-
target[k] = f.read(view, o);
|
|
132
|
-
o += f.size;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
return target;
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
/**
|
|
140
|
-
* Built-in binary primitive field definitions for multiplayer games.
|
|
141
|
-
*/
|
|
142
|
-
export class BinaryPrimitives {
|
|
143
|
-
/** Unsigned 8-bit integer */
|
|
144
|
-
static readonly u8: Field<number> = {
|
|
145
|
-
size: 1,
|
|
146
|
-
write: (dv, o, v) => dv.setUint8(o, v),
|
|
147
|
-
read: (dv, o) => dv.getUint8(o),
|
|
148
|
-
toNil: () => 0,
|
|
149
|
-
};
|
|
150
|
-
|
|
151
|
-
/** Unsigned 16-bit integer (big-endian) */
|
|
152
|
-
static readonly u16: Field<number> = {
|
|
153
|
-
size: 2,
|
|
154
|
-
write: (dv, o, v) => dv.setUint16(o, v, false),
|
|
155
|
-
read: (dv, o) => dv.getUint16(o, false),
|
|
156
|
-
toNil: () => 0,
|
|
157
|
-
};
|
|
158
|
-
|
|
159
|
-
/** Unsigned 32-bit integer (big-endian) */
|
|
160
|
-
static readonly u32: Field<number> = {
|
|
161
|
-
size: 4,
|
|
162
|
-
write: (dv, o, v) => dv.setUint32(o, v, false),
|
|
163
|
-
read: (dv, o) => dv.getUint32(o, false),
|
|
164
|
-
toNil: () => 0,
|
|
165
|
-
};
|
|
166
|
-
|
|
167
|
-
/** Signed 8-bit integer */
|
|
168
|
-
static readonly i8: Field<number> = {
|
|
169
|
-
size: 1,
|
|
170
|
-
write: (dv, o, v) => dv.setInt8(o, v),
|
|
171
|
-
read: (dv, o) => dv.getInt8(o),
|
|
172
|
-
toNil: () => 0,
|
|
173
|
-
};
|
|
174
|
-
|
|
175
|
-
/** Signed 16-bit integer (big-endian) */
|
|
176
|
-
static readonly i16: Field<number> = {
|
|
177
|
-
size: 2,
|
|
178
|
-
write: (dv, o, v) => dv.setInt16(o, v, false),
|
|
179
|
-
read: (dv, o) => dv.getInt16(o, false),
|
|
180
|
-
toNil: () => 0,
|
|
181
|
-
};
|
|
182
|
-
|
|
183
|
-
/** Signed 32-bit integer (big-endian) */
|
|
184
|
-
static readonly i32: Field<number> = {
|
|
185
|
-
size: 4,
|
|
186
|
-
write: (dv, o, v) => dv.setInt32(o, v, false),
|
|
187
|
-
read: (dv, o) => dv.getInt32(o, false),
|
|
188
|
-
toNil: () => 0,
|
|
189
|
-
};
|
|
190
|
-
|
|
191
|
-
/** 32-bit floating point number (IEEE 754, big-endian) */
|
|
192
|
-
static readonly f32: Field<number> = {
|
|
193
|
-
size: 4,
|
|
194
|
-
write: (dv, o, v) => dv.setFloat32(o, v, false),
|
|
195
|
-
read: (dv, o) => dv.getFloat32(o, false),
|
|
196
|
-
toNil: () => 0,
|
|
197
|
-
};
|
|
198
|
-
|
|
199
|
-
/** 64-bit floating point number (double, big-endian) */
|
|
200
|
-
static readonly f64: Field<number> = {
|
|
201
|
-
size: 8,
|
|
202
|
-
write: (dv, o, v) => dv.setFloat64(o, v, false),
|
|
203
|
-
read: (dv, o) => dv.getFloat64(o, false),
|
|
204
|
-
toNil: () => 0,
|
|
205
|
-
};
|
|
206
|
-
|
|
207
|
-
/** Boolean stored as 1 byte (0 = false, 1 = true) */
|
|
208
|
-
static readonly bool: Field<boolean> = {
|
|
209
|
-
size: 1,
|
|
210
|
-
write: (dv, o, v) => dv.setUint8(o, v ? 1 : 0),
|
|
211
|
-
read: (dv, o) => dv.getUint8(o) !== 0,
|
|
212
|
-
toNil: () => false,
|
|
213
|
-
};
|
|
214
|
-
|
|
215
|
-
/**
|
|
216
|
-
* String field with UTF-8 encoding and 2-byte length prefix.
|
|
217
|
-
* @param maxLength Maximum number of bytes allowed
|
|
218
|
-
*/
|
|
219
|
-
static string(maxLength: number): Field<string> {
|
|
220
|
-
return {
|
|
221
|
-
size: maxLength + 2,
|
|
222
|
-
write(dv, o, v) {
|
|
223
|
-
const encoder = new TextEncoder();
|
|
224
|
-
const bytes = encoder.encode(v);
|
|
225
|
-
if (bytes.length > maxLength)
|
|
226
|
-
throw new RangeError(`String too long, max ${maxLength} bytes`);
|
|
227
|
-
dv.setUint16(o, bytes.length, false);
|
|
228
|
-
for (let i = 0; i < bytes.length; i++) dv.setUint8(o + 2 + i, bytes[i]);
|
|
229
|
-
for (let i = bytes.length; i < maxLength; i++) dv.setUint8(o + 2 + i, 0);
|
|
230
|
-
},
|
|
231
|
-
read(dv, o) {
|
|
232
|
-
const length = dv.getUint16(o, false);
|
|
233
|
-
const bytes = new Uint8Array(length);
|
|
234
|
-
for (let i = 0; i < length; i++) bytes[i] = dv.getUint8(o + 2 + i);
|
|
235
|
-
return new TextDecoder().decode(bytes);
|
|
236
|
-
},
|
|
237
|
-
toNil: () => "",
|
|
238
|
-
};
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
/** 2D vector of f32 (x, y) */
|
|
242
|
-
static readonly vec2: Field<{ x: number; y: number }> = {
|
|
243
|
-
size: 8,
|
|
244
|
-
write(dv, o, v) {
|
|
245
|
-
dv.setFloat32(o, v.x, false);
|
|
246
|
-
dv.setFloat32(o + 4, v.y, false);
|
|
247
|
-
},
|
|
248
|
-
read(dv, o) {
|
|
249
|
-
return { x: dv.getFloat32(o, false), y: dv.getFloat32(o + 4, false) };
|
|
250
|
-
},
|
|
251
|
-
toNil: () => ({ x: 0, y: 0 }),
|
|
252
|
-
};
|
|
253
|
-
|
|
254
|
-
/** 3D vector of f32 (x, y, z) */
|
|
255
|
-
static readonly vec3: Field<{ x: number; y: number; z: number }> = {
|
|
256
|
-
size: 12,
|
|
257
|
-
write(dv, o, v) {
|
|
258
|
-
dv.setFloat32(o, v.x, false);
|
|
259
|
-
dv.setFloat32(o + 4, v.y, false);
|
|
260
|
-
dv.setFloat32(o + 8, v.z, false);
|
|
261
|
-
},
|
|
262
|
-
read(dv, o) {
|
|
263
|
-
return {
|
|
264
|
-
x: dv.getFloat32(o, false),
|
|
265
|
-
y: dv.getFloat32(o + 4, false),
|
|
266
|
-
z: dv.getFloat32(o + 8, false),
|
|
267
|
-
};
|
|
268
|
-
},
|
|
269
|
-
toNil: () => ({ x: 0, y: 0, z: 0 }),
|
|
270
|
-
};
|
|
271
|
-
|
|
272
|
-
/** RGBA color packed as 4 u8 bytes */
|
|
273
|
-
static readonly color: Field<{ r: number; g: number; b: number; a: number }> = {
|
|
274
|
-
size: 4,
|
|
275
|
-
write(dv, o, v) {
|
|
276
|
-
dv.setUint8(o, v.r);
|
|
277
|
-
dv.setUint8(o + 1, v.g);
|
|
278
|
-
dv.setUint8(o + 2, v.b);
|
|
279
|
-
dv.setUint8(o + 3, v.a);
|
|
280
|
-
},
|
|
281
|
-
read(dv, o) {
|
|
282
|
-
return {
|
|
283
|
-
r: dv.getUint8(o),
|
|
284
|
-
g: dv.getUint8(o + 1),
|
|
285
|
-
b: dv.getUint8(o + 2),
|
|
286
|
-
a: dv.getUint8(o + 3),
|
|
287
|
-
};
|
|
288
|
-
},
|
|
289
|
-
toNil: () => ({ r: 0, g: 0, b: 0, a: 0 }),
|
|
290
|
-
};
|
|
291
|
-
|
|
292
|
-
/** 32-bit floating point number (IEEE 754, little-endian) */
|
|
293
|
-
static readonly f32_le: Field<number> = {
|
|
294
|
-
size: 4,
|
|
295
|
-
write: (dv, o, v) => dv.setFloat32(o, v, true),
|
|
296
|
-
read: (dv, o) => dv.getFloat32(o, true),
|
|
297
|
-
toNil: () => 0,
|
|
298
|
-
};
|
|
299
|
-
|
|
300
|
-
/** 64-bit floating point number (double, little-endian) */
|
|
301
|
-
static readonly f64_le: Field<number> = {
|
|
302
|
-
size: 8,
|
|
303
|
-
write: (dv, o, v) => dv.setFloat64(o, v, true),
|
|
304
|
-
read: (dv, o) => dv.getFloat64(o, true),
|
|
305
|
-
toNil: () => 0,
|
|
306
|
-
};
|
|
307
|
-
|
|
308
|
-
/** Unsigned 16-bit integer (little-endian) */
|
|
309
|
-
static readonly u16_le: Field<number> = {
|
|
310
|
-
size: 2,
|
|
311
|
-
write: (dv, o, v) => dv.setUint16(o, v, true),
|
|
312
|
-
read: (dv, o) => dv.getUint16(o, true),
|
|
313
|
-
toNil: () => 0,
|
|
314
|
-
};
|
|
315
|
-
|
|
316
|
-
/** Unsigned 32-bit integer (little-endian) */
|
|
317
|
-
static readonly u32_le: Field<number> = {
|
|
318
|
-
size: 4,
|
|
319
|
-
write: (dv, o, v) => dv.setUint32(o, v, true),
|
|
320
|
-
read: (dv, o) => dv.getUint32(o, true),
|
|
321
|
-
toNil: () => 0,
|
|
322
|
-
};
|
|
323
|
-
|
|
324
|
-
/** Signed 16-bit integer (little-endian) */
|
|
325
|
-
static readonly i16_le: Field<number> = {
|
|
326
|
-
size: 2,
|
|
327
|
-
write: (dv, o, v) => dv.setInt16(o, v, true),
|
|
328
|
-
read: (dv, o) => dv.getInt16(o, true),
|
|
329
|
-
toNil: () => 0,
|
|
330
|
-
};
|
|
331
|
-
|
|
332
|
-
/** Signed 32-bit integer (little-endian) */
|
|
333
|
-
static readonly i32_le: Field<number> = {
|
|
334
|
-
size: 4,
|
|
335
|
-
write: (dv, o, v) => dv.setInt32(o, v, true),
|
|
336
|
-
read: (dv, o) => dv.getInt32(o, true),
|
|
337
|
-
toNil: () => 0,
|
|
338
|
-
};
|
|
339
|
-
|
|
340
|
-
/**
|
|
341
|
-
* 2D vector of f32 stored as a tuple [x, y] (little-endian).
|
|
342
|
-
* Useful for compact math data or shader-friendly layouts.
|
|
343
|
-
*/
|
|
344
|
-
static readonly vec2_le: Field<[number, number]> = {
|
|
345
|
-
size: 8,
|
|
346
|
-
write: (dv, o, v) => {
|
|
347
|
-
dv.setFloat32(o, v[0], true);
|
|
348
|
-
dv.setFloat32(o + 4, v[1], true);
|
|
349
|
-
},
|
|
350
|
-
read: (dv, o) => [
|
|
351
|
-
dv.getFloat32(o, true),
|
|
352
|
-
dv.getFloat32(o + 4, true),
|
|
353
|
-
],
|
|
354
|
-
toNil: () => [0, 0],
|
|
355
|
-
};
|
|
356
|
-
|
|
357
|
-
/**
|
|
358
|
-
* 3D vector of f32 stored as a tuple [x, y, z] (little-endian).
|
|
359
|
-
* Commonly used for positions, velocities, or directions.
|
|
360
|
-
*/
|
|
361
|
-
static readonly vec3_le: Field<[number, number, number]> = {
|
|
362
|
-
size: 12,
|
|
363
|
-
write: (dv, o, v) => {
|
|
364
|
-
dv.setFloat32(o, v[0], true);
|
|
365
|
-
dv.setFloat32(o + 4, v[1], true);
|
|
366
|
-
dv.setFloat32(o + 8, v[2], true);
|
|
367
|
-
},
|
|
368
|
-
read: (dv, o) => [
|
|
369
|
-
dv.getFloat32(o, true),
|
|
370
|
-
dv.getFloat32(o + 4, true),
|
|
371
|
-
dv.getFloat32(o + 8, true),
|
|
372
|
-
],
|
|
373
|
-
toNil: () => [0, 0, 0],
|
|
374
|
-
};
|
|
375
|
-
|
|
376
|
-
/**
|
|
377
|
-
* 4D vector of f32 stored as a tuple [x, y, z, w] (little-endian).
|
|
378
|
-
* Useful for quaternions, colors in shaders, or homogeneous coordinates.
|
|
379
|
-
*/
|
|
380
|
-
static readonly vec4_le: Field<[number, number, number, number]> = {
|
|
381
|
-
size: 16,
|
|
382
|
-
write: (dv, o, v) => {
|
|
383
|
-
dv.setFloat32(o, v[0], true);
|
|
384
|
-
dv.setFloat32(o + 4, v[1], true);
|
|
385
|
-
dv.setFloat32(o + 8, v[2], true);
|
|
386
|
-
dv.setFloat32(o + 12, v[3], true);
|
|
387
|
-
},
|
|
388
|
-
read: (dv, o) => [
|
|
389
|
-
dv.getFloat32(o, true),
|
|
390
|
-
dv.getFloat32(o + 4, true),
|
|
391
|
-
dv.getFloat32(o + 8, true),
|
|
392
|
-
dv.getFloat32(o + 12, true),
|
|
393
|
-
],
|
|
394
|
-
toNil: () => [0, 0, 0, 0],
|
|
395
|
-
};
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
/**
|
|
399
|
-
* Public codec API.
|
|
400
|
-
* Re-exports primitives and exposes encode/decode helpers.
|
|
401
|
-
*/
|
|
402
|
-
export class BinaryCodec extends BaseBinaryCodec {
|
|
403
|
-
/** Unsigned 8-bit integer field */
|
|
404
|
-
static readonly u8 = BinaryPrimitives.u8;
|
|
405
|
-
/** Unsigned 16-bit integer field */
|
|
406
|
-
static readonly u16 = BinaryPrimitives.u16;
|
|
407
|
-
/** Unsigned 32-bit integer field */
|
|
408
|
-
static readonly u32 = BinaryPrimitives.u32;
|
|
409
|
-
/** Signed 8-bit integer field */
|
|
410
|
-
static readonly i8 = BinaryPrimitives.i8;
|
|
411
|
-
/** Signed 16-bit integer field */
|
|
412
|
-
static readonly i16 = BinaryPrimitives.i16;
|
|
413
|
-
/** Signed 32-bit integer field */
|
|
414
|
-
static readonly i32 = BinaryPrimitives.i32;
|
|
415
|
-
/** 32-bit floating point field */
|
|
416
|
-
static readonly f32 = BinaryPrimitives.f32;
|
|
417
|
-
/** Boolean field */
|
|
418
|
-
static readonly bool = BinaryPrimitives.bool;
|
|
419
|
-
/** String field with length prefix */
|
|
420
|
-
static string = BinaryPrimitives.string;
|
|
421
|
-
/** 2D vector field */
|
|
422
|
-
static readonly vec2 = BinaryPrimitives.vec2;
|
|
423
|
-
/** 3D vector field */
|
|
424
|
-
static readonly vec3 = BinaryPrimitives.vec3;
|
|
425
|
-
/** RGBA color field */
|
|
426
|
-
static readonly color = BinaryPrimitives.color;
|
|
427
|
-
|
|
428
|
-
/**
|
|
429
|
-
* Encodes an object into a binary buffer.
|
|
430
|
-
*/
|
|
431
|
-
static encode<T extends object>(
|
|
432
|
-
schema: Schema<T>,
|
|
433
|
-
data: T
|
|
434
|
-
): Uint8Array {
|
|
435
|
-
return this.encodeInto(schema, data);
|
|
436
|
-
}
|
|
437
|
-
|
|
438
|
-
/**
|
|
439
|
-
* Decodes a binary buffer into an existing object.
|
|
440
|
-
*/
|
|
441
|
-
static decode<T extends object>(
|
|
442
|
-
schema: Schema<T>,
|
|
443
|
-
buf: Uint8Array,
|
|
444
|
-
target: T
|
|
445
|
-
): T {
|
|
446
|
-
return this.decodeInto(schema, buf, target);
|
|
447
|
-
}
|
|
448
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './binary-codec';
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
# Driver
|
|
2
|
-
|
|
3
|
-
Environment-aware game loop drivers for client (browser) and server (Node.js).
|
|
4
|
-
Provides variable delta time that should be consumed by `FixedTicker` for deterministic game logic.
|
|
5
|
-
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## Features
|
|
9
|
-
|
|
10
|
-
- **Environment-Specific**: Uses `requestAnimationFrame` (client) or `setImmediate` (server)
|
|
11
|
-
- **Automatic Delta Time**: Calculates delta in seconds between frames
|
|
12
|
-
- **Simple API**: Start and stop with a single method call
|
|
13
|
-
- **Designed for FixedTicker**: Provides variable dt that FixedTicker converts to fixed timesteps
|
|
14
|
-
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
## Usage
|
|
18
|
-
|
|
19
|
-
### Recommended: With FixedTicker
|
|
20
|
-
|
|
21
|
-
```typescript
|
|
22
|
-
import { createDriver } from '@/core/loop';
|
|
23
|
-
import { FixedTicker } from '@/core/fixed-ticker';
|
|
24
|
-
|
|
25
|
-
const ticker = new FixedTicker({
|
|
26
|
-
rate: 30,
|
|
27
|
-
onTick: (fixedDt, tick) => {
|
|
28
|
-
world.update(fixedDt);
|
|
29
|
-
applyInputs(tick);
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
// Client: RAF driver with interpolation
|
|
34
|
-
const clientDriver = createDriver('client', (dt) => {
|
|
35
|
-
ticker.tick(dt);
|
|
36
|
-
render(ticker.alpha); // Smooth 60 FPS rendering of 30 TPS simulation
|
|
37
|
-
});
|
|
38
|
-
clientDriver.start();
|
|
39
|
-
|
|
40
|
-
// Server: Immediate driver for high-frequency updates
|
|
41
|
-
const serverDriver = createDriver('server', (dt) => {
|
|
42
|
-
ticker.tick(dt);
|
|
43
|
-
broadcastState();
|
|
44
|
-
});
|
|
45
|
-
serverDriver.start();
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
### Direct Usage (Single-player only)
|
|
49
|
-
|
|
50
|
-
```typescript
|
|
51
|
-
import { createDriver } from '@/core/loop';
|
|
52
|
-
|
|
53
|
-
// ⚠️ Variable delta time - not suitable for multiplayer
|
|
54
|
-
const driver = createDriver('client', (dt) => {
|
|
55
|
-
player.update(dt);
|
|
56
|
-
renderer.render();
|
|
57
|
-
});
|
|
58
|
-
driver.start();
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
---
|
|
62
|
-
|
|
63
|
-
## Drivers
|
|
64
|
-
|
|
65
|
-
### `RafDriver` (Client)
|
|
66
|
-
- Uses `requestAnimationFrame`
|
|
67
|
-
- Syncs with display refresh rate (~60 FPS)
|
|
68
|
-
- Automatic throttling when tab not visible
|
|
69
|
-
|
|
70
|
-
### `ImmediateDriver` (Server)
|
|
71
|
-
- Uses `setImmediate` (Node.js only)
|
|
72
|
-
- Runs as fast as possible without blocking event loop
|
|
73
|
-
- Suitable for server simulations
|
|
74
|
-
|
|
75
|
-
---
|
|
76
|
-
|
|
77
|
-
## API
|
|
78
|
-
|
|
79
|
-
```typescript
|
|
80
|
-
createDriver(type: 'client' | 'server', update: (dt: number) => void): LoopDriver
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
```typescript
|
|
84
|
-
interface LoopDriver {
|
|
85
|
-
start(): void; // Start the loop
|
|
86
|
-
stop(): void; // Stop the loop
|
|
87
|
-
}
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
---
|
|
91
|
-
|
|
92
|
-
## Notes
|
|
93
|
-
|
|
94
|
-
- Delta time (`dt`) is always in **seconds**, not milliseconds
|
|
95
|
-
- **Always use with FixedTicker** for multiplayer/deterministic games
|
|
96
|
-
- Direct usage without FixedTicker only suitable for single-player scenarios
|
|
97
|
-
- `ImmediateDriver` requires Node.js (uses `setImmediate`)
|