From ef947f79427854bdc4ecebfb940767182e73049c Mon Sep 17 00:00:00 2001 From: Tissevert Date: Sat, 18 Jan 2020 23:10:22 +0100 Subject: [PATCH] Keep previous state of game and use it to replay latest move --- js/GUI/Screen/Game.js | 25 ++++++++++++++++++------- js/Games.js | 12 +++++++++++- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/js/GUI/Screen/Game.js b/js/GUI/Screen/Game.js index a120b08..f7a9b88 100644 --- a/js/GUI/Screen/Game.js +++ b/js/GUI/Screen/Game.js @@ -27,11 +27,11 @@ function init(gameID) { initMessageHandlers(); Async.run( Async.bind( - getSavedState(gameID), - function(o) { + getSavedMessages(gameID), + function(messages) { return Async.sequence( startSession(), - setGame(o) + previously(messages) ); } ) @@ -51,9 +51,9 @@ function fail(errorCode) { } } -function getSavedState(gameID) { - var coordinates = Save.get('games.message.Game#' + gameID); - return coordinates != undefined ? Async.wrap(coordinates) : fail('gameNotFound'); +function getSavedMessages(gameID) { + var messages = Save.get('games.message.Game#' + gameID); + return messages != undefined ? Async.wrap(messages) : fail('gameNotFound'); } function startSession() { @@ -66,6 +66,17 @@ function startSession() { } } +function previously(messages) { + if(messages.former != undefined && messages.latest.logs.length > 0) { + return Async.sequence( + setGame(messages.former), + handleGameMessage(messages.latest) + ); + } else { + return setGame(messages.latest); + } +} + function initMessageHandlers() { window.addEventListener('focus', catchUp); Messaging.addEventListener(["Game"], function(o) { @@ -79,7 +90,7 @@ function initMessageHandlers() { } function handleGameMessage(o) { - if(o.state.public.coordinates.turn == 0 || state.game == null) { + if(o.state.public.coordinates.turn == 0) { if(o.logs.length > 0) { // but still some logs, from the previous round return Async.sequence(applyDiff(o), setGame(o)); // so play the diff, then set the new round } else { diff --git a/js/Games.js b/js/Games.js index 4336092..bc243cc 100644 --- a/js/Games.js +++ b/js/Games.js @@ -29,11 +29,21 @@ function proposal(playerID, yourTurn) { ); } +function pushMessage(gameID, message) { + var latestPath = "games.message." + gameID + ".latest"; + var formerPath = "games.message." + gameID + ".former"; + var former = Save.get(latestPath); + if(former != undefined) { + Save.set(formerPath, former); + } + Save.set(latestPath, message); +} + function initMessageHandlers() { Messaging.addEventListener(["Game"], function(o) { var gameID = o.state.public.coordinates.gameID; var entry = makeEntry(o.state); - Save.set("games.message." + gameID, o); + pushMessage(gameID, o); Save.set("games.entry." + gameID, entry); entries.insert(gameID, entry); });