@genex-ai/multiplayer 0.8.2 → 0.8.3

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.
Files changed (2) hide show
  1. package/dist/index.js +10 -6
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -7,6 +7,7 @@ var INTERP_RATIO = 1.5;
7
7
  var INTERP_MIN_MS = 90;
8
8
  var INTERP_MAX_MS = 300;
9
9
  var JITTER_SAFETY = 1.2;
10
+ var POISON_GUARD_MS = 2e3;
10
11
  var INTERP_EASE = 0.1;
11
12
  var MAX_EXTRAP_MS = 250;
12
13
  var ROT_EXTRAP_MS = 150;
@@ -189,8 +190,10 @@ function attachSession(client, initialRoom) {
189
190
  const objRaw = /* @__PURE__ */ new Map();
190
191
  const localObjState = /* @__PURE__ */ new Map();
191
192
  let hostId;
193
+ const testSkew = typeof globalThis !== "undefined" && globalThis.__GENEX_MP_TEST_SKEW__ || 0;
194
+ const now = testSkew ? () => nowMs() + testSkew : nowMs;
192
195
  const pushSnap = (id, state, sendTime) => {
193
- const arrival = nowMs();
196
+ const arrival = now();
194
197
  const t = sendTime ?? arrival;
195
198
  if (sendTime != null) {
196
199
  let win = offsetWin.get(id);
@@ -223,6 +226,7 @@ function attachSession(client, initialRoom) {
223
226
  buf.push({ t, state });
224
227
  const cutoff = t - 1500;
225
228
  while (buf.length > 2 && buf[0].t < cutoff) buf.shift();
229
+ while (buf.length > 1 && buf[0].t > buf[buf.length - 1].t + POISON_GUARD_MS) buf.shift();
226
230
  };
227
231
  const sampleSmoothed = (streamKey, localNow) => {
228
232
  const buf = buffers.get(streamKey);
@@ -333,7 +337,7 @@ function attachSession(client, initialRoom) {
333
337
  $(r.state).players.onAdd((player, id) => {
334
338
  const { state, sendTime } = parseData(player.data);
335
339
  emit("join", id, state);
336
- if (id !== room.sessionId) pushSnap(id, state, sendTime);
340
+ if (id !== room.sessionId && sendTime != null) pushSnap(id, state, sendTime);
337
341
  $(player).onChange(() => {
338
342
  const { state: st, sendTime: ts } = parseData(player.data);
339
343
  emit("change", id, st);
@@ -431,7 +435,7 @@ function attachSession(client, initialRoom) {
431
435
  id: room.sessionId,
432
436
  get players() {
433
437
  const out = /* @__PURE__ */ new Map();
434
- const localNow = nowMs();
438
+ const localNow = now();
435
439
  room.state?.players?.forEach((p, id) => {
436
440
  const latest = cachedParse(id, p.data);
437
441
  let state = latest;
@@ -455,7 +459,7 @@ function attachSession(client, initialRoom) {
455
459
  }
456
460
  const clean = sanitizeFinite(state);
457
461
  localState = clean;
458
- send0("state", JSON.stringify({ ...clean, [SEND_TIME_KEY]: nowMs() }));
462
+ send0("state", JSON.stringify({ ...clean, [SEND_TIME_KEY]: now() }));
459
463
  }
460
464
  },
461
465
  shared: {
@@ -497,7 +501,7 @@ function attachSession(client, initialRoom) {
497
501
  const key = String(id);
498
502
  const clean = sanitizeFinite(state);
499
503
  if (objOwners.get(key) === room.sessionId) localObjState.set(key, clean);
500
- send0("obj", { id: key, d: clean, t: nowMs() });
504
+ send0("obj", { id: key, d: clean, t: now() });
501
505
  },
502
506
  get(id) {
503
507
  const key = String(id);
@@ -512,7 +516,7 @@ function attachSession(client, initialRoom) {
512
516
  raw = mine;
513
517
  } else {
514
518
  raw = objRaw.get(key) ?? {};
515
- state = sampleSmoothed(OBJ_PREFIX + key, nowMs()) ?? raw;
519
+ state = sampleSmoothed(OBJ_PREFIX + key, now()) ?? raw;
516
520
  }
517
521
  return { id: key, owner, isMine, state, stateRaw: raw };
518
522
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@genex-ai/multiplayer",
3
- "version": "0.8.2",
3
+ "version": "0.8.3",
4
4
  "description": "The multiplayer client wrapper + shared room schema for genex.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",