@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.
- package/dist/index.js +10 -6
- 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 =
|
|
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 =
|
|
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]:
|
|
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:
|
|
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,
|
|
519
|
+
state = sampleSmoothed(OBJ_PREFIX + key, now()) ?? raw;
|
|
516
520
|
}
|
|
517
521
|
return { id: key, owner, isMine, state, stateRaw: raw };
|
|
518
522
|
},
|