X-Git-Url: https://git.auder.net/?p=vchess.git;a=blobdiff_plain;f=client%2Fsrc%2Fcomponents%2FBaseGame.vue;h=65e96cf6aa42ec5a1711b85556cc83b1a41ccd20;hp=c4ffe5cafe9128930d50695ad242a3d8c47ea43f;hb=a68362420a3a92099dfaacea10f6cbd579161183;hpb=ea14297f666bf99ee7edf996d71cec45c71433cf diff --git a/client/src/components/BaseGame.vue b/client/src/components/BaseGame.vue index c4ffe5ca..65e96cf6 100644 --- a/client/src/components/BaseGame.vue +++ b/client/src/components/BaseGame.vue @@ -11,6 +11,7 @@ div#baseGame #gameContainer #boardContainer Board( + ref="board" :vr="vr" :last-move="lastMove" :analyze="game.mode=='analyze'" @@ -178,12 +179,15 @@ export default { const parsedFen = V.ParseFen(game.fenStart); const firstMoveColor = parsedFen.turn; this.firstMoveNumber = Math.floor(parsedFen.movesCount / 2); + let L = this.moves.length; this.moves.forEach(move => { // Strategy working also for multi-moves: if (!Array.isArray(move)) move = [move]; - move.forEach(m => { + move.forEach((m,idx) => { m.notation = this.vr.getNotation(m); this.vr.play(m); + if (idx < L - 1 && this.vr.getCheckSquares(this.vr.turn).length > 0) + m.notation += "+"; }); }); if (firstMoveColor == "b") { @@ -194,9 +198,15 @@ export default { end: { x: -1, y: -1 }, fen: game.fenStart }); + L++; } this.positionCursorTo(this.moves.length - 1); this.incheck = this.vr.getCheckSquares(this.vr.turn); + const score = this.vr.getCurrentScore(); + if (["1-0","0-1"].includes(score)) + this.moves[L - 1].notation += "#"; + else if (this.vr.getCheckSquares(this.vr.turn).length > 0) + this.moves[L - 1].notation += "+"; }, positionCursorTo: function(index) { this.cursor = index; @@ -297,6 +307,8 @@ export default { }, // "light": if gotoMove() or gotoEnd() play: function(move, received, light, noemit) { + // Freeze while choices are shown: + if (this.$refs["board"].choices.length > 0) return; if (!!noemit) { if (this.inPlay) { // Received moves in observed games can arrive too fast: @@ -349,6 +361,12 @@ export default { }; const computeScore = () => { const score = this.vr.getCurrentScore(); + if (!navigate) { + if (["1-0","0-1"].includes(score)) + this.lastMove.notation += "#"; + else if (this.vr.getCheckSquares(this.vr.turn).length > 0) + this.lastMove.notation += "+"; + } if (score != "*" && this.game.mode == "analyze") { const message = getScoreMessage(score); // Just show score on screen (allow undo) @@ -366,15 +384,15 @@ export default { this.incheck = this.vr.getCheckSquares(this.vr.turn); this.emitFenIfAnalyze(); this.inMultimove = false; - if (!noemit) var score = computeScore(); + this.score = computeScore(); if (this.game.mode != "analyze") { - const L = this.moves.length; - if (!noemit) + if (!noemit) { // Post-processing (e.g. computer play). + const L = this.moves.length; // NOTE: always emit the score, even in unfinished, // to tell Game::processMove() that it's not a received move. - this.$emit("newmove", this.moves[L-1], { score: score }); - else { + this.$emit("newmove", this.moves[L-1], { score: this.score }); + } else { this.inPlay = false; if (this.stackToPlay.length > 0) // Move(s) arrived in-between @@ -394,7 +412,7 @@ export default { if (!light) { this.lastMove = move[move.length-1]; this.incheck = this.vr.getCheckSquares(this.vr.turn); - computeScore(); + this.score = computeScore(); this.emitFenIfAnalyze(); } this.cursor++; @@ -430,6 +448,8 @@ export default { }, // "light": if gotoMove() or gotoBegin() undo: function(move, light) { + // Freeze while choices are shown: + if (this.$refs["board"].choices.length > 0) return; if (this.inMultimove) { this.cancelCurrentMultimove(); this.incheck = this.vr.getCheckSquares(this.vr.turn); @@ -452,6 +472,7 @@ export default { } }, gotoMove: function(index) { + if (this.$refs["board"].choices.length > 0) return; if (this.inMultimove) this.cancelCurrentMultimove(); if (index == this.cursor) return; if (index < this.cursor) { @@ -469,6 +490,7 @@ export default { this.emitFenIfAnalyze(); }, gotoBegin: function() { + if (this.$refs["board"].choices.length > 0) return; if (this.inMultimove) this.cancelCurrentMultimove(); const minCursor = this.moves.length > 0 && this.moves[0].notation == "..." @@ -480,11 +502,13 @@ export default { this.emitFenIfAnalyze(); }, gotoEnd: function() { + if (this.$refs["board"].choices.length > 0) return; if (this.cursor == this.moves.length - 1) return; this.gotoMove(this.moves.length - 1); this.emitFenIfAnalyze(); }, flip: function() { + if (this.$refs["board"].choices.length > 0) return; this.orientation = V.GetOppCol(this.orientation); } }