X-Git-Url: https://git.auder.net/?p=vchess.git;a=blobdiff_plain;f=client%2Fsrc%2Fvariants%2FTitan.js;h=836acc1f6c5686bec187c9857866bad0e5871a74;hp=53420e8368810eb30612af73118738907919200c;hb=e9437f4b2ee9a40013ee514562f39a36d551faab;hpb=3b98a861b893f0dc8e125c6f4a68faeb075ed56e diff --git a/client/src/variants/Titan.js b/client/src/variants/Titan.js index 53420e83..836acc1f 100644 --- a/client/src/variants/Titan.js +++ b/client/src/variants/Titan.js @@ -120,26 +120,68 @@ export class TitanRules extends ChessRules { } } + canIplay(side, [x, y]) { + if (this.movesCount >= 4) return super.canIplay(side, [x, y]); + return ( + this.turn == side && + ( + (side == 'w' && x == 7) || + (side == 'b' && x == 0) + ) + ); + } + + hoverHighlight([x, y]) { + const c = this.turn; + return ( + this.movesCount <= 3 && + ((c == 'w' && x == 7) || (c == 'b' && x == 0)) + ); + } + + onlyClick([x, y]) { + return ( + this.movesCount <= 3 || + // TODO: next line theoretically shouldn't be required... + (this.movesCount == 4 && this.getColor(x, y) != this.turn) + ); + } + + // Special case of move 1 = choose squares, knight first, then bishop + doClick(square) { + if (this.movesCount >= 4) return null; + const color = this.turn; + const [x, y] = [square[0], square[1]]; + if ((color == 'w' && x != 7) || (color == 'b' && x != 0)) return null; + const selectedPiece = this.board[x][y][1]; + return new Move({ + appear: [ + new PiPo({ + x: x, + y: y, + c: color, + p: this.getAugmented(selectedPiece) + }) + ], + vanish: [ + new PiPo({ + x: x, + y: y, + c: color, + p: selectedPiece + }) + ], + start: { x: x, y: y }, + end: { x: x, y: y } + }); + } + // If piece not in usual list, bishop or knight appears. getPotentialMovesFrom([x, y]) { if (this.movesCount <= 3) { // Setup stage - const color = this.getColor(x, y); - const firstRank = (color == 'w' ? 7 : 0); - if (x != firstRank || V.AUGMENTED_PIECES.includes(this.board[x][y][1])) - return []; - const piece = this.getPiece(x, y); - const move = new Move({ - appear: [ - new PiPo({ x: x, y: y, c: color, p: this.getAugmented(piece) }) - ], - vanish: [ - new PiPo({ x: x, y: y, c: color, p: piece }) - ], - start: { x: x, y: y }, - end: { x: x, y: y } - }); - return [move]; + const move = this.doClick([x, y]); + return (!move ? [] : [move]); } let moves = super.getPotentialMovesFrom([x, y]); const initialPiece = this.getPiece(x, y); @@ -185,43 +227,6 @@ export class TitanRules extends ChessRules { return moves; } - hoverHighlight([x, y]) { - const c = this.turn; - return ( - this.movesCount <= 3 && - ((c == 'w' && x == 7) || (c == 'b' && x == 0)) - ); - } - - // Special case of move 1 = choose squares, knight first, then bishop - doClick(square) { - if (this.movesCount >= 4) return null; - const color = this.turn; - const [x, y] = [square[0], square[1]]; - if ((color == 'w' && x != 7) || (color == 'b' && x != 0)) return null; - const selectedPiece = this.board[x][y][1]; - return new Move({ - appear: [ - new PiPo({ - x: x, - y: y, - c: color, - p: this.getAugmented(selectedPiece) - }) - ], - vanish: [ - new PiPo({ - x: x, - y: y, - c: color, - p: selectedPiece - }) - ], - start: { x: x, y: y }, - end: { x: x, y: y } - }); - } - postPlay(move) { if (this.movesCount > 4) super.postPlay(move); }