import { exists } from './utils'
import PieceFactory from './piece_factory'
import PromotionFactory from './promotion_factory'
/** The players hand */
class Hand {
/**
* Create a hand.
* @param {Object} args - The properties of a hand.
* @param {number} args.player_number - The number of the player.
* @param {Object[]} args.pieces - The pieces in the hand.
*/
constructor(args) {
/** @member {number} */
this.playerNumber = args.player_number;
/** @member {Pieces} */
this.pieces = args.pieces.map(function(p) {
let pieceFactory = new PieceFactory(p);
return pieceFactory.build;
});
}
get asJson() {
return {
player_number: this.playerNumber,
pieces: this.pieces.map(function(p) { return p.asJson; })
};
}
pushPiece(piece) {
let factory = new PromotionFactory(piece);
let demotedPiece = (factory.demotable ? factory.demote() : piece);
demotedPiece.switchPlayer();
this.pieces.push(demotedPiece);
}
popPiece(id) {
let piece = this.pieces.find(function(p) { return p.id === id; });
if (exists(piece)) {
let index = this.pieces.findIndex(function(p) { return p.id === id; });
this.pieces.splice(index, 1);
return piece;
} else {
return null;
}
}
}
export default Hand