From: Benjamin Auder Date: Mon, 3 Feb 2020 04:09:31 +0000 (+0100) Subject: 'update' X-Git-Url: https://git.auder.net/app_dev.php/DESCRIPTION?a=commitdiff_plain;h=0e16cb26f6380f57f1079ece9bdb654243073bde;p=vchess.git 'update' --- diff --git a/client/src/base_rules.js b/client/src/base_rules.js index 8cf86a86..cc8292c4 100644 --- a/client/src/base_rules.js +++ b/client/src/base_rules.js @@ -512,12 +512,6 @@ export const ChessRules = class ChessRules return (color=="w" ? "b" : "w"); } - // Get next color (for compatibility with 3 and 4 players games) - static GetNextCol(color) - { - return V.GetOppCol(color); - } - // Pieces codes (for a clearer code) static get PAWN() { return 'p'; } static get ROOK() { return 'r'; } diff --git a/client/src/components/BaseGame.vue b/client/src/components/BaseGame.vue index 595f9aa3..dd8c5c86 100644 --- a/client/src/components/BaseGame.vue +++ b/client/src/components/BaseGame.vue @@ -11,6 +11,8 @@ div#baseGame(tabindex=-1 @click="() => focusBg()" Board(:vr="vr" :last-move="lastMove" :analyze="game.mode=='analyze'" :user-color="game.mycolor" :orientation="orientation" :vname="game.vname" @play-move="play") + #turnIndicator(v-if="game.vname=='Dark' && game.mode!='analyze'") + | {{ turn }} #controls button(@click="gotoBegin") << button(@click="() => undo()") < @@ -20,8 +22,10 @@ div#baseGame(tabindex=-1 @click="() => focusBg()" #pgnDiv a#download(href="#") button(@click="download") {{ st.tr["Download PGN"] }} - button(v-if="game.mode!='analyze'" @click="analyzePosition") + button(v-if="game.vname!='Dark' && game.mode!='analyze'" + @click="analyzePosition") | {{ st.tr["Analyze"] }} + button(@click="showRules") {{ st.tr["Rules"] }} #movesList MoveList(v-if="showMoves" :score="game.score" :message="game.scoreMsg" :firstNum="firstMoveNumber" :moves="moves" :cursor="cursor" @@ -72,6 +76,15 @@ export default { showMoves: function() { return this.game.vname != "Dark" || this.game.mode=="analyze"; }, + turn: function() { + let color = ""; + const L = this.moves.length; + if (L == 0 || this.moves[L-1].color == "b") + color = "White"; + else //if (this.moves[L-1].color == "w") + color = "Black"; + return color + " turn"; + }, }, created: function() { if (!!this.game.fenStart) @@ -128,6 +141,10 @@ export default { this.play(); } }, + showRules: function() { + //this.$router.push("/variants/" + this.game.vname); + window.open("#/variants/" + this.game.vname, "_blank"); //better + }, re_setVariables: function() { this.endgameMessage = ""; this.orientation = this.game.mycolor || "w"; //default orientation for observed games @@ -158,8 +175,10 @@ export default { analyzePosition: function() { const newUrl = "/analyze/" + this.game.vname + "/?fen=" + this.vr.getFen().replace(/ /g, "_"); - //window.open("#" + newUrl); //to open in a new tab - this.$router.push(newUrl); //better + if (this.game.type == "live") + this.$router.push(newUrl); //open in same tab: against cheating... + else + window.open("#" + newUrl); //open in a new tab: more comfortable }, download: function() { const content = this.getPgn(); @@ -285,7 +304,7 @@ export default { else this.moves = this.moves.slice(0,this.cursor).concat([move]); } - if (!navigate && this.game.mode != "analyze") + if (!navigate && this.game.mode!="analyze") this.$emit("newmove", move); //post-processing (e.g. computer play) // Is opponent in check? this.incheck = this.vr.getCheckSquares(this.vr.turn); @@ -347,7 +366,7 @@ export default { this.gotoMove(this.moves.length-1); }, flip: function() { - this.orientation = V.GetNextCol(this.orientation); + this.orientation = V.GetOppCol(this.orientation); }, }, }; @@ -374,6 +393,8 @@ export default { @media screen and (min-width: 768px) #controls max-width: 400px +#turnIndicator + text-align: center #pgnDiv text-align: center margin-left: auto diff --git a/client/src/components/ComputerGame.vue b/client/src/components/ComputerGame.vue index 78f6eb49..a4a53f65 100644 --- a/client/src/components/ComputerGame.vue +++ b/client/src/components/ComputerGame.vue @@ -113,6 +113,8 @@ export default { this.compWorker.postMessage(["askmove"]); }, processMove: function(move) { + if (this.game.score != "*") + return; // Send the move to web worker (including his own moves) this.compWorker.postMessage(["newmove",move]); // subTurn condition for Marseille (and Avalanche) rules diff --git a/client/src/views/Analyze.vue b/client/src/views/Analyze.vue index d7e812f4..0c23a28b 100644 --- a/client/src/views/Analyze.vue +++ b/client/src/views/Analyze.vue @@ -51,7 +51,13 @@ export default { created: function() { this.gameRef.fen = this.$route.query["fen"].replace(/_/g, " "); this.gameRef.vname = this.$route.params["vname"]; - this.initialize(this.loadGame); + if (this.gameRef.vname != "Dark") + this.initialize(this.loadGame); + else + { + alert("Please, analyze in Dark mode makes no sense ~_^"); + history.back(); //or this.$router.go(-1) + } }, methods: { initialize: async function(callback) { @@ -61,6 +67,7 @@ export default { callback(); }, loadGame: function() { + // NOTE: no need to set score (~unused) this.game.vname = this.gameRef.vname; this.game.fen = this.gameRef.fen; this.curFen = this.game.fen; diff --git a/client/src/views/Game.vue b/client/src/views/Game.vue index e6cb1e70..8f9b946a 100644 --- a/client/src/views/Game.vue +++ b/client/src/views/Game.vue @@ -551,7 +551,8 @@ export default { document.getElementById("chatBtn").style.backgroundColor = "#e2e2e2"; }, finishSendChat: function(chat) { - if (this.game.type == "corr") + // NOTE: anonymous chats in corr games are not stored on server (TODO?) + if (this.game.type == "corr" && this.st.user.id > 0) GameStorage.update(this.gameRef.id, {chat: chat}); }, processChat: function() { diff --git a/client/src/views/Rules.vue b/client/src/views/Rules.vue index 82a4a40f..25416612 100644 --- a/client/src/views/Rules.vue +++ b/client/src/views/Rules.vue @@ -10,7 +10,8 @@ main | Practice button(v-show="gameInProgress" @click="() => stopGame()") | Stop game - button(@click="gotoAnalyze") Analyze + button(v-if="gameInfo.vname!='Dark'" @click="gotoAnalyze") + | {{ st.tr["Analyze"] }} .section-content(v-show="display=='rules'" v-html="content") ComputerGame(v-show="display=='computer'" :game-info="gameInfo" @game-over="stopGame" @game-stopped="gameStopped")