Some code cleaning + clarifying (TODO: work on variables names)
[vchess.git] / public / javascripts / variants / Magnetic.js
index e126f1c..7d9d511 100644 (file)
@@ -112,7 +112,8 @@ class MagneticRules extends ChessRules
                // Scan move for pawn (max 1) on 8th rank
                for (let i=1; i<move.appear.length; i++)
                {
-                       if (move.appear[i].p==V.PAWN && move.appear[i].c==color && move.appear[i].x==lastRank)
+                       if (move.appear[i].p==V.PAWN && move.appear[i].c==color
+                               && move.appear[i].x==lastRank)
                        {
                                move.appear[i].p = V.ROOK;
                                moves.push(move);
@@ -173,6 +174,16 @@ class MagneticRules extends ChessRules
                        this.kingPos[oppCol] = [-1,-1];
                        this.castleFlags[oppCol] = [false,false];
                }
+               // Did we magnetically move our (init) rooks or opponents' ones ?
+               const firstRank = (c == "w" ? 7 : 0);
+               const oppFirstRank = 7 - firstRank;
+               const oppCol = this.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;
+                       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;
+               });
        }
 
        unupdateVariables(move)
@@ -216,19 +227,4 @@ class MagneticRules extends ChessRules
        static get THRESHOLD_MATE() {
                return 500; //checkmates evals may be slightly below 1000
        }
-
-       getComputerMove()
-       {
-               let moves1 = this.getAllValidMoves();
-               // Can I mate in 1 ?
-               for (let i of _.shuffle(_.range(moves1.length)))
-               {
-                       this.play(moves1[i]);
-                       const finish = (Math.abs(this.evalPosition()) >= VariantRules.THRESHOLD_MATE);
-                       this.undo(moves1[i]);
-                       if (finish)
-                               return moves1[i];
-               }
-               return super.getComputerMove(moves1);
-       }
 }