X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fcomponents%2FBaseGame.vue;h=d60a16ff8488940bad987de794564c3812019a54;hb=57078452549f252460d45e91b84c7eea40dd3e9c;hp=e309c5dfd7437202df69c396bb25f10d033d1186;hpb=6c7cbfedc6ecf2b49f6b1e27a174039e92a36365;p=vchess.git diff --git a/client/src/components/BaseGame.vue b/client/src/components/BaseGame.vue index e309c5df..d60a16ff 100644 --- a/client/src/components/BaseGame.vue +++ b/client/src/components/BaseGame.vue @@ -51,11 +51,12 @@ div#baseGame :firstNum="firstMoveNumber" :moves="moves" :cursor="cursor" + :vname="game.vname" @download="download" @showrules="showRules" @analyze="toggleAnalyze" @goto-move="gotoMove" - @reset-arrows="resetArrows" + @redraw-board="redrawBoard" ) .clearer @@ -121,13 +122,15 @@ export default { // TODO: is it OK to pass "computed" as properties? // Also, some are seemingly not recomputed when vr is initialized. showMoves: function() { - return this.game.score != "*" - ? "all" - : (!!this.vr ? this.vr.showMoves : "none"); + return ( + !!this.game.score && this.game.score != "*" + ? "all" + : (!!this.vr ? this.vr.showMoves : "none") + ); }, showTurn: function() { return ( - this.game.score == '*' && + !!this.game.score && this.game.score == '*' && !!this.vr && ( this.vr.showMoves != "all" || @@ -138,7 +141,7 @@ export default { }, canAnalyze: function() { return ( - this.game.mode != "analyze" && + !!this.game.mode && this.game.mode != "analyze" && !!this.vr && this.vr.canAnalyze ); }, @@ -147,8 +150,8 @@ export default { }, allowDownloadPGN: function() { return ( - this.game.score != "*" || - (!!this.vr && this.vr.showMoves == "all") + (!!this.game.score && this.game.score != "*") || + (!!this.vr && !this.vr.someHiddenMoves) ); } }, @@ -200,9 +203,8 @@ export default { if (e.deltaY < 0) this.undo(); else if (e.deltaY > 0) this.play(); }, - resetArrows: function() { - // TODO: make arrows scale with board, and remove this - this.$refs["board"].cancelResetArrows(); + redrawBoard: function() { + this.$refs["board"].re_setDrawings(); }, showRules: function() { // The button is here only on Game page: @@ -278,12 +280,18 @@ export default { }, toggleAnalyze: function() { // Freeze while choices are shown (and autoplay has priority) - if (this.$refs["board"].choices.length > 0 || this.autoplay) return; + if ( + this.inPlay || + this.$refs["board"].choices.length > 0 || + this.autoplay + ) { + return; + } if (this.mode != "analyze") { // Enter analyze mode: - if (this.inMultimove) this.cancelCurrentMultimove(); this.gameMode = this.mode; //was not 'analyze' this.mode = "analyze"; + if (this.inMultimove) this.cancelCurrentMultimove(); this.gameCursor = this.cursor; this.gameMoves = JSON.parse(JSON.stringify(this.moves)); document.getElementById("analyzeBtn").classList.add("active"); @@ -462,7 +470,7 @@ export default { // To play a received move, cursor must be at the end of the game: this.gotoEnd(); } - // The board may show some the possible moves: (TODO: bad solution) + // The board may show some possible moves: (TODO: bad solution) this.$refs["board"].resetCurrentAttempt(); const playSubmove = (smove) => { smove.notation = this.vr.getNotation(smove); @@ -507,8 +515,9 @@ export default { (function executeMove() { const smove = move[moveIdx++]; // NOTE: condition "smove.start.x >= 0" required for Dynamo, - // because second move may be empty. - if (animate && smove.start.x >= 0) { + // because second move may be empty. noHighlight condition + // is used at least for Chakart. + if (animate && smove.start.x >= 0 && !smove.end.noHighlight) { self.animateMove(smove, () => { playSubmove(smove); if (moveIdx < move.length) setTimeout(executeMove, 500);