X-Git-Url: https://git.auder.net/doc/screen_players.png?a=blobdiff_plain;f=base_rules.js;h=a0defd19f7d718c74ea7cdf361a9a3cb27e4904f;hb=5006aaca31fa5fa36cb82784d13f6d28d754c90c;hp=cdce2a17cc02a968528aa85cb49d5e5673e2c376;hpb=0adfbdb55452c79532875beb8eed61b1ed4c6cd2;p=xogo.git diff --git a/base_rules.js b/base_rules.js index cdce2a1..a0defd1 100644 --- a/base_rules.js +++ b/base_rules.js @@ -219,12 +219,15 @@ export default class ChessRules { const s = FenUtil.setupPieces( ['r', 'n', 'b', 'q', 'k', 'b', 'n', 'r'], { + randomness: this.options["randomness"], between: {p1: 'k', p2: 'r'}, - diffCol: ['b'] + diffCol: ['b'], + flags: ['r'] } ); return { - fen: s.b + "/pppppppp/8/8/8/8/PPPPPPPP/" + s.w, + fen: s.b.join("") + "/pppppppp/8/8/8/8/PPPPPPPP/" + + s.w.join("").toUpperCase(), o: {flags: s.flags} }; } @@ -283,9 +286,9 @@ export default class ChessRules { // Position part of the FEN string getPosition() { let position = ""; - for (let i = 0; i < this.size.y; i++) { + for (let i = 0; i < this.size.x; i++) { let emptyCount = 0; - for (let j = 0; j < this.size.x; j++) { + for (let j = 0; j < this.size.y; j++) { if (this.board[i][j] == "") emptyCount++; else { @@ -300,7 +303,7 @@ export default class ChessRules { if (emptyCount > 0) // "Flush remainder" position += C.FenEmptySquares(emptyCount); - if (i < this.size.y - 1) + if (i < this.size.x - 1) position += "/"; //separate rows } return position; @@ -356,9 +359,6 @@ export default class ChessRules { if (this.options[opt.variable] === undefined) this.options[opt.variable] = opt.defaut; }); - if (o.genFenOnly) - // This object will be used only for initial FEN generation - return; // Some variables this.playerColor = o.color; @@ -557,7 +557,7 @@ export default class ChessRules { chessboard.style.top = spaceTop + "px"; // Give sizes instead of recomputing them, // because chessboard might not be drawn yet. - this.setupPieces({ + this.setupVisualPieces({ width: cbWidth, height: cbHeight, x: spaceLeft, @@ -597,7 +597,7 @@ export default class ChessRules { return board; } - setupPieces(r) { + setupVisualPieces(r) { let chessboard = document.getElementById(this.containerId).querySelector(".chessboard"); if (!r) @@ -965,7 +965,7 @@ export default class ChessRules { // TODO: onpointerdown/move/up ? See reveal.js /controllers/touch.js } - // NOTE: not called if isDiagram, or genFenOnly + // NOTE: not called if isDiagram removeListeners() { let container = document.getElementById(this.containerId); this.windowResizeObs.unobserve(container); @@ -1171,8 +1171,12 @@ export default class ChessRules { //////////////////////// // PIECES SPECIFICATIONS + getPawnShift(color) { + return (color == "w" ? -1 : 1); + } + pieces(color, x, y) { - const pawnShift = (color == "w" ? -1 : 1); + const pawnShift = this.getPawnShift(color); // NOTE: jump 2 squares from first rank (pawns can be here sometimes) const initRank = ((color == 'w' && x >= 6) || (color == 'b' && x <= 1)); return { @@ -2102,8 +2106,10 @@ export default class ChessRules { //////////////////// // MOVES VALIDATION - // Is piece (or square) at given position attacked by "oppCol" ? + // Is piece (or square) at given position attacked by "oppCol(s)" ? underAttack([x, y], oppCol) { + if (!Array.isArray(oppCol)) + oppCol = [oppCol]; // An empty square is considered as king, // since it's used only in getCastleMoves (TODO?) const king = this.board[x][y] == "" || this.isKing(x, y); @@ -2113,7 +2119,7 @@ export default class ChessRules { this.findCapturesOn( [x, y], { - byCol: [oppCol], + byCol: oppCol, segments: this.options["cylinder"], one: true } @@ -2129,7 +2135,7 @@ export default class ChessRules { segments: this.options["cylinder"], one: true }, - ([i1, j1], [i2, j2]) => this.getColor(i2, j2) == oppCol + ([i1, j1], [i2, j2]) => oppCol.includes(this.getColor(i2, j2)) ) ) ); @@ -2641,6 +2647,7 @@ export default class ChessRules { let container = document.getElementById(this.containerId); if (document.hidden) { document.onvisibilitychange = () => { + // TODO here: page reload ?! (some issues if tab changed...) document.onvisibilitychange = undefined; checkDisplayThenAnimate(700); };