X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fcomponents%2FBaseGame.vue;h=3573643d22a694219dfb8d6f6b875017679419cd;hb=71ef1664983cd58db3c3bbfdf6cb7c362474e9a5;hp=07d62cf7b345bd7ac1779de5757a4c16efcbb31b;hpb=20620465247585ed4e845885c4d9fee8cd6920c1;p=vchess.git diff --git a/client/src/components/BaseGame.vue b/client/src/components/BaseGame.vue index 07d62cf7..3573643d 100644 --- a/client/src/components/BaseGame.vue +++ b/client/src/components/BaseGame.vue @@ -45,7 +45,7 @@ div#baseGame( #controls button(@click="gotoBegin()") << button(@click="undo()") < - button(@click="flip()") ⇅ + button(v-if="canFlip" @click="flip()") ⇅ button(@click="play()") > button(@click="gotoEnd()") >> #belowControls @@ -66,7 +66,8 @@ div#baseGame( | {{ st.tr["Rules"] }} #movesList MoveList( - v-if="showMoves" + v-if="showMoves != 'none'" + :show="showMoves" :score="game.score" :message="game.scoreMsg" :firstNum="firstMoveNumber" @@ -112,30 +113,38 @@ export default { "game.fenStart": function() { this.re_setVariables(); }, - // Received a new move to play: - "game.moveToPlay": function(move) { - if (move) this.play(move, "receive"); - }, - // ...Or to undo (corr game, move not validated) - "game.moveToUndo": function(move) { - if (move) this.undo(move); - } }, computed: { showMoves: function() { - return this.game.score != "*" || (window.V && V.ShowMoves == "all"); + return this.game.score != "*" + ? "all" + : (this.vr ? this.vr.showMoves : "none"); }, showTurn: function() { - return this.game.score == '*' && window.V && V.ShowMoves != "all"; + return ( + this.game.score == '*' && + this.vr && + (this.vr.showMoves != "all" || !this.vr.canFlip) + ); }, turn: function() { - return this.st.tr[(this.vr.turn == 'w' ? "White" : "Black") + " to move"]; + if (!this.vr) + return ""; + if (this.vr.showMoves != "all") + return this.st.tr[(this.vr.turn == 'w' ? "White" : "Black") + " to move"] + // Cannot flip: racing king or circular chess + return this.vr.movesCount == 0 && this.game.mycolor == "w" + ? this.st.tr["It's your turn!"] + : ""; }, canAnalyze: function() { - return this.game.mode != "analyze" && window.V && V.CanAnalyze; + return this.game.mode != "analyze" && this.vr && this.vr.canAnalyze; + }, + canFlip: function() { + return this.vr && this.vr.canFlip; }, allowDownloadPGN: function() { - return this.game.score != "*" || (window.V && V.ShowMoves == "all"); + return this.game.score != "*" || (this.vr && this.vr.showMoves == "all"); } }, created: function() { @@ -225,26 +234,21 @@ export default { }, re_setVariables: function() { this.endgameMessage = ""; - this.orientation = this.game.mycolor || "w"; //default orientation for observed games + // "w": default orientation for observed games + this.orientation = this.game.mycolor || "w"; this.moves = JSON.parse(JSON.stringify(this.game.moves || [])); - // Post-processing: decorate each move with color + current FEN: - // (to be able to jump to any position quickly) - let vr_tmp = new V(this.game.fenStart); //vr is already at end of game - this.firstMoveNumber = Math.floor( - V.ParseFen(this.game.fenStart).movesCount / 2 - ); + // Post-processing: decorate each move with color, notation and FEN + let vr_tmp = new V(this.game.fenStart); + const parsedFen = V.ParseFen(this.game.fenStart); + const firstMoveColor = parsedFen.turn; + this.firstMoveNumber = Math.floor(parsedFen.movesCount / 2); this.moves.forEach(move => { - // NOTE: this is doing manually what play() function below achieve, - // but in a lighter "fast-forward" way move.color = vr_tmp.turn; move.notation = vr_tmp.getNotation(move); vr_tmp.play(move); move.fen = vr_tmp.getFen(); }); - if ( - (this.moves.length > 0 && this.moves[0].color == "b") || - (this.moves.length == 0 && vr_tmp.turn == "b") - ) { + if (firstMoveColor == "b") { // 'end' is required for Board component to check lastMove for e.p. this.moves.unshift({ color: "w", @@ -406,6 +410,7 @@ export default { this.vr.re_init(this.moves[index].fen); this.cursor = index; this.lastMove = this.moves[index]; + this.incheck = this.vr.getCheckSquares(this.vr.turn); }, gotoBegin: function() { if (this.cursor == -1) return; @@ -417,6 +422,7 @@ export default { this.cursor = -1; this.lastMove = null; } + this.incheck = this.vr.getCheckSquares(this.vr.turn); }, gotoEnd: function() { if (this.cursor == this.moves.length - 1) return; @@ -450,6 +456,7 @@ export default { #controls margin: 0 auto + text-align: center button display: inline-block width: 20%