murow 0.0.72 → 0.1.1
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 +15 -1
- package/dist/cjs/core/binary-codec/binary-codec.js +1 -1
- package/dist/cjs/core/driver/driver.js +1 -1
- package/dist/cjs/core/driver/drivers/immediate.js +1 -1
- package/dist/cjs/core/driver/drivers/raf.js +1 -1
- package/dist/cjs/core/driver/drivers/timeout.js +1 -1
- package/dist/cjs/core/input/index.js +1 -1
- package/dist/cjs/core/input/mouse-look/index.js +1 -0
- package/dist/cjs/core/input/mouse-look/mouse-look.js +1 -0
- package/dist/cjs/core/input/scroll-zoom/index.js +1 -0
- package/dist/cjs/core/input/scroll-zoom/scroll-zoom.js +1 -0
- package/dist/cjs/core/sparse-batcher/sparse-batcher.js +1 -1
- package/dist/cjs/ecs/component.js +1 -1
- package/dist/cjs/ecs/system-builder.js +1 -1
- package/dist/cjs/ecs/world.js +1 -1
- package/dist/cjs/game/loop/loop.js +1 -1
- package/dist/cjs/net/adapters/bun-websocket.js +1 -1
- package/dist/cjs/renderer/base/renderer-3d.js +1 -1
- package/dist/cjs/renderer/prefab-bucket/concrete.js +1 -1
- package/dist/cjs/renderer/prefab-bucket/index.js +1 -1
- package/dist/cjs/renderer/prefab-bucket/parsers.js +1 -1
- package/dist/cjs/renderer/prefab-bucket/specs.js +1 -1
- package/dist/esm/core/binary-codec/binary-codec.js +1 -1
- package/dist/esm/core/driver/drivers/immediate.js +1 -1
- package/dist/esm/core/driver/drivers/raf.js +1 -1
- package/dist/esm/core/driver/drivers/timeout.js +1 -1
- package/dist/esm/core/input/index.js +1 -1
- package/dist/esm/core/input/mouse-look/index.js +1 -0
- package/dist/esm/core/input/mouse-look/mouse-look.js +1 -0
- package/dist/esm/core/input/scroll-zoom/index.js +1 -0
- package/dist/esm/core/input/scroll-zoom/scroll-zoom.js +1 -0
- package/dist/esm/core/sparse-batcher/sparse-batcher.js +1 -1
- package/dist/esm/ecs/component.js +1 -1
- package/dist/esm/ecs/system-builder.js +1 -1
- package/dist/esm/ecs/world.js +1 -1
- package/dist/esm/game/loop/loop.js +1 -1
- package/dist/esm/net/adapters/bun-websocket.js +1 -1
- package/dist/esm/renderer/base/renderer-3d.js +1 -1
- package/dist/esm/renderer/prefab-bucket/concrete.js +1 -1
- package/dist/esm/renderer/prefab-bucket/index.js +1 -1
- package/dist/esm/renderer/prefab-bucket/parsers.js +1 -1
- package/dist/netcode/cjs/index.js +1552 -0
- package/dist/netcode/esm/index.js +1530 -0
- package/dist/netcode/types/client/game-client.d.ts +125 -0
- package/dist/netcode/types/client/index.d.ts +1 -0
- package/dist/netcode/types/client/interpolation-buffer.d.ts +37 -0
- package/dist/netcode/types/client/interpolation-buffer.test.d.ts +1 -0
- package/dist/netcode/types/codec/delta-codec.d.ts +17 -0
- package/dist/netcode/types/codec/delta-codec.test.d.ts +1 -0
- package/dist/netcode/types/codec/index.d.ts +1 -0
- package/dist/netcode/types/components/index.d.ts +1 -0
- package/dist/netcode/types/components/sync-spec.d.ts +43 -0
- package/dist/netcode/types/components/sync-spec.test.d.ts +1 -0
- package/dist/netcode/types/ctx.d.ts +105 -0
- package/dist/netcode/types/ctx.test.d.ts +1 -0
- package/dist/netcode/types/handlers/define-handlers.d.ts +47 -0
- package/dist/netcode/types/handlers/index.d.ts +1 -0
- package/dist/netcode/types/index.d.ts +11 -0
- package/dist/netcode/types/integration.test.d.ts +1 -0
- package/dist/netcode/types/intents/define-intents.d.ts +53 -0
- package/dist/netcode/types/intents/define-intents.test.d.ts +1 -0
- package/dist/netcode/types/intents/index.d.ts +1 -0
- package/dist/netcode/types/network/base.d.ts +120 -0
- package/dist/netcode/types/network/index.d.ts +2 -0
- package/dist/netcode/types/network/transport.d.ts +1 -0
- package/dist/netcode/types/packets/convergence.test.d.ts +1 -0
- package/dist/netcode/types/packets/harness.d.ts +103 -0
- package/dist/netcode/types/packets/index.d.ts +2 -0
- package/dist/netcode/types/packets/intermittent-intents.test.d.ts +1 -0
- package/dist/netcode/types/packets/pathological.test.d.ts +1 -0
- package/dist/netcode/types/packets/peer-interpolation.test.d.ts +1 -0
- package/dist/netcode/types/packets/reordering.test.d.ts +1 -0
- package/dist/netcode/types/packets/virtual-network.d.ts +65 -0
- package/dist/netcode/types/predictions/define-predictions.d.ts +45 -0
- package/dist/netcode/types/predictions/define-predictions.test.d.ts +1 -0
- package/dist/netcode/types/predictions/index.d.ts +1 -0
- package/dist/netcode/types/reconciliation.test.d.ts +1 -0
- package/dist/netcode/types/rpcs/define-rpcs.d.ts +44 -0
- package/dist/netcode/types/rpcs/define-rpcs.test.d.ts +1 -0
- package/dist/netcode/types/rpcs/index.d.ts +1 -0
- package/dist/netcode/types/server/game-server.d.ts +77 -0
- package/dist/netcode/types/server/index.d.ts +2 -0
- package/dist/netcode/types/server/plugins/aoi-grid.d.ts +34 -0
- package/dist/netcode/types/server/plugins/index.d.ts +3 -0
- package/dist/netcode/types/server/plugins/lag-compensation.d.ts +34 -0
- package/dist/netcode/types/server/plugins/plugin.d.ts +24 -0
- package/dist/netcode/types/tick-rate.test.d.ts +1 -0
- package/dist/netcode/types/transports/index.d.ts +1 -0
- package/dist/netcode/types/transports/memory-transport.d.ts +51 -0
- package/dist/netcode/types/types.test.d.ts +1 -0
- package/dist/types/core/binary-codec/binary-codec.d.ts +89 -31
- package/dist/types/core/driver/driver.d.ts +8 -8
- package/dist/types/core/driver/drivers/immediate.d.ts +4 -4
- package/dist/types/core/driver/drivers/raf.d.ts +17 -6
- package/dist/types/core/driver/drivers/timeout.d.ts +4 -4
- package/dist/types/core/input/index.d.ts +2 -0
- package/dist/types/core/input/mouse-look/index.d.ts +1 -0
- package/dist/types/core/input/mouse-look/mouse-look.d.ts +139 -0
- package/dist/types/core/input/scroll-zoom/index.d.ts +1 -0
- package/dist/types/core/input/scroll-zoom/scroll-zoom.d.ts +38 -0
- package/dist/types/ecs/component.d.ts +67 -11
- package/dist/types/ecs/entity-handle.d.ts +5 -5
- package/dist/types/ecs/system-builder.d.ts +13 -0
- package/dist/types/ecs/world.d.ts +72 -4
- package/dist/types/game/loop/loop.d.ts +21 -2
- package/dist/types/net/adapters/bun-websocket.d.ts +19 -3
- package/dist/types/renderer/base/renderer-3d.d.ts +1 -1
- package/dist/types/renderer/prefab-bucket/concrete.d.ts +42 -2
- package/dist/types/renderer/prefab-bucket/index.d.ts +12 -2
- package/dist/types/renderer/prefab-bucket/specs.d.ts +46 -3
- package/dist/types/renderer/types.d.ts +5 -3
- package/dist/webgpu/cjs/index.js +591 -40
- package/dist/webgpu/esm/index.js +591 -40
- package/dist/webgpu/types/3d/renderer.d.ts +111 -5
- package/package.json +6 -1
|
@@ -20,11 +20,32 @@ export interface MeshInstanceHandle {
|
|
|
20
20
|
readonly slot: number;
|
|
21
21
|
readonly modelId: number;
|
|
22
22
|
readonly skinned: boolean;
|
|
23
|
+
/** Source prefab id, or `null` if spawned from a raw model handle. */
|
|
24
|
+
readonly prefabId: string | null;
|
|
23
25
|
setPosition(x: number, y: number, z: number): void;
|
|
24
26
|
setRotation(x: number, y: number, z: number): void;
|
|
25
27
|
setScale(x: number, y: number, z: number): void;
|
|
28
|
+
/**
|
|
29
|
+
* Set position WITHOUT GPU interpolation from the previous frame.
|
|
30
|
+
* Writes both PREV and CURR to the same value, so the next render
|
|
31
|
+
* produces no lerp slide. Use after teleports, network snapshot
|
|
32
|
+
* snaps, or any time the entity should appear at the new location
|
|
33
|
+
* immediately rather than smoothly moving toward it.
|
|
34
|
+
*/
|
|
35
|
+
teleport(x: number, y: number, z: number): void;
|
|
36
|
+
/**
|
|
37
|
+
* Logical current position (what `setPosition` last wrote, not the interpolated render value).
|
|
38
|
+
* Returns a per-handle reusable tuple — do not retain across subsequent gets on the same handle.
|
|
39
|
+
*/
|
|
40
|
+
readonly position: readonly [number, number, number];
|
|
41
|
+
/** Logical current rotation in radians. Reusable tuple; see `position`. */
|
|
42
|
+
readonly rotation: readonly [number, number, number];
|
|
43
|
+
/** Logical current scale. Reusable tuple; see `position`. */
|
|
44
|
+
readonly scale: readonly [number, number, number];
|
|
26
45
|
play?(name: string, opts?: PlayOptions): void;
|
|
27
46
|
stop?(): void;
|
|
47
|
+
/** Free this instance's renderer slot. Safe to call once per handle. */
|
|
48
|
+
destroy(): void;
|
|
28
49
|
}
|
|
29
50
|
/** A loaded glTF model — may contain multiple mesh parts that share a skeleton. */
|
|
30
51
|
export interface GltfModel {
|
|
@@ -41,9 +62,30 @@ export interface InstanceHandle {
|
|
|
41
62
|
setPosition(x: number, y: number, z: number): void;
|
|
42
63
|
setRotation(x: number, y: number, z: number): void;
|
|
43
64
|
setScale(x: number, y: number, z: number): void;
|
|
65
|
+
/**
|
|
66
|
+
* Set position WITHOUT GPU interpolation from the previous frame.
|
|
67
|
+
* Writes both PREV and CURR to the same value, so the next render
|
|
68
|
+
* produces no lerp slide. Use after teleports, network snapshot
|
|
69
|
+
* snaps, or any time the entity should appear at the new location
|
|
70
|
+
* immediately.
|
|
71
|
+
*/
|
|
72
|
+
teleport(x: number, y: number, z: number): void;
|
|
73
|
+
/**
|
|
74
|
+
* Logical current position (what `setPosition` last wrote, not the interpolated render value).
|
|
75
|
+
* Returns a per-handle reusable tuple — do not retain across subsequent gets on the same handle.
|
|
76
|
+
*/
|
|
77
|
+
readonly position: readonly [number, number, number];
|
|
78
|
+
/** Logical current rotation in radians. Reusable tuple; see `position`. */
|
|
79
|
+
readonly rotation: readonly [number, number, number];
|
|
80
|
+
/** Logical current scale. Reusable tuple; see `position`. */
|
|
81
|
+
readonly scale: readonly [number, number, number];
|
|
44
82
|
play?(name: string, opts?: PlayOptions): void;
|
|
45
83
|
stop?(): void;
|
|
46
84
|
readonly skinned: boolean;
|
|
85
|
+
/** Source prefab id, or `null` if spawned from a raw model handle. */
|
|
86
|
+
readonly prefabId: string | null;
|
|
87
|
+
/** Free this instance's renderer slot(s). Safe to call once per handle. */
|
|
88
|
+
destroy(): void;
|
|
47
89
|
}
|
|
48
90
|
export interface MeshInstanceOptions {
|
|
49
91
|
/**
|
|
@@ -75,11 +117,13 @@ export interface WebGPU3DRendererOptions extends Renderer3DOptions {
|
|
|
75
117
|
*/
|
|
76
118
|
prefabs?: PrefabBucket3D;
|
|
77
119
|
/**
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
120
|
+
* Max distance (world units) at which skeletal animation is computed for
|
|
121
|
+
* skinned instances. Past this, instances still render but reuse their
|
|
122
|
+
* last bone matrices; their internal animation clocks keep ticking on
|
|
123
|
+
* CPU. See `renderer.setAnimationCullDistance` to change at runtime.
|
|
124
|
+
* Set to `Infinity` to disable. Default 50.
|
|
81
125
|
*/
|
|
82
|
-
|
|
126
|
+
animationCullDistance?: number;
|
|
83
127
|
}
|
|
84
128
|
export declare class WebGPU3DRenderer extends Base3DRenderer {
|
|
85
129
|
private root;
|
|
@@ -136,12 +180,20 @@ export declare class WebGPU3DRenderer extends Base3DRenderer {
|
|
|
136
180
|
private skinnedFreeList;
|
|
137
181
|
private skinnedBatcher;
|
|
138
182
|
private skinnedStaticDirty;
|
|
183
|
+
private skinnedStaticDV;
|
|
139
184
|
private skinnedInstanceModelIds;
|
|
140
185
|
private skinnedInstanceBoneOffsets;
|
|
141
186
|
private skinnedAnimStates;
|
|
142
187
|
private nextBoneOffset;
|
|
188
|
+
/** Reusable bone-offset blocks per skinIndex. Pushed on remove, popped on add. Indexed by skinIndex (low cardinality), so a Map of lists is fine. */
|
|
189
|
+
private freedBoneOffsets;
|
|
190
|
+
/** Per-bone-offset refcount. Linked multi-part instances share a block; freed when refcount hits 0. Indexed by boneOffset (< maxTotalBones). */
|
|
191
|
+
private boneOffsetRefcount;
|
|
192
|
+
/** Per-bone-offset skinIndex tag, so we can return the block to the right per-skin freelist on remove. */
|
|
193
|
+
private boneOffsetSkinIndex;
|
|
143
194
|
private readonly maxSkinnedInstances;
|
|
144
195
|
private readonly maxBonesPerSkin;
|
|
196
|
+
private animationCullDistanceSq;
|
|
145
197
|
private rawSkinnedDynamicBuffer;
|
|
146
198
|
private rawSkinnedStaticBuffer;
|
|
147
199
|
private rawSkinnedUniformBuffer;
|
|
@@ -167,6 +219,30 @@ export declare class WebGPU3DRenderer extends Base3DRenderer {
|
|
|
167
219
|
*/
|
|
168
220
|
onResize(callback: (width: number, height: number) => void): void;
|
|
169
221
|
createCompute(name: string, options: ComputeOptions): ComputeBuilder;
|
|
222
|
+
/**
|
|
223
|
+
* Set the maximum distance (in world units) at which the renderer keeps
|
|
224
|
+
* computing skeletal animation. Skinned instances farther than this are
|
|
225
|
+
* still drawn, but with their last-computed bone matrices instead of
|
|
226
|
+
* fresh ones, which saves GPU compute work. Their internal animation
|
|
227
|
+
* clocks keep ticking on CPU, so when they come back into range they
|
|
228
|
+
* resume in sync.
|
|
229
|
+
*
|
|
230
|
+
* Lower values trade visual smoothness on distant characters for FPS.
|
|
231
|
+
* Pass `Infinity` to disable culling entirely (always animate).
|
|
232
|
+
*
|
|
233
|
+
* Safe to call any time; takes effect on the next frame.
|
|
234
|
+
*
|
|
235
|
+
* @param distance Max distance to animate at, in world units.
|
|
236
|
+
*/
|
|
237
|
+
setAnimationCullDistance(distance: number): void;
|
|
238
|
+
/** Current animation cull distance (in world units). See `setAnimationCullDistance`. */
|
|
239
|
+
get animationCullDistance(): number;
|
|
240
|
+
/**
|
|
241
|
+
* Max skinned instances the renderer was sized for at construction.
|
|
242
|
+
* Independent budget from `maxInstances` since skinned characters use a
|
|
243
|
+
* separate set of GPU buffers. Read-only.
|
|
244
|
+
*/
|
|
245
|
+
get maxSkinned(): number;
|
|
170
246
|
/**
|
|
171
247
|
* Create a flat grid mesh on the XZ plane at Y=0.
|
|
172
248
|
*
|
|
@@ -180,6 +256,18 @@ export declare class WebGPU3DRenderer extends Base3DRenderer {
|
|
|
180
256
|
step?: number;
|
|
181
257
|
lineWidth?: number;
|
|
182
258
|
}): ModelHandle;
|
|
259
|
+
/**
|
|
260
|
+
* Create a unit-cube mesh centered at the origin. Pass `size` to scale the
|
|
261
|
+
* edge length, or keep size = 1 and scale at the instance level.
|
|
262
|
+
*
|
|
263
|
+
* ```ts
|
|
264
|
+
* const cube = renderer.createCube();
|
|
265
|
+
* renderer.addInstance({ model: cube, color: [1, 0.5, 0.2], scale: 2 });
|
|
266
|
+
* ```
|
|
267
|
+
*/
|
|
268
|
+
createCube(opts?: {
|
|
269
|
+
size?: number;
|
|
270
|
+
}): ModelHandle;
|
|
183
271
|
/**
|
|
184
272
|
* Register a model. Returns a handle for addInstance().
|
|
185
273
|
*
|
|
@@ -229,6 +317,13 @@ export declare class WebGPU3DRenderer extends Base3DRenderer {
|
|
|
229
317
|
*/
|
|
230
318
|
addInstance(opts: MeshInstanceOptions): InstanceHandle;
|
|
231
319
|
private addGltfInstance;
|
|
320
|
+
/**
|
|
321
|
+
* Spawn a composite prefab by spawning each of its parts at the composed
|
|
322
|
+
* (instance + offset) transform. The returned handle broadcasts subsequent
|
|
323
|
+
* `setPosition` / `setRotation` to every child, keeping each child's
|
|
324
|
+
* baked offset applied on top of the new value.
|
|
325
|
+
*/
|
|
326
|
+
private addCompositeInstance;
|
|
232
327
|
private addSkinnedInstance;
|
|
233
328
|
/**
|
|
234
329
|
* Drain pending resyncs from the coordinator. Per affected skin: rebuild
|
|
@@ -248,8 +343,19 @@ export declare class WebGPU3DRenderer extends Base3DRenderer {
|
|
|
248
343
|
* Update skeletal animations for all skinned instances. Call once per tick.
|
|
249
344
|
*/
|
|
250
345
|
private updatedBoneOffsets;
|
|
346
|
+
/**
|
|
347
|
+
* Returns true if a skinned instance's bone-matrix compute should be
|
|
348
|
+
* dispatched this frame. Combines frustum culling (scaled bounding sphere)
|
|
349
|
+
* and a configurable distance cull from the camera. Callers pass the
|
|
350
|
+
* camera position + cullDistSq once outside the loop to avoid re-reading.
|
|
351
|
+
*/
|
|
352
|
+
private shouldDispatchSkinning;
|
|
251
353
|
private updateAnimations;
|
|
252
|
-
|
|
354
|
+
/**
|
|
355
|
+
* Free an instance's renderer slot. Equivalent to `handle.destroy()` -
|
|
356
|
+
* kept as a convenience for direct lookup. Safe to call multiple times.
|
|
357
|
+
*/
|
|
358
|
+
removeInstance(handle: InstanceHandle): void;
|
|
253
359
|
storePreviousState(): void;
|
|
254
360
|
render(alpha: number): void;
|
|
255
361
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "murow",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "A lightweight TypeScript game engine for server-authoritative multiplayer games",
|
|
5
5
|
"types": "dist/types/index.d.ts",
|
|
6
6
|
"type": "module",
|
|
@@ -112,6 +112,11 @@
|
|
|
112
112
|
"types": "./dist/webgpu/types/index.d.ts",
|
|
113
113
|
"import": "./dist/webgpu/esm/index.js",
|
|
114
114
|
"require": "./dist/webgpu/cjs/index.js"
|
|
115
|
+
},
|
|
116
|
+
"./netcode": {
|
|
117
|
+
"types": "./dist/netcode/types/index.d.ts",
|
|
118
|
+
"import": "./dist/netcode/esm/index.js",
|
|
119
|
+
"require": "./dist/netcode/cjs/index.js"
|
|
115
120
|
}
|
|
116
121
|
},
|
|
117
122
|
"optionalDependencies": {
|