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
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spritesheet — manages sprite UV coordinates and GPU texture.
|
|
3
|
+
* Supports grid-based spritesheets and texture-packer JSON.
|
|
4
|
+
*
|
|
5
|
+
* Texture creation uses the raw GPUDevice (accessed via root.device)
|
|
6
|
+
* since TypeGPU's texture API is unstable and we need copyExternalImageToTexture.
|
|
7
|
+
*/
|
|
8
|
+
import type { SpritesheetHandle, SpriteUV } from 'murow/renderer/types';
|
|
9
|
+
export interface GridSpritesheetConfig {
|
|
10
|
+
image: string;
|
|
11
|
+
frameWidth: number;
|
|
12
|
+
frameHeight: number;
|
|
13
|
+
}
|
|
14
|
+
export interface TexturePackerFrame {
|
|
15
|
+
frame: {
|
|
16
|
+
x: number;
|
|
17
|
+
y: number;
|
|
18
|
+
w: number;
|
|
19
|
+
h: number;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export interface TexturePackerData {
|
|
23
|
+
frames: Record<string, TexturePackerFrame>;
|
|
24
|
+
meta: {
|
|
25
|
+
size: {
|
|
26
|
+
w: number;
|
|
27
|
+
h: number;
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export interface SpritesheetConfig {
|
|
32
|
+
image: string;
|
|
33
|
+
frameWidth?: number;
|
|
34
|
+
frameHeight?: number;
|
|
35
|
+
data?: string;
|
|
36
|
+
}
|
|
37
|
+
export declare class Spritesheet implements SpritesheetHandle {
|
|
38
|
+
readonly id: number;
|
|
39
|
+
readonly frameCount: number;
|
|
40
|
+
readonly texture: GPUTexture;
|
|
41
|
+
readonly textureView: GPUTextureView;
|
|
42
|
+
readonly sampler: GPUSampler;
|
|
43
|
+
private uvs;
|
|
44
|
+
private _width;
|
|
45
|
+
private _height;
|
|
46
|
+
constructor(id: number, texture: GPUTexture, textureView: GPUTextureView, sampler: GPUSampler, uvs: SpriteUV[], width: number, height: number);
|
|
47
|
+
getUV(spriteIndex: number): SpriteUV;
|
|
48
|
+
get width(): number;
|
|
49
|
+
get height(): number;
|
|
50
|
+
}
|
|
51
|
+
export declare function computeGridUVs(imageWidth: number, imageHeight: number, frameWidth: number, frameHeight: number): SpriteUV[];
|
|
52
|
+
export declare function computeTexturePackerUVs(data: TexturePackerData): SpriteUV[];
|
|
53
|
+
export declare function loadImage(url: string): Promise<ImageBitmap>;
|
|
54
|
+
export declare function createTextureFromBitmap(device: GPUDevice, bitmap: ImageBitmap): {
|
|
55
|
+
texture: GPUTexture;
|
|
56
|
+
view: GPUTextureView;
|
|
57
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,30 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "murow",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.71",
|
|
4
4
|
"description": "A lightweight TypeScript game engine for server-authoritative multiplayer games",
|
|
5
|
-
"
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
"exports": {
|
|
9
|
-
".": {
|
|
10
|
-
"import": "./dist/core.esm.js",
|
|
11
|
-
"require": "./dist/core.js",
|
|
12
|
-
"types": "./dist/core.d.ts"
|
|
13
|
-
},
|
|
14
|
-
"./core": {
|
|
15
|
-
"import": "./dist/core.esm.js",
|
|
16
|
-
"require": "./dist/core.js",
|
|
17
|
-
"types": "./dist/core.d.ts"
|
|
18
|
-
}
|
|
19
|
-
},
|
|
20
|
-
"files": [
|
|
21
|
-
"dist",
|
|
22
|
-
"src"
|
|
23
|
-
],
|
|
5
|
+
"types": "dist/types/index.d.ts",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"sideEffects": false,
|
|
24
8
|
"scripts": {
|
|
25
9
|
"build": "npm run build:types && npm run build:js",
|
|
26
|
-
"build:js": "
|
|
27
|
-
"build:types": "tsc --project tsconfig.json",
|
|
10
|
+
"build:js": "bun run esbuild.config.ts",
|
|
11
|
+
"build:types": "tsc --emitDeclarationOnly --project tsconfig.json",
|
|
28
12
|
"dev": "npm run build:js -- --watch",
|
|
29
13
|
"prepublishOnly": "npm run build",
|
|
30
14
|
"test": "bun test ./src"
|
|
@@ -41,14 +25,100 @@
|
|
|
41
25
|
"license": "MIT",
|
|
42
26
|
"repository": {
|
|
43
27
|
"type": "git",
|
|
44
|
-
"url": "https://github.com/
|
|
28
|
+
"url": "https://github.com/moureau-dev/murow.git"
|
|
45
29
|
},
|
|
46
30
|
"bugs": {
|
|
47
|
-
"url": "https://github.com/
|
|
31
|
+
"url": "https://github.com/moureau-dev/murow/issues"
|
|
48
32
|
},
|
|
49
33
|
"devDependencies": {
|
|
50
34
|
"@types/bun": "^1.1.16",
|
|
51
35
|
"esbuild": "^0.19.0",
|
|
52
36
|
"typescript": "^5.0.0"
|
|
53
|
-
}
|
|
54
|
-
|
|
37
|
+
},
|
|
38
|
+
"exports": {
|
|
39
|
+
".": {
|
|
40
|
+
"types": "./dist/types/index.d.ts",
|
|
41
|
+
"import": "./dist/esm/index.js",
|
|
42
|
+
"require": "./dist/cjs/index.js",
|
|
43
|
+
"default": "./dist/esm/index.js"
|
|
44
|
+
},
|
|
45
|
+
"./core": {
|
|
46
|
+
"types": "./dist/types/core/index.d.ts",
|
|
47
|
+
"import": "./dist/esm/core/index.js",
|
|
48
|
+
"require": "./dist/cjs/core/index.js",
|
|
49
|
+
"default": "./dist/esm/core/index.js"
|
|
50
|
+
},
|
|
51
|
+
"./core/*": {
|
|
52
|
+
"types": "./dist/types/core/*/index.d.ts",
|
|
53
|
+
"import": "./dist/esm/core/*/index.js",
|
|
54
|
+
"require": "./dist/cjs/core/*/index.js"
|
|
55
|
+
},
|
|
56
|
+
"./ecs": {
|
|
57
|
+
"types": "./dist/types/ecs/index.d.ts",
|
|
58
|
+
"import": "./dist/esm/ecs/index.js",
|
|
59
|
+
"require": "./dist/cjs/ecs/index.js",
|
|
60
|
+
"default": "./dist/esm/ecs/index.js"
|
|
61
|
+
},
|
|
62
|
+
"./ecs/*": {
|
|
63
|
+
"types": "./dist/types/ecs/*.d.ts",
|
|
64
|
+
"import": "./dist/esm/ecs/*.js",
|
|
65
|
+
"require": "./dist/cjs/ecs/*.js"
|
|
66
|
+
},
|
|
67
|
+
"./game": {
|
|
68
|
+
"types": "./dist/types/game/index.d.ts",
|
|
69
|
+
"import": "./dist/esm/game/index.js",
|
|
70
|
+
"require": "./dist/cjs/game/index.js",
|
|
71
|
+
"default": "./dist/esm/game/index.js"
|
|
72
|
+
},
|
|
73
|
+
"./game/*": {
|
|
74
|
+
"types": "./dist/types/game/*.d.ts",
|
|
75
|
+
"import": "./dist/esm/game/*.js",
|
|
76
|
+
"require": "./dist/cjs/game/*.js"
|
|
77
|
+
},
|
|
78
|
+
"./net": {
|
|
79
|
+
"types": "./dist/types/net/index.d.ts",
|
|
80
|
+
"import": "./dist/esm/net/index.js",
|
|
81
|
+
"require": "./dist/cjs/net/index.js",
|
|
82
|
+
"default": "./dist/esm/net/index.js"
|
|
83
|
+
},
|
|
84
|
+
"./net/*": {
|
|
85
|
+
"types": "./dist/types/net/*.d.ts",
|
|
86
|
+
"import": "./dist/esm/net/*.js",
|
|
87
|
+
"require": "./dist/cjs/net/*.js"
|
|
88
|
+
},
|
|
89
|
+
"./protocol": {
|
|
90
|
+
"types": "./dist/types/protocol/index.d.ts",
|
|
91
|
+
"import": "./dist/esm/protocol/index.js",
|
|
92
|
+
"require": "./dist/cjs/protocol/index.js",
|
|
93
|
+
"default": "./dist/esm/protocol/index.js"
|
|
94
|
+
},
|
|
95
|
+
"./protocol/*": {
|
|
96
|
+
"types": "./dist/types/protocol/*.d.ts",
|
|
97
|
+
"import": "./dist/esm/protocol/*.js",
|
|
98
|
+
"require": "./dist/cjs/protocol/*.js"
|
|
99
|
+
},
|
|
100
|
+
"./renderer": {
|
|
101
|
+
"types": "./dist/types/renderer/index.d.ts",
|
|
102
|
+
"import": "./dist/esm/renderer/index.js",
|
|
103
|
+
"require": "./dist/cjs/renderer/index.js",
|
|
104
|
+
"default": "./dist/esm/renderer/index.js"
|
|
105
|
+
},
|
|
106
|
+
"./renderer/*": {
|
|
107
|
+
"types": "./dist/types/renderer/*.d.ts",
|
|
108
|
+
"import": "./dist/esm/renderer/*.js",
|
|
109
|
+
"require": "./dist/cjs/renderer/*.js"
|
|
110
|
+
},
|
|
111
|
+
"./webgpu": {
|
|
112
|
+
"types": "./dist/webgpu/types/index.d.ts",
|
|
113
|
+
"import": "./dist/webgpu/esm/index.js",
|
|
114
|
+
"require": "./dist/webgpu/cjs/index.js"
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
"optionalDependencies": {
|
|
118
|
+
"acorn": "^8.16.0",
|
|
119
|
+
"tinyest": "^0.3.1",
|
|
120
|
+
"tinyest-for-wgsl": "^0.3.2",
|
|
121
|
+
"typegpu": "^0.10.2"
|
|
122
|
+
},
|
|
123
|
+
"files": ["dist"]
|
|
124
|
+
}
|
|
@@ -1,354 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Internal symbol used to cache computed schema byte size.
|
|
3
|
-
*/
|
|
4
|
-
const SCHEMA_SIZE = Symbol("schemaSize");
|
|
5
|
-
/**
|
|
6
|
-
* Computes and caches the total byte size of a schema.
|
|
7
|
-
* @param schema Binary schema definition
|
|
8
|
-
*/
|
|
9
|
-
function getSchemaSize(schema) {
|
|
10
|
-
const cached = schema[SCHEMA_SIZE];
|
|
11
|
-
if (cached !== undefined)
|
|
12
|
-
return cached;
|
|
13
|
-
let size = 0;
|
|
14
|
-
for (const k of Object.keys(schema)) {
|
|
15
|
-
size += schema[k].size;
|
|
16
|
-
}
|
|
17
|
-
schema[SCHEMA_SIZE] = size;
|
|
18
|
-
return size;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Base codec implementation.
|
|
22
|
-
* Handles schema-driven encoding/decoding.
|
|
23
|
-
*/
|
|
24
|
-
export class BaseBinaryCodec {
|
|
25
|
-
/**
|
|
26
|
-
* Encodes an object into a binary buffer using the given schema.
|
|
27
|
-
*
|
|
28
|
-
* Allocates a right-sized buffer per call.
|
|
29
|
-
* Safe for concurrent and re-entrant usage.
|
|
30
|
-
*
|
|
31
|
-
* @param schema Binary schema definition
|
|
32
|
-
* @param data Object to encode
|
|
33
|
-
* @returns A Uint8Array containing the encoded bytes
|
|
34
|
-
*/
|
|
35
|
-
static encodeInto(schema, data) {
|
|
36
|
-
const size = getSchemaSize(schema);
|
|
37
|
-
const buffer = new ArrayBuffer(size);
|
|
38
|
-
const view = new DataView(buffer);
|
|
39
|
-
let o = 0;
|
|
40
|
-
for (const k of Object.keys(schema)) {
|
|
41
|
-
const f = schema[k];
|
|
42
|
-
f.write(view, o, data[k]);
|
|
43
|
-
o += f.size;
|
|
44
|
-
}
|
|
45
|
-
return new Uint8Array(buffer);
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Decodes a binary buffer into a target object using the given schema.
|
|
49
|
-
*
|
|
50
|
-
* Validates buffer size before reading.
|
|
51
|
-
* Does not mutate shared state.
|
|
52
|
-
*
|
|
53
|
-
* @param schema Binary schema definition
|
|
54
|
-
* @param buf Buffer containing encoded data
|
|
55
|
-
* @param target Target object to mutate
|
|
56
|
-
* @returns The mutated target object
|
|
57
|
-
*/
|
|
58
|
-
static decodeInto(schema, buf, target) {
|
|
59
|
-
const expectedSize = getSchemaSize(schema);
|
|
60
|
-
if (buf.byteLength < expectedSize) {
|
|
61
|
-
throw new RangeError(`Buffer too small: expected ${expectedSize} bytes, got ${buf.byteLength}`);
|
|
62
|
-
}
|
|
63
|
-
const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);
|
|
64
|
-
let o = 0;
|
|
65
|
-
for (const k of Object.keys(schema)) {
|
|
66
|
-
const f = schema[k];
|
|
67
|
-
target[k] = f.read(view, o);
|
|
68
|
-
o += f.size;
|
|
69
|
-
}
|
|
70
|
-
return target;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Built-in binary primitive field definitions for multiplayer games.
|
|
75
|
-
*/
|
|
76
|
-
export class BinaryPrimitives {
|
|
77
|
-
/**
|
|
78
|
-
* String field with UTF-8 encoding and 2-byte length prefix.
|
|
79
|
-
* @param maxLength Maximum number of bytes allowed
|
|
80
|
-
*/
|
|
81
|
-
static string(maxLength) {
|
|
82
|
-
return {
|
|
83
|
-
size: maxLength + 2,
|
|
84
|
-
write(dv, o, v) {
|
|
85
|
-
const encoder = new TextEncoder();
|
|
86
|
-
const bytes = encoder.encode(v);
|
|
87
|
-
if (bytes.length > maxLength)
|
|
88
|
-
throw new RangeError(`String too long, max ${maxLength} bytes`);
|
|
89
|
-
dv.setUint16(o, bytes.length, false);
|
|
90
|
-
for (let i = 0; i < bytes.length; i++)
|
|
91
|
-
dv.setUint8(o + 2 + i, bytes[i]);
|
|
92
|
-
for (let i = bytes.length; i < maxLength; i++)
|
|
93
|
-
dv.setUint8(o + 2 + i, 0);
|
|
94
|
-
},
|
|
95
|
-
read(dv, o) {
|
|
96
|
-
const length = dv.getUint16(o, false);
|
|
97
|
-
const bytes = new Uint8Array(length);
|
|
98
|
-
for (let i = 0; i < length; i++)
|
|
99
|
-
bytes[i] = dv.getUint8(o + 2 + i);
|
|
100
|
-
return new TextDecoder().decode(bytes);
|
|
101
|
-
},
|
|
102
|
-
toNil: () => "",
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
/** Unsigned 8-bit integer */
|
|
107
|
-
BinaryPrimitives.u8 = {
|
|
108
|
-
size: 1,
|
|
109
|
-
write: (dv, o, v) => dv.setUint8(o, v),
|
|
110
|
-
read: (dv, o) => dv.getUint8(o),
|
|
111
|
-
toNil: () => 0,
|
|
112
|
-
};
|
|
113
|
-
/** Unsigned 16-bit integer (big-endian) */
|
|
114
|
-
BinaryPrimitives.u16 = {
|
|
115
|
-
size: 2,
|
|
116
|
-
write: (dv, o, v) => dv.setUint16(o, v, false),
|
|
117
|
-
read: (dv, o) => dv.getUint16(o, false),
|
|
118
|
-
toNil: () => 0,
|
|
119
|
-
};
|
|
120
|
-
/** Unsigned 32-bit integer (big-endian) */
|
|
121
|
-
BinaryPrimitives.u32 = {
|
|
122
|
-
size: 4,
|
|
123
|
-
write: (dv, o, v) => dv.setUint32(o, v, false),
|
|
124
|
-
read: (dv, o) => dv.getUint32(o, false),
|
|
125
|
-
toNil: () => 0,
|
|
126
|
-
};
|
|
127
|
-
/** Signed 8-bit integer */
|
|
128
|
-
BinaryPrimitives.i8 = {
|
|
129
|
-
size: 1,
|
|
130
|
-
write: (dv, o, v) => dv.setInt8(o, v),
|
|
131
|
-
read: (dv, o) => dv.getInt8(o),
|
|
132
|
-
toNil: () => 0,
|
|
133
|
-
};
|
|
134
|
-
/** Signed 16-bit integer (big-endian) */
|
|
135
|
-
BinaryPrimitives.i16 = {
|
|
136
|
-
size: 2,
|
|
137
|
-
write: (dv, o, v) => dv.setInt16(o, v, false),
|
|
138
|
-
read: (dv, o) => dv.getInt16(o, false),
|
|
139
|
-
toNil: () => 0,
|
|
140
|
-
};
|
|
141
|
-
/** Signed 32-bit integer (big-endian) */
|
|
142
|
-
BinaryPrimitives.i32 = {
|
|
143
|
-
size: 4,
|
|
144
|
-
write: (dv, o, v) => dv.setInt32(o, v, false),
|
|
145
|
-
read: (dv, o) => dv.getInt32(o, false),
|
|
146
|
-
toNil: () => 0,
|
|
147
|
-
};
|
|
148
|
-
/** 32-bit floating point number (IEEE 754, big-endian) */
|
|
149
|
-
BinaryPrimitives.f32 = {
|
|
150
|
-
size: 4,
|
|
151
|
-
write: (dv, o, v) => dv.setFloat32(o, v, false),
|
|
152
|
-
read: (dv, o) => dv.getFloat32(o, false),
|
|
153
|
-
toNil: () => 0,
|
|
154
|
-
};
|
|
155
|
-
/** 64-bit floating point number (double, big-endian) */
|
|
156
|
-
BinaryPrimitives.f64 = {
|
|
157
|
-
size: 8,
|
|
158
|
-
write: (dv, o, v) => dv.setFloat64(o, v, false),
|
|
159
|
-
read: (dv, o) => dv.getFloat64(o, false),
|
|
160
|
-
toNil: () => 0,
|
|
161
|
-
};
|
|
162
|
-
/** Boolean stored as 1 byte (0 = false, 1 = true) */
|
|
163
|
-
BinaryPrimitives.bool = {
|
|
164
|
-
size: 1,
|
|
165
|
-
write: (dv, o, v) => dv.setUint8(o, v ? 1 : 0),
|
|
166
|
-
read: (dv, o) => dv.getUint8(o) !== 0,
|
|
167
|
-
toNil: () => false,
|
|
168
|
-
};
|
|
169
|
-
/** 2D vector of f32 (x, y) */
|
|
170
|
-
BinaryPrimitives.vec2 = {
|
|
171
|
-
size: 8,
|
|
172
|
-
write(dv, o, v) {
|
|
173
|
-
dv.setFloat32(o, v.x, false);
|
|
174
|
-
dv.setFloat32(o + 4, v.y, false);
|
|
175
|
-
},
|
|
176
|
-
read(dv, o) {
|
|
177
|
-
return { x: dv.getFloat32(o, false), y: dv.getFloat32(o + 4, false) };
|
|
178
|
-
},
|
|
179
|
-
toNil: () => ({ x: 0, y: 0 }),
|
|
180
|
-
};
|
|
181
|
-
/** 3D vector of f32 (x, y, z) */
|
|
182
|
-
BinaryPrimitives.vec3 = {
|
|
183
|
-
size: 12,
|
|
184
|
-
write(dv, o, v) {
|
|
185
|
-
dv.setFloat32(o, v.x, false);
|
|
186
|
-
dv.setFloat32(o + 4, v.y, false);
|
|
187
|
-
dv.setFloat32(o + 8, v.z, false);
|
|
188
|
-
},
|
|
189
|
-
read(dv, o) {
|
|
190
|
-
return {
|
|
191
|
-
x: dv.getFloat32(o, false),
|
|
192
|
-
y: dv.getFloat32(o + 4, false),
|
|
193
|
-
z: dv.getFloat32(o + 8, false),
|
|
194
|
-
};
|
|
195
|
-
},
|
|
196
|
-
toNil: () => ({ x: 0, y: 0, z: 0 }),
|
|
197
|
-
};
|
|
198
|
-
/** RGBA color packed as 4 u8 bytes */
|
|
199
|
-
BinaryPrimitives.color = {
|
|
200
|
-
size: 4,
|
|
201
|
-
write(dv, o, v) {
|
|
202
|
-
dv.setUint8(o, v.r);
|
|
203
|
-
dv.setUint8(o + 1, v.g);
|
|
204
|
-
dv.setUint8(o + 2, v.b);
|
|
205
|
-
dv.setUint8(o + 3, v.a);
|
|
206
|
-
},
|
|
207
|
-
read(dv, o) {
|
|
208
|
-
return {
|
|
209
|
-
r: dv.getUint8(o),
|
|
210
|
-
g: dv.getUint8(o + 1),
|
|
211
|
-
b: dv.getUint8(o + 2),
|
|
212
|
-
a: dv.getUint8(o + 3),
|
|
213
|
-
};
|
|
214
|
-
},
|
|
215
|
-
toNil: () => ({ r: 0, g: 0, b: 0, a: 0 }),
|
|
216
|
-
};
|
|
217
|
-
/** 32-bit floating point number (IEEE 754, little-endian) */
|
|
218
|
-
BinaryPrimitives.f32_le = {
|
|
219
|
-
size: 4,
|
|
220
|
-
write: (dv, o, v) => dv.setFloat32(o, v, true),
|
|
221
|
-
read: (dv, o) => dv.getFloat32(o, true),
|
|
222
|
-
toNil: () => 0,
|
|
223
|
-
};
|
|
224
|
-
/** 64-bit floating point number (double, little-endian) */
|
|
225
|
-
BinaryPrimitives.f64_le = {
|
|
226
|
-
size: 8,
|
|
227
|
-
write: (dv, o, v) => dv.setFloat64(o, v, true),
|
|
228
|
-
read: (dv, o) => dv.getFloat64(o, true),
|
|
229
|
-
toNil: () => 0,
|
|
230
|
-
};
|
|
231
|
-
/** Unsigned 16-bit integer (little-endian) */
|
|
232
|
-
BinaryPrimitives.u16_le = {
|
|
233
|
-
size: 2,
|
|
234
|
-
write: (dv, o, v) => dv.setUint16(o, v, true),
|
|
235
|
-
read: (dv, o) => dv.getUint16(o, true),
|
|
236
|
-
toNil: () => 0,
|
|
237
|
-
};
|
|
238
|
-
/** Unsigned 32-bit integer (little-endian) */
|
|
239
|
-
BinaryPrimitives.u32_le = {
|
|
240
|
-
size: 4,
|
|
241
|
-
write: (dv, o, v) => dv.setUint32(o, v, true),
|
|
242
|
-
read: (dv, o) => dv.getUint32(o, true),
|
|
243
|
-
toNil: () => 0,
|
|
244
|
-
};
|
|
245
|
-
/** Signed 16-bit integer (little-endian) */
|
|
246
|
-
BinaryPrimitives.i16_le = {
|
|
247
|
-
size: 2,
|
|
248
|
-
write: (dv, o, v) => dv.setInt16(o, v, true),
|
|
249
|
-
read: (dv, o) => dv.getInt16(o, true),
|
|
250
|
-
toNil: () => 0,
|
|
251
|
-
};
|
|
252
|
-
/** Signed 32-bit integer (little-endian) */
|
|
253
|
-
BinaryPrimitives.i32_le = {
|
|
254
|
-
size: 4,
|
|
255
|
-
write: (dv, o, v) => dv.setInt32(o, v, true),
|
|
256
|
-
read: (dv, o) => dv.getInt32(o, true),
|
|
257
|
-
toNil: () => 0,
|
|
258
|
-
};
|
|
259
|
-
/**
|
|
260
|
-
* 2D vector of f32 stored as a tuple [x, y] (little-endian).
|
|
261
|
-
* Useful for compact math data or shader-friendly layouts.
|
|
262
|
-
*/
|
|
263
|
-
BinaryPrimitives.vec2_le = {
|
|
264
|
-
size: 8,
|
|
265
|
-
write: (dv, o, v) => {
|
|
266
|
-
dv.setFloat32(o, v[0], true);
|
|
267
|
-
dv.setFloat32(o + 4, v[1], true);
|
|
268
|
-
},
|
|
269
|
-
read: (dv, o) => [
|
|
270
|
-
dv.getFloat32(o, true),
|
|
271
|
-
dv.getFloat32(o + 4, true),
|
|
272
|
-
],
|
|
273
|
-
toNil: () => [0, 0],
|
|
274
|
-
};
|
|
275
|
-
/**
|
|
276
|
-
* 3D vector of f32 stored as a tuple [x, y, z] (little-endian).
|
|
277
|
-
* Commonly used for positions, velocities, or directions.
|
|
278
|
-
*/
|
|
279
|
-
BinaryPrimitives.vec3_le = {
|
|
280
|
-
size: 12,
|
|
281
|
-
write: (dv, o, v) => {
|
|
282
|
-
dv.setFloat32(o, v[0], true);
|
|
283
|
-
dv.setFloat32(o + 4, v[1], true);
|
|
284
|
-
dv.setFloat32(o + 8, v[2], true);
|
|
285
|
-
},
|
|
286
|
-
read: (dv, o) => [
|
|
287
|
-
dv.getFloat32(o, true),
|
|
288
|
-
dv.getFloat32(o + 4, true),
|
|
289
|
-
dv.getFloat32(o + 8, true),
|
|
290
|
-
],
|
|
291
|
-
toNil: () => [0, 0, 0],
|
|
292
|
-
};
|
|
293
|
-
/**
|
|
294
|
-
* 4D vector of f32 stored as a tuple [x, y, z, w] (little-endian).
|
|
295
|
-
* Useful for quaternions, colors in shaders, or homogeneous coordinates.
|
|
296
|
-
*/
|
|
297
|
-
BinaryPrimitives.vec4_le = {
|
|
298
|
-
size: 16,
|
|
299
|
-
write: (dv, o, v) => {
|
|
300
|
-
dv.setFloat32(o, v[0], true);
|
|
301
|
-
dv.setFloat32(o + 4, v[1], true);
|
|
302
|
-
dv.setFloat32(o + 8, v[2], true);
|
|
303
|
-
dv.setFloat32(o + 12, v[3], true);
|
|
304
|
-
},
|
|
305
|
-
read: (dv, o) => [
|
|
306
|
-
dv.getFloat32(o, true),
|
|
307
|
-
dv.getFloat32(o + 4, true),
|
|
308
|
-
dv.getFloat32(o + 8, true),
|
|
309
|
-
dv.getFloat32(o + 12, true),
|
|
310
|
-
],
|
|
311
|
-
toNil: () => [0, 0, 0, 0],
|
|
312
|
-
};
|
|
313
|
-
/**
|
|
314
|
-
* Public codec API.
|
|
315
|
-
* Re-exports primitives and exposes encode/decode helpers.
|
|
316
|
-
*/
|
|
317
|
-
export class BinaryCodec extends BaseBinaryCodec {
|
|
318
|
-
/**
|
|
319
|
-
* Encodes an object into a binary buffer.
|
|
320
|
-
*/
|
|
321
|
-
static encode(schema, data) {
|
|
322
|
-
return this.encodeInto(schema, data);
|
|
323
|
-
}
|
|
324
|
-
/**
|
|
325
|
-
* Decodes a binary buffer into an existing object.
|
|
326
|
-
*/
|
|
327
|
-
static decode(schema, buf, target) {
|
|
328
|
-
return this.decodeInto(schema, buf, target);
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
/** Unsigned 8-bit integer field */
|
|
332
|
-
BinaryCodec.u8 = BinaryPrimitives.u8;
|
|
333
|
-
/** Unsigned 16-bit integer field */
|
|
334
|
-
BinaryCodec.u16 = BinaryPrimitives.u16;
|
|
335
|
-
/** Unsigned 32-bit integer field */
|
|
336
|
-
BinaryCodec.u32 = BinaryPrimitives.u32;
|
|
337
|
-
/** Signed 8-bit integer field */
|
|
338
|
-
BinaryCodec.i8 = BinaryPrimitives.i8;
|
|
339
|
-
/** Signed 16-bit integer field */
|
|
340
|
-
BinaryCodec.i16 = BinaryPrimitives.i16;
|
|
341
|
-
/** Signed 32-bit integer field */
|
|
342
|
-
BinaryCodec.i32 = BinaryPrimitives.i32;
|
|
343
|
-
/** 32-bit floating point field */
|
|
344
|
-
BinaryCodec.f32 = BinaryPrimitives.f32;
|
|
345
|
-
/** Boolean field */
|
|
346
|
-
BinaryCodec.bool = BinaryPrimitives.bool;
|
|
347
|
-
/** String field with length prefix */
|
|
348
|
-
BinaryCodec.string = BinaryPrimitives.string;
|
|
349
|
-
/** 2D vector field */
|
|
350
|
-
BinaryCodec.vec2 = BinaryPrimitives.vec2;
|
|
351
|
-
/** 3D vector field */
|
|
352
|
-
BinaryCodec.vec3 = BinaryPrimitives.vec3;
|
|
353
|
-
/** RGBA color field */
|
|
354
|
-
BinaryCodec.color = BinaryPrimitives.color;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './binary-codec';
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { ImmediateDriver, RafDriver, TimeoutDriver } from "./drivers";
|
|
2
|
-
// Re-export driver classes for testing and direct usage
|
|
3
|
-
export { ImmediateDriver, RafDriver, TimeoutDriver };
|
|
4
|
-
/**
|
|
5
|
-
* Factory function to create a loop driver for the specified environment.
|
|
6
|
-
*
|
|
7
|
-
* @param type - The environment type
|
|
8
|
-
* - `'client'`: Browser RAF driver (60 FPS, syncs with display)
|
|
9
|
-
* - `'server'`: Node.js setImmediate driver (maximum performance)
|
|
10
|
-
* - `'server-timeout'`: Node.js setTimeout driver (balanced with I/O)
|
|
11
|
-
* @param update - Callback function invoked each frame with delta time in seconds
|
|
12
|
-
* @returns A configured LoopDriver instance ready to start
|
|
13
|
-
*
|
|
14
|
-
* @example
|
|
15
|
-
* ```typescript
|
|
16
|
-
* // Client
|
|
17
|
-
* const clientDriver = createDriver('client', (dt) => {
|
|
18
|
-
* game.update(dt);
|
|
19
|
-
* renderer.render();
|
|
20
|
-
* });
|
|
21
|
-
* clientDriver.start();
|
|
22
|
-
*
|
|
23
|
-
* // Server (maximum performance)
|
|
24
|
-
* const serverDriver = createDriver('server', (dt) => {
|
|
25
|
-
* simulation.tick(dt);
|
|
26
|
-
* });
|
|
27
|
-
* serverDriver.start();
|
|
28
|
-
*
|
|
29
|
-
* // Server (balanced with I/O)
|
|
30
|
-
* const balancedDriver = createDriver('server-timeout', (dt) => {
|
|
31
|
-
* simulation.tick(dt);
|
|
32
|
-
* handleNetworkIO();
|
|
33
|
-
* });
|
|
34
|
-
* balancedDriver.start();
|
|
35
|
-
* ```
|
|
36
|
-
*/
|
|
37
|
-
export function createDriver(type, update) {
|
|
38
|
-
if (type === 'server-immediate') {
|
|
39
|
-
return new ImmediateDriver(update);
|
|
40
|
-
}
|
|
41
|
-
else if (type === 'server-timeout') {
|
|
42
|
-
return new TimeoutDriver(update);
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
return new RafDriver(update);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Server-side game loop driver using setImmediate.
|
|
3
|
-
*
|
|
4
|
-
* This driver runs the game loop as fast as possible without blocking the event loop,
|
|
5
|
-
* making it suitable for Node.js server environments where high tick rates are desired.
|
|
6
|
-
*
|
|
7
|
-
* Delta time is automatically calculated between iterations and passed to the update callback in seconds.
|
|
8
|
-
*
|
|
9
|
-
* **Note:** This driver requires Node.js as it uses `setImmediate` which is not available in browsers.
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* ```typescript
|
|
13
|
-
* const driver = new ImmediateDriver((dt) => {
|
|
14
|
-
* world.tick(dt);
|
|
15
|
-
* broadcastState();
|
|
16
|
-
* });
|
|
17
|
-
* driver.start();
|
|
18
|
-
* ```
|
|
19
|
-
*/
|
|
20
|
-
export class ImmediateDriver {
|
|
21
|
-
/**
|
|
22
|
-
* @param update - Callback invoked each tick with delta time in seconds
|
|
23
|
-
*/
|
|
24
|
-
constructor(update) {
|
|
25
|
-
this.update = update;
|
|
26
|
-
this.last = performance.now();
|
|
27
|
-
this.running = false;
|
|
28
|
-
/**
|
|
29
|
-
* Internal loop method that calculates delta time and schedules the next iteration.
|
|
30
|
-
*
|
|
31
|
-
* Delta time is provided in seconds.
|
|
32
|
-
*/
|
|
33
|
-
this.loop = () => {
|
|
34
|
-
if (!this.running)
|
|
35
|
-
return;
|
|
36
|
-
const now = performance.now();
|
|
37
|
-
const dt = (now - this.last) / 1000;
|
|
38
|
-
this.last = now;
|
|
39
|
-
this.update(dt);
|
|
40
|
-
setImmediate(this.loop);
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Starts the game loop using setImmediate.
|
|
45
|
-
*
|
|
46
|
-
* Resets timing to prevent large initial delta.
|
|
47
|
-
*/
|
|
48
|
-
start() {
|
|
49
|
-
this.running = true;
|
|
50
|
-
this.last = performance.now();
|
|
51
|
-
this.loop();
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Stops the game loop.
|
|
55
|
-
*
|
|
56
|
-
* Note: Does not cancel already queued setImmediate callbacks.
|
|
57
|
-
*/
|
|
58
|
-
stop() {
|
|
59
|
-
this.running = false;
|
|
60
|
-
}
|
|
61
|
-
}
|