import { ChessRules, PiPo } from "@/base_rules";
-export const VariantRules = class MagneticRules extends ChessRules {
+export class MagneticRules extends ChessRules {
static get HasEnpassant() {
return false;
}
cmove.appear[i].p = piece;
moves.push(cmove);
}
- // Swap appear[i] and appear[0] for moves presentation (TODO: this is awkward)
+ // Swap appear[i] and appear[0] for moves presentation
+ // (TODO: this is awkward)
moves.forEach(m => {
let tmp = m.appear[0];
m.appear[0] = m.appear[i];
return [];
}
- updateVariables(move) {
- super.updateVariables(move);
+ postPlay(move) {
+ super.postPlay(move);
const c = move.vanish[0].c;
if (move.vanish.length >= 2 && move.vanish[1].p == V.KING) {
// We took opponent king !
const oppCol = V.GetOppCol(c);
this.kingPos[oppCol] = [-1, -1];
- this.castleFlags[oppCol] = [false, false];
+ this.castleFlags[oppCol] = [8, 8];
}
// Did we magnetically move our (init) rooks or opponents' ones ?
const firstRank = c == "w" ? 7 : 0;
const oppFirstRank = 7 - firstRank;
const oppCol = V.GetOppCol(c);
move.vanish.forEach(psq => {
- if (psq.x == firstRank && this.INIT_COL_ROOK[c].includes(psq.y))
- this.castleFlags[c][psq.y == this.INIT_COL_ROOK[c][0] ? 0 : 1] = false;
+ if (
+ psq.x == firstRank &&
+ this.castleFlags[c].includes(psq.y)
+ ) {
+ this.castleFlags[c][psq.y == this.castleFlags[c][0] ? 0 : 1] = 8;
+ }
else if (
psq.x == oppFirstRank &&
- this.INIT_COL_ROOK[oppCol].includes(psq.y)
- )
- this.castleFlags[oppCol][
- psq.y == this.INIT_COL_ROOK[oppCol][0] ? 0 : 1
- ] = false;
+ this.castleFlags[oppCol].includes(psq.y)
+ ) {
+ const flagIdx = (psq.y == this.castleFlags[oppCol][0] ? 0 : 1);
+ this.castleFlags[oppCol][flagIdx] = 8;
+ }
});
}
- unupdateVariables(move) {
- super.unupdateVariables(move);
+ postUndo(move) {
+ super.postUndo(move);
const c = move.vanish[0].c;
const oppCol = V.GetOppCol(c);
if (this.kingPos[oppCol][0] < 0) {
// King disappeared
return color == "w" ? "0-1" : "1-0";
if (this.atLeastOneMove())
- // game not over
+ // Game not over
return "*";
return "1/2"; //no moves but kings still there
}