X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=public%2Fjavascripts%2Fcomponents%2Fgame.js;h=186c027c698199d4421e1da186f21701c06ef47b;hb=b5fb8e693dc82037eec2617a7dc49d838a9a8441;hp=9d7bb1fbf7da57e47621d5c34b55e713665648fd;hpb=1a788978e3682ab54b77af3edfe38e0b371edbc4;p=vchess.git diff --git a/public/javascripts/components/game.js b/public/javascripts/components/game.js index 9d7bb1fb..186c027c 100644 --- a/public/javascripts/components/game.js +++ b/public/javascripts/components/game.js @@ -326,7 +326,7 @@ Vue.component('my-game', { ] ); } - if (this.mode == "friend") + if (["friend","problem"].includes(this.mode)) { actionArray = actionArray.concat( [ @@ -778,7 +778,7 @@ Vue.component('my-game', { h('h3', { domProps: { innerHTML: "Show solution" }, - on: { click: "toggleShowSolution" } + on: { click: this.toggleShowSolution }, } ), h('p', @@ -969,9 +969,10 @@ Vue.component('my-game', { methods: { toggleShowSolution: function() { let problemSolution = document.getElementById("problem-solution"); - problemSolution.style.display = problemSolution.style.display == "none" - ? "block" - : "none"; + problemSolution.style.display = + !problemSolution.style.display || problemSolution.style.display == "none" + ? "block" + : "none"; }, download: function() { let content = document.getElementById("pgn-game").innerHTML; @@ -1142,7 +1143,7 @@ Vue.component('my-game', { this.fenStart = localStorage.getItem(prefix+"fenStart"); } else - this.fenStart = fen; + this.fenStart = V.ParseFen(fen).position; //this is enough if (mode=="human") { // Opponent found! @@ -1162,15 +1163,17 @@ Vue.component('my-game', { { this.mycolor = Math.random() < 0.5 ? 'w' : 'b'; if (this.mycolor == 'b') - this.playComputerMove(); + setTimeout(this.playComputerMove, 100); //small delay for drawing board } //else: against a (IRL) friend or problem solving: nothing more to do }, playComputerMove: function() { const timeStart = Date.now(); + // TODO: next call asynchronous (avoid freezing interface while computer "think"). + // This would also allow to remove some artificial setTimeouts const compMove = this.vr.getComputerMove(); // (first move) HACK: avoid selecting elements before they appear on page: - const delay = Math.max(500-(Date.now()-timeStart), 0); + const delay = Math.max(250-(Date.now()-timeStart), 0); setTimeout(() => { if (this.mode == "computer") //Warning: mode could have changed! this.play(compMove, "animate") @@ -1360,7 +1363,7 @@ Vue.component('my-game', { } } if (this.mode == "computer" && this.vr.turn != this.mycolor) - this.playComputerMove; + setTimeout(this.playComputerMove, 250); //small delay for animation }, undo: function() { // Navigate after game is over @@ -1375,7 +1378,18 @@ Vue.component('my-game', { undoInGame: function() { const lm = this.vr.lastMove; if (!!lm) + { this.vr.undo(lm); + const lmBefore = this.vr.lastMove; + if (!!lmBefore) + { + this.vr.undo(lmBefore); + this.incheck = this.vr.getCheckSquares(lmBefore); + this.vr.play(lmBefore, "ingame"); + } + else + this.incheck = []; + } }, }, })