@real_one_chess_king/game-logic
Version:
R.O.C.K. chess game logic
65 lines • 2.73 kB
JavaScript
;
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