X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Futils%2Fstorage.js;h=a30bb824e964b70ce855c973d1fefeac3b4e87d4;hb=8a7452b520dc7ead6880a7e62e7c0e057db1ebda;hp=eb04078198d6c9b81def2b7b6fdd9914a72fe430;hpb=d6c1bf3726afae94867854dda76df2848770068c;p=vchess.git diff --git a/client/src/utils/storage.js b/client/src/utils/storage.js index eb040781..a30bb824 100644 --- a/client/src/utils/storage.js +++ b/client/src/utils/storage.js @@ -1,5 +1,4 @@ import { extractTime } from "@/utils/timeControl"; -import { shuffle } from "@/utils/alea"; // TODO: show game structure //const newItem = [ @@ -79,10 +78,6 @@ export const GameStorage = // localStorage: init: function(o) { - // NOTE: when >= 3 players, better use an array + shuffle for mycolor - const mycolor = (Math.random() < 0.5 ? "w" : "b"); - // Shuffle players order (white then black then other colors). - const players = shuffle(o.players); // Extract times (in [milli]seconds), set clocks, store in localStorage const tc = extractTime(o.timeControl); @@ -91,9 +86,8 @@ export const GameStorage = { gameId: o.gameId, vname: o.vname, - mycolor: mycolor, fenStart: o.fenStart, - players: players, + players: o.players, timeControl: o.timeControl, increment: tc.increment, mode: "live", //function for live games only @@ -105,7 +99,7 @@ export const GameStorage = fen: o.fenStart, moves: [], clocks: [...Array(o.players.length)].fill(tc.mainTime), - started: [...Array(o.players.length)].fill(false), + initime: (o.initime ? Date.now() : undefined), score: "*", }; @@ -113,24 +107,31 @@ export const GameStorage = localStorage.setItem("gameState", JSON.stringify(gameState)); }, + getInitime: function() + { + const gameState = JSON.parse(localStorage.getItem("gameState")); + return gameState.initime; + }, + // localStorage: - // TODO: also option to takeback a move ? Is fen included in move ? + // TODO: also option to takeback a move ? // NOTE: for live games only (all on server for corr) - update: function(fen, moves, clocks, started, score) + update: function(o) //colorIdx, move, fen, elapsed, increment, initime, score { let gameState = JSON.parse(localStorage.getItem("gameState")); - if (!!fen) + if (!!o.move) { - gameState.moves = moves; - gameState.fen = fen; - gameState.clocks = clocks; + gameState.moves.push(o.move); + gameState.fen = o.fen; + if (!!o.elapsed) //NaN if first move in game + gameState.clocks[o.colorIdx] += (o.increment - o.elapsed); } - if (!!started) - gameState.started = started; - if (!!score) - gameState.score = score; + if (!!o.initime) //just a flag (true) + gameState.initime = Date.now(); + if (!!o.score) + gameState.score = o.score; localStorage.setItem("gameState", JSON.stringify(gameState)); - if (!!score && score != "*") + if (!!o.score && o.score != "*") transferToDb(); //game is over }, @@ -145,7 +146,7 @@ export const GameStorage = let objectStore = db.transaction('games').objectStore('games'); objectStore.openCursor().onsuccess = function(event) { var cursor = event.target.result; - // if there is still another cursor to go, keep runing this code + // if there is still another cursor to go, keep running this code if (cursor) { games.push(cursor.value); @@ -168,7 +169,7 @@ export const GameStorage = callback({}); //everything's fine } transaction.onerror = function() { - callback({errmsg: "deleteGame failed: " + transaction.error}); + callback({errmsg: "game removal failed: " + transaction.error}); }; } transaction.objectStore("games").delete(gameId);