incheckSq[sq[0]][sq[1]] = true;
});
- const lm = this.lastMove;
+ let lm = this.lastMove;
+ // Precompute lastMove highlighting squares
+ const lmHighlights = {};
+ if (!!lm) {
+ if (!Array.isArray(lm)) lm = [lm];
+ lm.forEach(m => {
+ if (V.OnBoard(m.start.x, m.start.y))
+ lmHighlights[m.start.x + sizeX * m.start.y] = true;
+ if (V.OnBoard(m.end.x, m.end.y))
+ lmHighlights[m.end.x + sizeX * m.end.y] = true;
+ });
+ }
const showLight = (
this.settings.highlight &&
["all","highlight"].includes(V.ShowMoves)
);
};
const inHighlight = (x, y) => {
- return showLight && !!lm && (
- (lm.end.x == x && lm.end.y == y) ||
- (lm.start.x == x && lm.start.y == y));
+ return showLight && !!lmHighlights[x + sizeX * y];
};
const inShadow = (x, y) => {
return (
};
},
mousedown: function(e) {
- if (!([1, 3].includes(e.which))) return;
e.preventDefault();
- if (e.which != 3)
+ if (!this.mobileBrowser && e.which != 3)
// Cancel current drawing and circles, if any
this.cancelResetArrows();
- if (e.which == 1 || this.mobileBrowser) {
+ if (this.mobileBrowser || e.which == 1) {
// Mouse left button
if (!this.start) {
// NOTE: classList[0] is enough: 'piece' is the first assigned class
} else {
this.processMoveAttempt(e);
}
- } else {
- // e.which == 3 : mouse right button
+ } else if (e.which == 3) {
+ // Mouse right button
let elem = e.target;
// Next loop because of potential marks
while (elem.tagName == "IMG") elem = elem.parentNode;
}
},
mouseup: function(e) {
- if (!([1, 3].includes(e.which))) return;
e.preventDefault();
- if (e.which == 1) {
+ if (this.mobileBrowser || e.which == 1) {
if (!this.selectedPiece) return;
// Drag'n drop. Selected piece is no longer needed:
this.selectedPiece.parentNode.removeChild(this.selectedPiece);
delete this.selectedPiece;
this.selectedPiece = null;
this.processMoveAttempt(e);
- } else {
- // Mouse right button (e.which == 3)
+ } else if (e.which == 3) {
+ // Mouse right button
this.movingArrow = { x: -1, y: -1 };
this.processArrowAttempt(e);
}
},
+ // Called by BaseGame after partially undoing multi-moves:
+ resetCurrentAttempt: function() {
+ this.possibleMoves = [];
+ this.start = null;
+ this.click = "";
+ this.selectedPiece = null;
+ },
processMoveAttempt: function(e) {
// Obtain the move from start and end squares
const [offsetX, offsetY] =
</script>
<style lang="sass" scoped>
+@import "@/styles/_board_squares_img.sass";
+
// NOTE: no variants with reserve of size != 8
.game.reserve-div
margin-bottom: 18px
background-color: #9f9fff
.dark-square.chesstempo.highlight-dark
background-color: #557fff
-
</style>