orientation: "w",
score: "*", //'*' means 'unfinished'
moves: [],
- // TODO: later, use subCursor to navigate intra-multimoves?
cursor: -1, //index of the move just played
lastMove: null,
firstMoveNumber: 0, //for printing
incheck: [], //for Board
- inMultimove: false
+ inMultimove: false,
+ inPlay: false,
+ stackToPlay: []
};
},
watch: {
// Animate an elementary move
animateMove: function(move, callback) {
let startSquare = document.getElementById(getSquareId(move.start));
+ if (!startSquare) return; //shouldn't happen but...
let endSquare = document.getElementById(getSquareId(move.end));
let rectStart = startSquare.getBoundingClientRect();
let rectEnd = endSquare.getBoundingClientRect();
let movingPiece = document.querySelector(
"#" + getSquareId(move.start) + " > img.piece"
);
+ // For some unknown reasons Opera get "movingPiece == null" error
+ // TOOO: is it calling 'animate()' twice ? One extra time ?
+ if (!movingPiece) return;
// HACK for animation (with positive translate, image slides "under background")
// Possible improvement: just alter squares on the piece's way...
const squares = document.getElementsByClassName("board");
}
},
// "light": if gotoMove() or gotoEnd()
- // data: some custom data (addTime) to be re-emitted
- play: function(move, received, light, data) {
+ play: function(move, received, light, noemit) {
+ if (!!noemit) {
+ if (this.inPlay) {
+ // Received moves in observed games can arrive too fast:
+ this.stackToPlay.unshift(move);
+ return;
+ }
+ this.inPlay = true;
+ }
const navigate = !move;
const playSubmove = (smove) => {
if (!navigate) smove.notation = this.vr.getNotation(smove);
}
if (!navigate && this.game.mode != "analyze") {
const L = this.moves.length;
- // Post-processing (e.g. computer play)
- this.$emit("newmove", this.moves[L-1], data);
+ if (!noemit)
+ // Post-processing (e.g. computer play)
+ this.$emit("newmove", this.moves[L-1]);
+ else {
+ this.inPlay = false;
+ if (this.stackToPlay.length > 0)
+ // Move(s) arrived in-between
+ this.play(this.stackToPlay.pop(), received, light, noemit);
+ }
}
}
};