X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fcomponents%2FBaseGame.vue;h=442579d0f92c2a986c56717230ee0f27dac55b84;hb=b988c726df078aa456bd47709f6eee0f73dc5abd;hp=68fa83a2bf3c220795ff71549ebd6577a6e43cb1;hpb=9d54ab8900b69876c3249b4ed1bfa355dccb7f97;p=vchess.git diff --git a/client/src/components/BaseGame.vue b/client/src/components/BaseGame.vue index 68fa83a2..442579d0 100644 --- a/client/src/components/BaseGame.vue +++ b/client/src/components/BaseGame.vue @@ -6,6 +6,7 @@ .card.smallpad.small-modal.text-center label.modal-close(for="modalEog") h3#eogMessage.section {{ endgameMessage }} + // TODO: or "BoardHex" if this.game.vname in "Hexagonal..." Board(:vr="vr" :last-move="lastMove" :analyze="game.mode=='analyze'" :user-color="game.mycolor" :orientation="orientation" :vname="game.vname" @play-move="play") @@ -84,25 +85,6 @@ export default { this.cursor = L-1; this.lastMove = (L > 0 ? this.moves[L-1] : null); }, - setEndgameMessage: function(score) { - let eogMessage = "Undefined"; - switch (score) - { - case "1-0": - eogMessage = translations["White win"]; - break; - case "0-1": - eogMessage = translations["Black win"]; - break; - case "1/2": - eogMessage = translations["Draw"]; - break; - case "?": - eogMessage = "Unfinished"; - break; - } - this.endgameMessage = eogMessage; - }, download: function() { const content = this.getPgn(); // Prepare and trigger download link @@ -136,15 +118,36 @@ export default { } return pgn + "\n"; }, - showScoreMsg: function(score) { - this.setEndgameMessage(score); + getScoreMessage: function(score) { + let eogMessage = "Undefined"; + switch (score) + { + case "1-0": + eogMessage = this.st.tr["White win"]; + break; + case "0-1": + eogMessage = this.st.tr["Black win"]; + break; + case "1/2": + eogMessage = this.st.tr["Draw"]; + break; + case "?": + eogMessage = this.st.tr["Unfinished"]; + break; + } + return eogMessage; + }, + showEndgameMsg: function(message) { + this.endgameMessage = message; let modalBox = document.getElementById("modalEog"); modalBox.checked = true; setTimeout(() => { modalBox.checked = false; }, 2000); }, - endGame: function(score) { + endGame: function(score, message) { this.score = score; - this.showScoreMsg(score); + if (!message) + message = this.getScoreMessage(score); + this.showEndgameMsg(score + " . " + message); this.$emit("gameover", score); }, animateMove: function(move) { @@ -175,11 +178,11 @@ export default { this.play(move); }, 250); }, - play: function(move, programmatic) { + play: function(move, receive, noanimate) { const navigate = !move; // Forbid playing outside analyze mode when cursor isn't at moves.length-1 // (except if we receive opponent's move, human or computer) - if (!navigate && !this.analyze && !programmatic + if (!navigate && !this.analyze && !receive && this.cursor < this.moves.length-1) { return; @@ -190,17 +193,17 @@ export default { return; //no more moves move = this.moves[this.cursor+1]; } - else - { - move.color = this.vr.turn; - move.notation = this.vr.getNotation(move); - } - if (!!programmatic) //computer or (remote) human opponent + if (!!receive && !noanimate) //opponent move, variant != "Dark" { if (this.cursor < this.moves.length-1) this.gotoEnd(); //required to play the move return this.animateMove(move); } + if (!navigate) + { + move.color = this.vr.turn; + move.notation = this.vr.getNotation(move); + } // Not programmatic, or animation is over this.vr.play(move); this.cursor++; @@ -219,15 +222,19 @@ export default { this.moves = this.moves.slice(0,this.cursor).concat([move]); } } - // Is opponent in check? + // Is opponent in check? (TODO: generalize, find all check squares) this.incheck = this.vr.getCheckSquares(this.vr.turn); const score = this.vr.getCurrentScore(); - if (score != "*") + if (score != "*") //TODO: generalize score for 3 or 4 players { if (!this.analyze) this.endGame(score); - else //just show score on screen (allow undo) - this.showScoreMsg(score); + else + { + // Just show score on screen (allow undo) + const message = this.getScoreMessage(score); + this.showEndgameMsg(score + " . " + message); + } } if (!this.analyze) this.$emit("newmove", move); //post-processing (e.g. computer play)