UNPKG

@real_one_chess_king/game-logic

Version:
65 lines 2.73 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TakeOnThePassMovementRule = void 0; const piece_constants_1 = require("../../piece/piece.constants"); const movement_rule_1 = require("./movement-rule"); const position_specific_movement_rule_1 = require("./position-specific-movement.rule"); const straight_movement_rule_1 = require("./straight-movement.rule"); const affect_utils_1 = require("../../affect/affect.utils"); class TakeOnThePassMovementRule extends position_specific_movement_rule_1.PositionSpecificMovementRule { constructor({ id, name, moveToEmpty, moveToKill, collision, distance, directions, speed, activatePositions, }) { super({ id, name, moveToEmpty, moveToKill, collision, distance, directions, speed, activatePositions, }); } isNear(from, c) { return from + 1 === c || from - 1 === c; } getDirectionModifier(dirrection) { return dirrection === movement_rule_1.Direction.UpLeft || dirrection === movement_rule_1.Direction.UpRight ? -1 : +1; } possibleDirrections = [ movement_rule_1.Direction.UpLeft, movement_rule_1.Direction.UpRight, movement_rule_1.Direction.DownLeft, movement_rule_1.Direction.DownRight, ]; pawnFirstDoubleStepDistance = 2; calculateNewCoord = (x, y, diff, dirrection, turns) => { if (!turns || !turns.length) { return []; } if (!this.activatePositions.y?.has(y)) { return []; } const lastTurn = turns[turns.length - 1]; const [enemyFromX, enemyFromY] = (0, affect_utils_1.getUserSelectedMoveAffect)(lastTurn.affects).from; const [toX, toY] = (0, affect_utils_1.getUserSelectedMoveAffect)(lastTurn.affects).to; const prevEnemyPos = this.getDirectionModifier(dirrection) * this.pawnFirstDoubleStepDistance; const [newX, newY] = (0, straight_movement_rule_1.directionToVector)(dirrection, x, y, diff); if (lastTurn.pieceType === piece_constants_1.PieceType.Pawn && this.isNear(enemyFromX, x) && enemyFromX === toX && enemyFromY === y + prevEnemyPos && y === toY && enemyFromX === newX) { return [ (0, affect_utils_1.buildKillAffect)([toX, toY]), (0, affect_utils_1.markAsUserSelected)((0, affect_utils_1.buildMoveAffect)([x, y], [newX, newY])), ]; } return []; }; } exports.TakeOnThePassMovementRule = TakeOnThePassMovementRule; //# sourceMappingURL=take-on-the-pass.rule.js.map