X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=public%2Fjavascripts%2Fbase_rules.js;h=f08c272bb8839c9496c7f878af43b03284f1bd5f;hb=d3334c3a9ee5edc9412d2c95adfc752b72057168;hp=3a0f1c6332d1c4d4b5b2dc48c5a4c96d0bae3b47;hpb=f3802fcd1279e5d07cdff1341fc5e17c5296dc9c;p=vchess.git diff --git a/public/javascripts/base_rules.js b/public/javascripts/base_rules.js index 3a0f1c63..f08c272b 100644 --- a/public/javascripts/base_rules.js +++ b/public/javascripts/base_rules.js @@ -46,7 +46,7 @@ class ChessRules ///////////////// // INITIALIZATION - // fen = "position flags epSquare movesCount" + // fen == "position flags" constructor(fen, moves) { this.moves = moves; @@ -152,7 +152,7 @@ class ChessRules return L>0 ? this.moves[L-1] : null; } get turn() { - return this.movesCount%2==0 ? 'w' : 'b'; + return this.moves.length%2==0 ? 'w' : 'b'; } // Pieces codes @@ -470,8 +470,8 @@ class ChessRules canIplay(color, sq) { - return ((color=='w' && this.movesCount%2==0) - || (color=='b' && this.movesCount%2==1)) + return ((color=='w' && this.moves.length%2==0) + || (color=='b' && this.moves.length%2==1)) && this.getColor(sq[0], sq[1]) == color; } @@ -660,7 +660,7 @@ class ChessRules board[psq.x][psq.y] = psq.c + psq.p; } - // Before move is played: + // Before move is played, update variables + flags updateVariables(move) { const piece = this.getPiece(move.start.x,move.start.y); @@ -691,37 +691,33 @@ class ChessRules } } - play(move, ingame) + unupdateVariables(move) { - // Save flags (for undo) - move.flags = JSON.stringify(this.flags); //TODO: less costly - this.updateVariables(move); + // (Potentially) Reset king position + const c = this.getColor(move.start.x,move.start.y); + if (this.getPiece(move.start.x,move.start.y) == VariantRules.KING) + this.kingPos[c] = [move.start.x, move.start.y]; + } + play(move, ingame) + { if (!!ingame) - { move.notation = this.getNotation(move); - this.moves.push(move); - } + // Save flags (for undo) + move.flags = JSON.stringify(this.flags); //TODO: less costly? + this.updateVariables(move); + this.moves.push(move); this.epSquares.push( this.getEpSquare(move) ); VariantRules.PlayOnBoard(this.board, move); - this.movesCount++; } undo(move, ingame) { VariantRules.UndoOnBoard(this.board, move); this.epSquares.pop(); - this.movesCount--; - - if (!!ingame) - this.moves.pop(); - - // Update king position, and reset stored/computed flags - const c = this.getColor(move.start.x,move.start.y); - if (this.getPiece(move.start.x,move.start.y) == VariantRules.KING) - this.kingPos[c] = [move.start.x, move.start.y]; - + this.moves.pop(); + this.unupdateVariables(move); this.flags = JSON.parse(move.flags); }