move.fen = this.vr.getFen();
if (this.st.settings.sound == 2)
new Audio("/sounds/move.mp3").play().catch(err => {});
- // Send the move to web worker (including his own moves) //TODO: doesn't work here --> need to send an event instead
- this.compWorker.postMessage(["newmove",move]);
if (!navigate && (this.score == "*" || this.analyze))
{
// Stack move on movesList at current cursor
else //just show score on screen (allow undo)
this.showScoreMsg(score);
}
- // subTurn condition for Marseille (and Avalanche) rules
- else if ((this.mode == "computer" && (!this.vr.subTurn || this.vr.subTurn <= 1))
- && (this.subMode == "auto" || this.vr.turn != this.mycolor))
- {
- this.playComputerMove();
- }
- // https://vuejs.org/v2/guide/list.html#Caveats (also for undo)
- //if (navigate)
- // this.$children[0].$forceUpdate(); //TODO!?
+ this.$emit("newmove", move); //post-processing (e.g. computer play)
},
undo: function(move) {
let navigate = !move;
if (this.st.settings.sound == 2)
new Audio("/sounds/undo.mp3").play().catch(err => {});
this.incheck = this.vr.getCheckSquares(this.vr.turn);
- if (navigate)
- this.$children[0].$forceUpdate(); //TODO!?
- else if (this.analyze) //TODO: can this happen?
+ if (this.analyze) //TODO: can this happen?
this.moves.pop();
},
gotoMove: function(index) {
.row
.col-sm-12.col-md-10.col-md-offset-1.col-lg-8.col-lg-offset-2
BaseGame(:vname="vname" :analyze="analyze"
- :vr="vr" :fen-start="fenStart" :players="players" :mycolor="mycolor")
+ :vr="vr" :fen-start="fenStart" :players="players" :mycolor="mycolor"
+ ref="basegame" @newmove="processMove")
</template>
<script>
// Small delay for the bot to appear "more human"
const delay = Math.max(500-(Date.now()-this.timeStart), 0);
setTimeout(() => {
- const animate = this.vname != "Dark";
- this.play(compMove[0], animate);
+ const animate = (this.vname != "Dark");
+ this.$refs.basegame.play(compMove[0], animate);
if (compMove.length == 2)
- setTimeout( () => { this.play(compMove[1], animate); }, 750);
+ setTimeout( () => { this.$refs.basegame.play(compMove[1], animate); }, 750);
else //250 == length of animation (TODO: should be a constant somewhere)
setTimeout( () => this.lockCompThink = false, 250);
}, delay);
this.timeStart = Date.now();
this.compWorker.postMessage(["askmove"]);
},
+ // TODO: do not process if game is over (check score ?)
+ processMove: function(move) {
+ // Send the move to web worker (including his own moves)
+ this.compWorker.postMessage(["newmove",move]);
+ // subTurn condition for Marseille (and Avalanche) rules
+ if ((!this.vr.subTurn || this.vr.subTurn <= 1)
+ && (this.mode == "auto" || this.vr.turn != this.mycolor))
+ {
+ this.playComputerMove();
+ }
+ },
},
};
</script>