forked from sent/waves
141 lines
3.2 KiB
JavaScript
141 lines
3.2 KiB
JavaScript
// init board desktop
|
|
|
|
function setDesktopBoard(position = false, sparePieces = false) {
|
|
|
|
gameEnd = false;
|
|
|
|
// mode to set chess figures in custom position
|
|
if (sparePieces) {
|
|
board = ChessBoard('board', {
|
|
draggable: true,
|
|
dropOffBoard: 'trash',
|
|
sparePieces: true,
|
|
pieceTheme: 'img/pieces/{piece}.svg'
|
|
});
|
|
return;
|
|
}
|
|
|
|
// init board with preloaded position (fen)
|
|
if (position == false) {
|
|
position = 'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1';
|
|
} else {
|
|
console.log('Custom: ' + position);
|
|
}
|
|
|
|
// game rules control object
|
|
game = new Chess(position);
|
|
|
|
var onDragStart = function(source, piece) {
|
|
// do not pick up pieces if the game is over or if it's not that side's turn
|
|
if (game.game_over() === true ||
|
|
(game.turn() === 'w' && piece.search(/^b/) !== -1) ||
|
|
(game.turn() === 'b' && piece.search(/^w/) !== -1)) {
|
|
return false;
|
|
}
|
|
};
|
|
|
|
var onDrop = function(source, target, piece, newPos, oldPos, orientation) {
|
|
|
|
removeGreySquares();
|
|
|
|
if (!gameStarted) {
|
|
gameStarted = true;
|
|
$('#btn-choose-white-side, #btn-choose-black-side').addClass('locked');
|
|
}
|
|
|
|
// see if the move is legal
|
|
var move = game.move({
|
|
from: source,
|
|
to: target,
|
|
promotion: 'q'
|
|
});
|
|
|
|
// illegal move
|
|
if (move === null) {
|
|
console.log('Player illegal move.');
|
|
return 'snapback';
|
|
}
|
|
|
|
promotionPos = newPos;
|
|
moveSource = source;
|
|
moveTarget = target;
|
|
|
|
// promotion move
|
|
if (move.promotion != undefined) {
|
|
$('#game-promotion').removeClass('hidden');
|
|
$('#board').addClass('locked');
|
|
console.log('Paused for promotion.');
|
|
return;
|
|
}
|
|
|
|
dumpLog(false);
|
|
|
|
listMoves();
|
|
opponentTurn();
|
|
|
|
};
|
|
|
|
var onMouseoverSquare = function(square, piece) {
|
|
|
|
// get list of possible moves for this square
|
|
var moves = game.moves({
|
|
square: square,
|
|
verbose: true
|
|
});
|
|
|
|
// skip if there are no moves available for this square
|
|
if (moves.length === 0) return;
|
|
|
|
// highlight the square they moused over
|
|
greySquare(square);
|
|
|
|
// highlight the possible squares for this piece
|
|
for (var i = 0; i < moves.length; i++) {
|
|
greySquare(moves[i].to);
|
|
}
|
|
|
|
};
|
|
|
|
var onMouseoutSquare = function(square, piece) {
|
|
removeGreySquares();
|
|
};
|
|
|
|
var onSnapEnd = function() {
|
|
board.position(game.fen());
|
|
gameHistoryAddMove(game.fen());
|
|
if (game.history().length > 0) $('#btn-take-back').removeClass('disabled');
|
|
};
|
|
|
|
board = ChessBoard('board', {
|
|
|
|
position: position,
|
|
draggable: true,
|
|
showNotation: true,
|
|
|
|
onDragStart: onDragStart,
|
|
dropOffBoard: 'snapback',
|
|
onDrop: onDrop,
|
|
|
|
onMouseoutSquare: onMouseoutSquare,
|
|
onMouseoverSquare: onMouseoverSquare,
|
|
|
|
onSnapEnd: onSnapEnd,
|
|
pieceTheme: 'img/pieces/{piece}.svg'
|
|
|
|
});
|
|
|
|
gameHistoryClear();
|
|
|
|
// field highlight functions
|
|
var removeGreySquares = function() {
|
|
$('#board .square-55d63').css('background', '');
|
|
};
|
|
|
|
var greySquare = function(square) {
|
|
var squareEl = $('#board .square-' + square), background = '#fbe3e7';
|
|
if (squareEl.hasClass('black-3c85d') === true) background = '#f7c5cd';
|
|
squareEl.css('background', background);
|
|
};
|
|
|
|
};
|