X-Git-Url: https://git.auder.net/?p=vchess.git;a=blobdiff_plain;f=client%2Fsrc%2Fcomponents%2FComputerGame.vue;h=f611167da0896cab35010f7a4fc7aa27a51f4638;hp=83b4e023af99c4a164e1560c9cdd435f5865d11c;hb=bc0b9205e41c5db0552e4ccf060b945342e36ed0;hpb=5aa14a21484cf36838b5541afe2ee76b6d5c274b diff --git a/client/src/components/ComputerGame.vue b/client/src/components/ComputerGame.vue index 83b4e023..f611167d 100644 --- a/client/src/components/ComputerGame.vue +++ b/client/src/components/ComputerGame.vue @@ -43,8 +43,12 @@ export default { let self = this; setTimeout(() => { if (this.currentUrl != document.location.href) return; //page change - // NOTE: BaseGame::play() will trigger processMove() here self.$refs["basegame"].play(compMove, "received"); + const animationLength = + // 250 = length of animation, 500 = delay between sub-moves + // TODO: a callback would be cleaner. + 250 + (Array.isArray(compMove) ? (compMove.length - 1) * 750 : 0); + setTimeout(() => self.processMove(compMove), animationLength); self.compThink = false; if (self.game.score != "*") // User action @@ -65,15 +69,16 @@ export default { if (this.gameInfo.mode == "versus") CompgameStorage.add(game); } - if (this.gameInfo.mode == "versus" && !game.mycolor) - game.mycolor = Math.random() < 0.5 ? "w" : "b"; + if (!game.mycolor) game.mycolor = (Math.random() < 0.5 ? "w" : "b"); this.compWorker.postMessage(["init", game.fen]); this.vr = new V(game.fen); game.players = [{ name: "Myself" }, { name: "Computer" }]; - if (game.myColor == "b") game.players = game.players.reverse(); + if (game.mycolor == "b") game.players = game.players.reverse(); game.score = "*"; //finished games are removed + game.mode = this.gameInfo.mode; this.currentUrl = document.location.href; //to avoid playing outside page this.game = game; + this.$refs["basegame"].re_setVariables(game); this.compWorker.postMessage(["init", game.fen]); if (this.gameInfo.mode == "auto" || game.mycolor != this.vr.turn) this.playComputerMove(); @@ -88,10 +93,14 @@ export default { processMove: function(move, scoreObj) { playMove(move, this.vr); // This move could have ended the game: + if (!scoreObj) scoreObj = { score: this.vr.getCurrentScore() }; if (scoreObj.score != "*") { this.gameOver(scoreObj.score); return; } + if (this.game.score != "*") + // The game already ended, probably because of a user action + return; // Send the move to web worker (including his own moves) this.compWorker.postMessage(["newmove", move]); if (this.gameInfo.mode == "auto" || this.vr.turn != this.game.mycolor)