From: Benjamin Auder <benjamin.auder@somewhere> Date: Mon, 27 May 2019 17:33:40 +0000 (+0200) Subject: Start to catch up with code. Need to fnish at least live + corr games before publish X-Git-Url: https://git.auder.net/doc/html/css/pieces/vendor/%3C?a=commitdiff_plain;h=4fe5664d48e37cf7e0de7562e8e76e8698b0ea74;p=vchess.git Start to catch up with code. Need to fnish at least live + corr games before publish --- diff --git a/client/src/components/BaseGame.vue b/client/src/components/BaseGame.vue index c980400d..715d2fb7 100644 --- a/client/src/components/BaseGame.vue +++ b/client/src/components/BaseGame.vue @@ -47,7 +47,6 @@ export default { // NOTE: all following variables must be reset at the beginning of a game endgameMessage: "", orientation: "w", - // TODO: score and moves could be also in gameInfo (when resuming) score: "*", //'*' means 'unfinished' moves: [], cursor: -1, //index of the move just played @@ -55,15 +54,16 @@ export default { }; }, watch: { - // fenStart changes when a new game starts - "gameInfo.fenStart": function() { + // gameInfo (immutable once set) changes when a new game starts + "gameInfo": function() { // Reset all variables this.endgameMessage = ""; - this.orientation = this.gameInfo.mycolor || "w"; - this.score = "*"; - this.moves = []; - this.cursor = -1; - this.lastMove = null; + this.orientation = this.gameInfo.mycolor || "w"; //default orientation for observed games + this.score = this.gameInfo.score; //mutable (if initially "*") + this.moves = this.gameInfo.moves; //TODO: this is mutable; make a copy instead + const L = this.moves.length; + this.cursor = L-1; + this.lastMove = (L > 0 ? this.moves[L-1] : null); }, analyze: function() { if (this.analyze) @@ -115,9 +115,9 @@ export default { pgn += '[Site "vchess.club"]\n'; pgn += '[Variant "' + this.vname + '"]\n'; pgn += '[Date "' + getDate(new Date()) + '"]\n'; - pgn += '[White "' + this.game.players[0] + '"]\n'; - pgn += '[Black "' + this.game.players[1] + '"]\n'; - pgn += '[Fen "' + this.fenStart + '"]\n'; + pgn += '[White "' + this.gameInfo.players[0] + '"]\n'; + pgn += '[Black "' + this.gameInfo.players[1] + '"]\n'; + pgn += '[Fen "' + this.gameInfo.fenStart + '"]\n'; pgn += '[Result "' + this.score + '"]\n\n'; let counter = 1; let i = 0; diff --git a/client/src/utils/storage.js b/client/src/utils/storage.js index 937d8c78..bb7fdce7 100644 --- a/client/src/utils/storage.js +++ b/client/src/utils/storage.js @@ -35,6 +35,7 @@ export const GameStorage = delete localStorage["moves"]; }, + // TODO: game or gameInfo ?! get: function(gameRef) { const gid = gameRef.id; @@ -53,6 +54,7 @@ export const GameStorage = game.clocks = JSON.parse(localStorage.getItem("clocks")); game.timeControl = localStorage.getItem("timeControl"); game.increment = localStorage.getItem("increment"); + game.vname = localStorage.getItem("vname"); game.mode = "live"; } else diff --git a/client/src/views/Game.vue b/client/src/views/Game.vue index 10818b26..c60b17c7 100644 --- a/client/src/views/Game.vue +++ b/client/src/views/Game.vue @@ -16,8 +16,7 @@ pareil quand quelqu'un reco. <template lang="pug"> .row .col-sm-12.col-md-10.col-md-offset-1.col-lg-8.col-lg-offset-2 - BaseGame(:game="game" :analyze="analyze" - :vr="vr" :fen-start="fenStart" :players="players" :mycolor="mycolor" + BaseGame(:vname="vname" :game-info="gameInfo" :analyze="analyze" :vr="vr" ref="basegame" @newmove="processMove") .button-group(v-if="mode!='analyze'") button(@click="offerDraw") Draw @@ -46,7 +45,9 @@ export default { return { st: store.state, gameRef: {id: "", rid: ""}, //given in URL (rid = remote ID) - game: null, //passed to BaseGame + gameInfo: {}, //passed to BaseGame + vr: null, //TODO + vname: "", //obtained from gameInfo (slightly redundant..) drawOfferSent: false, //did I just ask for draw? (TODO: draw variables?) people: [], //potential observers (TODO) }; @@ -58,9 +59,12 @@ export default { }, watch: { '$route' (to, from) { - this.gameRef.id = to.params["id"]; - this.gameRef.rid = to.query["rid"]; - this.loadGame(); + if (!!to.params["id"]) + { + this.gameRef.id = to.params["id"]; + this.gameRef.rid = to.query["rid"]; + this.loadGame(); + } }, }, created: function() { @@ -95,7 +99,7 @@ export default { case "newmove": // TODO: observer on dark games must see all board ? Or alternate ? (seems better) // ...or just see nothing as on buho21 - this.$refs["baseGame"].play( + this.$refs["basegame"].play( data.move, this.vname!="Dark" ? "animate" : null); break; case "pong": //received if we sent a ping (game still alive on our side) @@ -237,32 +241,21 @@ export default { // - from server (one correspondance game I play[ed] or not) // - from remote peer (one live game I don't play, finished or not) loadGame: async function() { - const game = GameStorage.get(this.gameRef); - this.game = game; - this.cursor = game.moves.length-1; - // TODO: lastMove must be in BaseGame, not here - this.lastMove = (game.moves.length > 0 ? game.moves[this.cursor] : null); - const vModule = await import("@/variants/" + game.vname + ".js"); + this.gameInfo = GameStorage.get(this.gameRef); + this.vname = this.gameInfo.vname; + const vModule = await import("@/variants/" + this.vname + ".js"); window.V = vModule.VariantRules; - - - - - // Poll all players except me (if I'm playing) to know online status. - // --> Send ping to server (answer pong if players[s] are connected) - if (!!this.gameRef.id) - { - this.game.players.forEach(p => { - if (p.sid != this.st.user.sid) - this.st.conn.send(JSON.stringify({code:"ping", oppid:p.sid})); - }); - } - - - - - + this.vr = new V(this.gameInfo.fen); +// // Poll all players except me (if I'm playing) to know online status. +// // --> Send ping to server (answer pong if players[s] are connected) +// if (this.gameInfo.players.some(p => p.sid == this.st.user.sid)) +// { +// this.game.players.forEach(p => { +// if (p.sid != this.st.user.sid) +// this.st.conn.send(JSON.stringify({code:"ping", oppid:p.sid})); +// }); +// } }, oppConnected: function(uid) { return this.opponents.some(o => o.id == uid && o.online);