From dc65803ca310222797a42e6971d96d7915472bbd Mon Sep 17 00:00:00 2001 From: Thilo Behnke Date: Sun, 10 Jul 2022 23:10:51 +0200 Subject: [PATCH] bugfix/fix-duplicate-send-of-ticks --- .../components/InstrumentedTickWrapper.svelte | 11 ++--- .../components/NetworkSessionWrapper.svelte | 42 +++++++++++-------- 2 files changed, 28 insertions(+), 25 deletions(-) diff --git a/client/svelte-client/src/components/InstrumentedTickWrapper.svelte b/client/svelte-client/src/components/InstrumentedTickWrapper.svelte index d48aaef..4914325 100644 --- a/client/svelte-client/src/components/InstrumentedTickWrapper.svelte +++ b/client/svelte-client/src/components/InstrumentedTickWrapper.svelte @@ -14,14 +14,9 @@ $: if (networkTickEvents && $networkTickEvents.hasNext) { const tick = networkTickEvents.next() as HostSessionSnapshot; if (tick != null) { - if (lastTick && lastTick.ts >= tick.ts) { - // TODO: How is this possible? - console.error(`!!!! Duplicated Tick ${tick.ts} (vs ${lastTick.ts}) !!!!`) - } else { - inputs = tick.inputs; - gameField.update(tick.objects, tick.state); - lastTick = tick; - } + inputs = tick.inputs; + gameField.update(tick.objects, tick.state); + lastTick = tick; } } diff --git a/client/svelte-client/src/components/NetworkSessionWrapper.svelte b/client/svelte-client/src/components/NetworkSessionWrapper.svelte index 91c6e97..f90ac28 100644 --- a/client/svelte-client/src/components/NetworkSessionWrapper.svelte +++ b/client/svelte-client/src/components/NetworkSessionWrapper.svelte @@ -19,6 +19,8 @@ let cachedSessionId; let relevantKeyboardEvents: Readable; + let lastTick: number = null; + $: if (!cachedSessionId && session && isPlayer(session.you)) { cachedSessionId = session.session_id; console.log("NetworkSessionWrapper ready, now setting up sessionEvents") @@ -29,26 +31,32 @@ } $: if (session && session.type === SessionType.HOST && session.state === SessionState.RUNNING) { - console.debug("sending host snapshot") - const state: GameState = $gameField.state; - networkEvents.produce({ - state, - inputs: $sessionInputs, - session_id: session.session_id, - objects: $gameField.objects, - player_id: session.you.id, - ts: $gameField.ts - }) + if (lastTick != $gameField.ts) { + console.debug("sending host snapshot") + const state: GameState = $gameField.state; + networkEvents.produce({ + state, + inputs: $sessionInputs, + session_id: session.session_id, + objects: $gameField.objects, + player_id: session.you.id, + ts: $gameField.ts + }); + lastTick = $gameField.ts; + } } $: if (session && session.type === SessionType.PEER && session.state === SessionState.RUNNING) { - console.debug("sending peer snapshot") - networkEvents.produce({ - inputs: $relevantKeyboardEvents, - session_id: session.session_id, - player_id: session.you.id, - ts: $gameField.ts - }) + if (lastTick != $gameField.ts) { + console.debug("sending peer snapshot") + networkEvents.produce({ + inputs: $relevantKeyboardEvents, + session_id: session.session_id, + player_id: session.you.id, + ts: $gameField.ts + }) + lastTick = $gameField.ts; + } } $: console.debug($networkSessionStateEvents)