// TODO: also option to takeback a move ?
// NOTE: for live games only (all on server for corr)
- update: function(gameId, obj) //colorIdx, nextIdx, move, fen, addTime, score
+ update: function(gameId, obj) //move, fen, clocks, score, initime, ...
{
dbOperation((db) => {
let objectStore = db.transaction("games", "readwrite").objectStore("games");
objectStore.get(gameId).onsuccess = function(event) {
const game = event.target.result;
- if (!!obj.move)
- {
- game.moves.push(obj.move);
- game.fen = obj.fen;
- game.clocks[obj.colorIdx] += obj.addTime;
- game.initime[obj.nextIdx] = Date.now();
- }
- if (!!obj.score)
- game.score = obj.score;
+ Object.keys(obj).forEach(k => {
+ if (k == "move")
+ game.moves.push(obj[k]);
+ else
+ game[k] = obj[k];
+ });
objectStore.put(game); //save updated data
}
});
//also using move.played fields
game.clocks = [-1, -1];
game.initime = [0, 0];
+ // TODO: compute clocks + initime
}
const tc = extractTime(game.timeControl);
+ const myIdx = game.players.findIndex(p => p.sid == this.st.user.sid);
if (game.clocks[0] < 0) //game unstarted
{
game.clocks = [tc.mainTime, tc.mainTime];
game.initime[0] = Date.now();
+ if (myIdx >= 0) //I play in this game
+ {
+ GameStorage.update(game.gameId,
+ {
+ clocks: game.clocks,
+ initime: game.initime,
+ });
+ }
}
const vModule = await import("@/variants/" + vname + ".js");
window.V = vModule.VariantRules;
this.vr = new V(game.fen);
- const myIdx = game.players.findIndex(p => p.sid == this.st.user.sid);
this.game = Object.assign({},
game,
// NOTE: assign mycolor here, since BaseGame could also bs VS computer
const nextIdx = ["w","b"].indexOf(this.vr.turn);
GameStorage.update(this.gameRef.id,
{
- colorIdx: colorIdx,
- nextIdx: nextIdx,
move: filtered_move,
fen: move.fen,
- addTime: addTime,
+ clocks: this.game.clocks.map((t,i) => i==colorIdx
+ ? this.game.clocks[i] + addTime
+ : this.game.clocks[i]),
+ initime: this.game.initime.map((t,i) => i==nextIdx
+ ? Date.now()
+ : this.game.initime[i]),
});
// Also update current game object:
this.game.moves.push(move);
// TODO: this update function should also work for corr games
gameOver: function(score) {
this.game.mode = "analyze";
- GameStorage.update(this.gameRef.id,
- {
- score: score,
- });
+ GameStorage.update(this.gameRef.id, { score: score });
},
},
};