my-board seems OK. Now TODO: test my-game (with sockets)
authorBenjamin Auder <benjamin.auder@somewhere>
Sun, 13 Jan 2019 02:20:48 +0000 (03:20 +0100)
committerBenjamin Auder <benjamin.auder@somewhere>
Sun, 13 Jan 2019 02:20:48 +0000 (03:20 +0100)
public/javascripts/base_rules.js
public/javascripts/components/board.js
public/javascripts/variant.js
views/variant.pug

index 718261d..4b0b470 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))
@@ -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");
index cec6049..44c499c 100644 (file)
@@ -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],
index 1ec4d89..453656c 100644 (file)
@@ -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);
+               },
        },
 });
                
index 15c546d..16dd447 100644 (file)
@@ -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")