X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fcomponents%2FBaseGame.vue;h=8fcb77f03f8ed71da77624900e07b24c49ef8bde;hb=763a92a4f845e70e42cb5e442126d4033daceec4;hp=595f9aa371c8861aaadcb8af5c90944f63085f28;hpb=41c80bb63b85b2696d3925c10784c3d7bb5d2aa3;p=vchess.git diff --git a/client/src/components/BaseGame.vue b/client/src/components/BaseGame.vue index 595f9aa3..8fcb77f0 100644 --- a/client/src/components/BaseGame.vue +++ b/client/src/components/BaseGame.vue @@ -8,9 +8,11 @@ div#baseGame(tabindex=-1 @click="() => focusBg()" h3#eogMessage.section {{ endgameMessage }} #gameContainer #boardContainer - Board(:vr="vr" :last-move="lastMove" :analyze="game.mode=='analyze'" + Board(:vr="vr" :last-move="lastMove" :analyze="analyze" :user-color="game.mycolor" :orientation="orientation" :vname="game.vname" @play-move="play") + #turnIndicator(v-if="game.vname=='Dark' && game.score=='*'") + | {{ turn }} #controls button(@click="gotoBegin") << button(@click="() => undo()") < @@ -18,10 +20,15 @@ div#baseGame(tabindex=-1 @click="() => focusBg()" button(@click="() => play()") > button(@click="gotoEnd") >> #pgnDiv - a#download(href="#") - button(@click="download") {{ st.tr["Download PGN"] }} - button(v-if="game.mode!='analyze'" @click="analyzePosition") + #downloadDiv(v-if="game.vname!='Dark' || game.score!='*'") + a#download(href="#") + button(@click="download") {{ st.tr["Download PGN"] }} + button(v-if="game.vname!='Dark' && game.mode!='analyze'" + @click="analyzePosition") | {{ st.tr["Analyze"] }} + // NOTE: rather ugly hack to avoid showing twice "rules" link... + button(v-if="!$route.path.match('/variants/')" @click="showRules") + | {{ st.tr["Rules"] }} #movesList MoveList(v-if="showMoves" :score="game.score" :message="game.scoreMsg" :firstNum="firstMoveNumber" :moves="moves" :cursor="cursor" @@ -70,7 +77,21 @@ export default { }, computed: { showMoves: function() { - return this.game.vname != "Dark" || this.game.mode=="analyze"; + return this.game.vname != "Dark" || this.game.score != "*"; + }, + 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"; + }, + analyze: function() { + return this.game.mode=="analyze" || + // From Board viewpoint, a finished Dark game == analyze (TODO: unclear) + (this.game.vname == "Dark" && this.game.score != "*"); }, }, created: function() { @@ -119,7 +140,8 @@ export default { } }, handleScroll: function(e) { - if (this.game.mode == "analyze" || this.game.score != "*") + // NOTE: since game.mode=="analyze" => no score, next condition is enough + if (this.game.score != "*") { e.preventDefault(); if (e.deltaY < 0) @@ -128,6 +150,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 +184,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(); @@ -253,7 +281,7 @@ export default { // Forbid playing outside analyze mode, except if move is received. // Sufficient condition because Board already knows which turn it is. if (!navigate && this.game.mode!="analyze" && !receive - && this.cursor < this.moves.length-1) + && (this.game.score != "*" || this.cursor < this.moves.length-1)) { return; } @@ -285,8 +313,6 @@ export default { else this.moves = this.moves.slice(0,this.cursor).concat([move]); } - 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); const score = this.vr.getCurrentScore(); @@ -298,6 +324,8 @@ export default { else //just show score on screen (allow undo) this.showEndgameMsg(score + " . " + message); } + if (!navigate && this.game.mode!="analyze") + this.$emit("newmove", move); //post-processing (e.g. computer play) }; if (!!receive && this.game.vname != "Dark") this.animateMove(move, doPlayMove); @@ -347,7 +375,7 @@ export default { this.gotoMove(this.moves.length-1); }, flip: function() { - this.orientation = V.GetNextCol(this.orientation); + this.orientation = V.GetOppCol(this.orientation); }, }, }; @@ -356,11 +384,16 @@ export default {