From baba60703f661aab20f2327098c3a0af572f0704 Mon Sep 17 00:00:00 2001
From: Benjamin Auder <benjamin.auder@somewhere>
Date: Sun, 13 Jan 2019 03:20:48 +0100
Subject: [PATCH] my-board seems OK. Now TODO: test my-game (with sockets)

---
 public/javascripts/base_rules.js       | 22 ++++++++--------
 public/javascripts/components/board.js |  7 ++++-
 public/javascripts/variant.js          | 36 +++++++++++++++++++++++---
 views/variant.pug                      | 14 ++++++----
 4 files changed, 59 insertions(+), 20 deletions(-)

diff --git a/public/javascripts/base_rules.js b/public/javascripts/base_rules.js
index 718261d2..4b0b4705 100644
--- a/public/javascripts/base_rules.js
+++ b/public/javascripts/base_rules.js
@@ -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 0 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))
@@ -1054,7 +1054,7 @@ class ChessRules
 		if (V.HasEnpassant)
 			this.epSquares.push( this.getEpSquare(move) );
 		V.PlayOnBoard(this.board, move);
-		this.turn = this.getOppCol(this.turn);
+		this.turn = V.GetOppCol(this.turn);
 		this.movesCount++;
 		this.updateVariables(move);
 	}
@@ -1066,7 +1066,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 +1088,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");
diff --git a/public/javascripts/components/board.js b/public/javascripts/components/board.js
index cec6049e..44c499c2 100644
--- a/public/javascripts/components/board.js
+++ b/public/javascripts/components/board.js
@@ -14,6 +14,8 @@ Vue.component('my-board', {
 		};
 	},
 	render(h) {
+		if (!this.vr)
+			return;
 		const [sizeX,sizeY] = [V.size.x,V.size.y];
 		// Precompute hints squares to facilitate rendering
 		let hintSquares = doubleArray(sizeX, sizeY, false);
@@ -21,6 +23,7 @@ Vue.component('my-board', {
 		// Also precompute in-check squares
 		let incheckSq = doubleArray(sizeX, sizeY, false);
 		this.incheck.forEach(sq => { incheckSq[sq[0]][sq[1]] = true; });
+		const squareWidth = 40; //TODO: compute this
 		const choices = h(
 			'div',
 			{
@@ -85,7 +88,8 @@ Vue.component('my-board', {
 						let cj = (this.orientation=='w' ? j : sizeY-j-1);
 						let elems = [];
 						if (this.vr.board[ci][cj] != V.EMPTY && (variant.name!="Dark"
-							|| this.gameOver || this.vr.enlightened[this.userColor][ci][cj]))
+							|| this.gameOver || this.mode == "analyze"
+							|| this.vr.enlightened[this.userColor][ci][cj]))
 						{
 							elems.push(
 								h(
@@ -130,6 +134,7 @@ Vue.component('my-board', {
 									'dark-square': (i+j)%2==1,
 									[this.bcolor]: true,
 									'in-shadow': variant.name=="Dark" && !this.gameOver
+										&& this.mode != "analyze"
 										&& !this.vr.enlightened[this.userColor][ci][cj],
 									'highlight': showLight && !!lm && _.isMatch(lm.end, {x:ci,y:cj}),
 									'incheck': showLight && incheckSq[ci][cj],
diff --git a/public/javascripts/variant.js b/public/javascripts/variant.js
index 1ec4d89b..453656ca 100644
--- a/public/javascripts/variant.js
+++ b/public/javascripts/variant.js
@@ -1,15 +1,24 @@
 new Vue({
 	el: "#VueElement",
 	data: {
-		display: "room", //default: main hall
+		display: "undefined", //default to main hall; see "created()" function
 		gameid: "undefined", //...yet
+		
+		// TEMPORARY: DEBUG
+		vr: null,
+		mode: "analyze",
+		orientation: "w",
+		userColor: "w",
+		gameOver: false,
 	},
 	created: function() {
 		// TODO: navigation becomes a little more complex
 		const url = window.location.href;
 		const hashPos = url.indexOf("#");
-		if (hashPos >= 0)
-			this.setDisplay(url.substr(hashPos+1));
+		const page = (hashPos >= 0 ? url.substr(hashPos+1) : "room");
+		this.setDisplay(page);
+
+		this.vr = new VariantRules( V.GenRandInitFen() );
 	},
 	methods: {
 		setDisplay: function(elt) {
@@ -19,6 +28,27 @@ new Vue({
 			if (!!menuToggle)
 				menuToggle.checked = false;
 		},
+
+		// TEMPORARY: DEBUG (duplicate code)
+		play: function(move) {
+			// Not programmatic, or animation is over
+			if (!move.notation)
+				move.notation = this.vr.getNotation(move);
+			this.vr.play(move);
+			if (!move.fen)
+				move.fen = this.vr.getFen();
+			if (this.sound == 2)
+				new Audio("/sounds/move.mp3").play().catch(err => {});
+			// Is opponent in check?
+			this.incheck = this.vr.getCheckSquares(this.vr.turn);
+			const score = this.vr.getCurrentScore();
+		},
+		undo: function(move) {
+			this.vr.undo(move);
+			if (this.sound == 2)
+				new Audio("/sounds/undo.mp3").play().catch(err => {});
+			this.incheck = this.vr.getCheckSquares(this.vr.turn);
+		},
 	},
 });
 		
diff --git a/views/variant.pug b/views/variant.pug
index 15c546d0..16dd447a 100644
--- a/views/variant.pug
+++ b/views/variant.pug
@@ -28,9 +28,12 @@ block content
 		.row
 			//my-room(v-show="display=='room'")
 			//my-game-list(v-show="display=='gameList'")
-			my-rules(v-show="display=='rules'")
-			my-problems(v-show="display=='problems'")
+			//my-rules(v-show="display=='rules'")
+			//my-problems(v-show="display=='problems'")
 			//my-game(v-show="display=='game'" :gameId="gameid")
+			my-board(:vr="vr" :mode="mode" :orientation="orientation"
+				:user-color="userColor" :game-over="gameOver"
+				v-on:play-move="play")
 
 block javascripts
 	script(src="/javascripts/utils/array.js")
@@ -44,8 +47,9 @@ block javascripts
 		const variant = !{JSON.stringify(variant)};
 	//script(src="/javascripts/components/room.js")
 	//script(src="/javascripts/components/gameList.js")
-	script(src="/javascripts/components/rules.js")
-	script(src="/javascripts/components/problemPreview.js")
-	script(src="/javascripts/components/problems.js")
+	//script(src="/javascripts/components/rules.js")
+	script(src="/javascripts/components/board.js")
+	//script(src="/javascripts/components/problemPreview.js")
+	//script(src="/javascripts/components/problems.js")
 	//script(src="/javascripts/components/game.js")
 	script(src="/javascripts/variant.js")
-- 
2.44.0