From d3334c3a9ee5edc9412d2c95adfc752b72057168 Mon Sep 17 00:00:00 2001
From: Benjamin Auder <benjamin.auder@somewhere>
Date: Mon, 19 Nov 2018 01:57:47 +0100
Subject: [PATCH] Get rid of redundant variable variantRules.movesCount

---
 public/javascripts/base_rules.js         | 42 +++++++++++-------------
 public/javascripts/variants/Atomic.js    |  5 ++-
 public/javascripts/variants/Checkered.js | 17 ++--------
 3 files changed, 23 insertions(+), 41 deletions(-)

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);
 	}
 
diff --git a/public/javascripts/variants/Atomic.js b/public/javascripts/variants/Atomic.js
index bf860df6..0fd7647e 100644
--- a/public/javascripts/variants/Atomic.js
+++ b/public/javascripts/variants/Atomic.js
@@ -96,10 +96,9 @@ class AtomicRules extends ChessRules
 		}
 	}
 
-	undo(move)
+	unupdateVariables(move)
 	{
-		super.undo(move);
-
+		super.unupdateVariables(move);
 		const c = this.getColor(move.start.x,move.start.y);
 		const oppCol = this.getOppCol(c);
 		if ([this.kingPos[c][0],this.kingPos[oppCol][0]].some(e => { return e < 0; }))
diff --git a/public/javascripts/variants/Checkered.js b/public/javascripts/variants/Checkered.js
index 7c00ccac..3626822b 100644
--- a/public/javascripts/variants/Checkered.js
+++ b/public/javascripts/variants/Checkered.js
@@ -276,8 +276,8 @@ class CheckeredRules extends ChessRules
 
 	canIplay(color, sq)
 	{
-		return ((color=='w' && this.movesCount%2==0) || color=='c'
-				|| (color=='b' && this.movesCount%2==1))
+		return ((color=='w' && this.moves.length%2==0) || color=='c'
+				|| (color=='b' && this.moves.length%2==1))
 			&& [color,'c'].includes(this.getColor(sq[0], sq[1]));
 	}
 
@@ -385,19 +385,6 @@ class CheckeredRules extends ChessRules
 			this.flags[1][move.start.x==6 ? "w" : "b"][move.start.y] = false;
 	}
 
-	play(move, ingame)
-	{
-		super.play(move, ingame);
-		if (!ingame)
-			this.moves.push(move); //needed for turn indication for checkered pieces
-	}
-
-	undo(move)
-	{
-		super.undo(move);
-		this.moves.pop();
-	}
-
 	checkGameEnd(color)
 	{
 		if (!this.isAttacked(this.kingPos[color], this.getOppCol(color))
-- 
2.44.0