"use strict";
Object.defineProperties(exports, {
EnPassantTarget: {get: function() {
return EnPassantTarget;
}},
NullEnPassantTarget: {get: function() {
return NullEnPassantTarget;
}},
__esModule: {value: true}
});
var PAWN = require('./brands').PAWN;
var Point = require('./point').Point;
var $__2 = require('./util'),
squareCoords = $__2.squareCoords,
squareName = $__2.squareName;
var EnPassantTarget = function EnPassantTarget() {
$traceurRuntime.defaultSuperCall(this, $EnPassantTarget.prototype, arguments);
};
var $EnPassantTarget = EnPassantTarget;
($traceurRuntime.createClass)(EnPassantTarget, {
offset: function() {
return new Point(0, this.y === 3 ? -1 : 1);
},
toString: function() {
return squareName(this);
}
}, {
fromPoint: function(point) {
return new $EnPassantTarget(point.x, point.y);
},
analyze: function(position, piece, target) {
if (piece.brand !== PAWN) {
return new NullEnPassantTarget();
}
var thrust = $traceurRuntime.assertObject(target.difference(position.pieceCoords(piece))).y;
if (Math.abs(thrust) === 2) {
return $EnPassantTarget.fromPoint(new Point(0, -piece.reach).sum(target));
}
return new NullEnPassantTarget();
},
capturablePiece: function(position, capturer, target) {
if (capturer.brand !== PAWN || !target.equal(position.enPassantTarget)) {
return {
capturePiece: position.pieceByCoords(target),
captureTarget: target,
isEnPassant: false
};
}
var captureTarget = target.sum(new Point(0, -capturer.reach));
var capturePiece = position.pieceByCoords(captureTarget);
Eif (capturePiece != null) {
return {
capturePiece: capturePiece,
captureTarget: captureTarget,
isEnPassant: true
};
}
},
null: function() {
return new NullEnPassantTarget();
}
}, Point);
var NullEnPassantTarget = function NullEnPassantTarget() {};
var $NullEnPassantTarget = NullEnPassantTarget;
($traceurRuntime.createClass)(NullEnPassantTarget, {
equal: function(other) {
if (other instanceof $NullEnPassantTarget) {
return true;
}
return false;
},
toString: function() {
return '-';
}
}, {}, EnPassantTarget);
|