});
}
+// TODO: pawnfall + Cannibal issues
+
pawnPostProcess(moves, color, oppCol) {
let moreMoves = [];
const lastRank = (color == "w" ? 0 : this.size.x - 1);
);
if (!promotionOk)
return; //nothing to do
- if (!this.options["pawnfall"]) {
+ if (this.options["pawnfall"]) {
+ m.appear.shift();
+ m.pawnfall = true; //required in prePlay() /// ????????????
+ return;
+ }
+ //if (!this.options["pawnfall"]) { --> OK
if (
this.options["cannibal"] &&
this.board[x2][y2] != "" &&
}
else
finalPieces = this.pawnPromotions;
- }
+ //}
m.appear[0].p = finalPieces[0];
if (initPiece == "!") //cannibal king-pawn
m.appear[0].p = C.CannibalKingCode[finalPieces[0]];
}
let newMove = this.getBasicMove([x1, y1], [x2, y2], tr);
if (this.options["pawnfall"]) {
- newMove.appear.shift();
- newMove.pawnfall = true; //required in prePlay()
}
moreMoves.push(newMove);
}
});
}
+
+// TODO: englober + de cas ici...
+ // + generique start/end board or reserve
+ // + bien séparer les options... ?
+
prePlay(move) {
if (
typeof move.start.x == "number" &&
return;
}
let movingPiece = this.getDomPiece(move.start.x, move.start.y);
+ if (!movingPiece) { //TODO this shouldn't be required
+ callback();
+ return;
+ }
const initTransform = movingPiece.style.transform;
let chessboard =
document.getElementById(this.containerId).querySelector(".chessboard");
const [i2, j2] = move.segments[index][1];
const dep = this.getPixelPosition(i1, j1, r);
const arr = this.getPixelPosition(i2, j2, r);
- // Start from i1, j1:
- movingPiece.style.transform =
- `translate(${dep[0] - ix}px, ${dep[1] - iy}px)`;
- movingPiece.style.transitionDuration = "0s";
const distance =
Math.sqrt((arr[0] - dep[0]) ** 2 + (arr[1] - dep[1]) ** 2);
const duration = 0.2 + (distance / maxDist) * 0.3;
- movingPiece.style.transform =
- `translate(${arr[0] - dep[0]}px, ${arr[1] - dep[1]}px)`;
+ movingPiece.style.transform = `translate(${arr[0]}px, ${arr[1]}px)`;
movingPiece.style.transitionDuration = duration + "s";
setTimeout(cb, duration * 1000);
};
- if (!move.segments)
- move.segments = [[move.start.x, move.start.y], [move.end.x, move.end.y]];
+ if (!move.segments) {
+ move.segments = [
+ [[move.start.x, move.start.y], [move.end.x, move.end.y]]
+ ];
+ }
let index = 0;
- animateSegment(index, () => {
+ const animateSegmentCallback = () => {
if (index < move.segments.length)
- animateSegment(++index);
+ animateSegment(index++, animateSegmentCallback);
else {
if (move.drag)
movingPiece.remove();
}
callback();
}
- });
+ };
+ animateSegmentCallback();
}
playReceivedMove(moves, callback) {