Step toward a one-page application
[vchess.git] / public / javascripts / base_rules.js
index 718261d..9f6ec9e 100644 (file)
@@ -221,7 +221,7 @@ class ChessRules
        // On which squares is color under check ? (for interface)
        getCheckSquares(color)
        {
-               return this.isAttacked(this.kingPos[color], [this.getOppCol(color)])
+               return this.isAttacked(this.kingPos[color], [V.GetOppCol(color)])
                        ? [JSON.parse(JSON.stringify(this.kingPos[color]))] //need to duplicate!
                        : [];
        }
@@ -280,7 +280,7 @@ class ChessRules
                return pieces["b"].join("") +
                        "/pppppppp/8/8/8/8/PPPPPPPP/" +
                        pieces["w"].join("").toUpperCase() +
-                       " w 1111 -"; //add turn + flags + enpassant
+                       " w 1111 -"; //add turn + flags + enpassant
        }
 
        // "Parse" FEN: just return untransformed string data
@@ -734,7 +734,7 @@ class ChessRules
                        return []; //x isn't first rank, or king has moved (shortcut)
 
                // Castling ?
-               const oppCol = this.getOppCol(c);
+               const oppCol = V.GetOppCol(c);
                let moves = [];
                let i = 0;
                const finalSquares = [ [2,3], [V.size.y-2,V.size.y-3] ]; //king, then rook
@@ -824,7 +824,7 @@ class ChessRules
        getAllValidMoves()
        {
                const color = this.turn;
-               const oppCol = this.getOppCol(color);
+               const oppCol = V.GetOppCol(color);
                let potentialMoves = [];
                for (let i=0; i<V.size.x; i++)
                {
@@ -845,7 +845,7 @@ class ChessRules
        atLeastOneMove()
        {
                const color = this.turn;
-               const oppCol = this.getOppCol(color);
+               const oppCol = V.GetOppCol(color);
                for (let i=0; i<V.size.x; i++)
                {
                        for (let j=0; j<V.size.y; j++)
@@ -956,7 +956,7 @@ class ChessRules
        // Is color under check after his move ?
        underCheck(color)
        {
-               return this.isAttacked(this.kingPos[color], [this.getOppCol(color)]);
+               return this.isAttacked(this.kingPos[color], [V.GetOppCol(color)]);
        }
 
        /////////////////
@@ -999,7 +999,7 @@ class ChessRules
                if (c == "c") //if (!["w","b"].includes(c))
                {
                        // 'c = move.vanish[0].c' doesn't work for Checkered
-                       c = this.getOppCol(this.turn);
+                       c = V.GetOppCol(this.turn);
                }
                const firstRank = (c == "w" ? V.size.x-1 : 0);
 
@@ -1015,7 +1015,7 @@ class ChessRules
                if (V.HasFlags)
                {
                        // Update castling flags if rooks are moved
-                       const oppCol = this.getOppCol(c);
+                       const oppCol = V.GetOppCol(c);
                        const oppFirstRank = (V.size.x-1) - firstRank;
                        if (move.start.x == firstRank //our rook moves?
                                && this.INIT_COL_ROOK[c].includes(move.start.y))
@@ -1053,8 +1053,10 @@ class ChessRules
                        move.flags = JSON.stringify(this.aggregateFlags()); //save flags (for undo)
                if (V.HasEnpassant)
                        this.epSquares.push( this.getEpSquare(move) );
+               if (!move.color)
+                       move.color = this.turn; //for interface
                V.PlayOnBoard(this.board, move);
-               this.turn = this.getOppCol(this.turn);
+               this.turn = V.GetOppCol(this.turn);
                this.movesCount++;
                this.updateVariables(move);
        }
@@ -1066,7 +1068,7 @@ class ChessRules
                if (V.HasFlags)
                        this.disaggregateFlags(JSON.parse(move.flags));
                V.UndoOnBoard(this.board, move);
-               this.turn = this.getOppCol(this.turn);
+               this.turn = V.GetOppCol(this.turn);
                this.movesCount--;
                this.unupdateVariables(move);
 
@@ -1088,7 +1090,7 @@ class ChessRules
                // Game over
                const color = this.turn;
                // No valid move: stalemate or checkmate?
-               if (!this.isAttacked(this.kingPos[color], [this.getOppCol(color)]))
+               if (!this.isAttacked(this.kingPos[color], [V.GetOppCol(color)]))
                        return "1/2";
                // OK, checkmate
                return (color == "w" ? "0-1" : "1-0");
@@ -1314,42 +1316,4 @@ class ChessRules
                                (move.vanish.length > move.appear.length ? "x" : "") + finalSquare;
                }
        }
-
-       // Complete the usual notation, may be required for de-ambiguification
-       getLongNotation(move)
-       {
-               // Not encoding move. But short+long is enough
-               return V.CoordsToSquare(move.start) + V.CoordsToSquare(move.end);
-       }
-
-       // The score is already computed when calling this function
-       getPGN(moves, mycolor, score, fenStart, mode)
-       {
-               let pgn = "";
-               pgn += '[Site "vchess.club"]\n';
-               const opponent = mode=="human" ? "Anonymous" : "Computer";
-               pgn += '[Variant "' + variant + '"]\n';
-               pgn += '[Date "' + getDate(new Date()) + '"]\n';
-               // TODO: later when users are a bit less anonymous, use better names
-               const whiteName = ["human","computer"].includes(mode)
-                       ? (mycolor=='w'?'Myself':opponent)
-                       : "analyze";
-               const blackName = ["human","computer"].includes(mode)
-                       ? (mycolor=='b'?'Myself':opponent)
-                       : "analyze";
-               pgn += '[White "' + whiteName + '"]\n';
-               pgn += '[Black "' + blackName + '"]\n';
-               pgn += '[Fen "' + fenStart + '"]\n';
-               pgn += '[Result "' + score + '"]\n\n';
-
-               // Print moves
-               for (let i=0; i<moves.length; i++)
-               {
-                       if (i % 2 == 0)
-                               pgn += ((i/2)+1) + ".";
-                       pgn += moves[i].notation + " ";
-               }
-
-               return pgn + "\n";
-       }
 }