1
0
forked from sent/waves
waves-fork/public/assets/g/chess/js/board-controls-side.js
2025-04-09 17:11:14 -05:00

269 lines
6.9 KiB
JavaScript

// Right panel control buttons logic
// Reset board to classic starting position
$('#btn-new-game').click(function() {
console.log('Making new game.');
gameStarted = false;
gameEnd = false;
stopTimer();
$('#game-settings').removeClass('hidden');
$('#btn-choose-white-side, #btn-choose-black-side').removeClass('locked');
$('#btn-choose-black-side').removeClass('selected');
$('#btn-choose-white-side').addClass('selected');
playerSide = 'w';
opponentSide = 'b';
firstTurn = 'player';
$('#btn-undo-move').addClass('hidden');
$('#game-state').addClass('hidden');
document.getElementById("btn-switch-sides").disabled = false;
$('#btn-switch-sides').removeClass('disabled');
document.getElementById("btn-show-hint").disabled = false;
$('#btn-show-hint').removeClass('disabled');
// setBoard();
game = new Chess('rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1');
board.position('rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1');
if (playerSide == 'b') {
game = new Chess('rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR b KQkq - 0 1');
board.position('rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR b KQkq - 0 1');
opponentTurn();
} else {
game = new Chess('rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1');
board.position('rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1');
// unlock if locked
$('#board').removeClass('locked');
// reset turns history
$('#game-turns-history ol').html('');
}
});
// Empty board and enable custom pieces
$('#btn-empty-board').click(function() {
stopTimer();
$('#game-timer').addClass('hidden');
$('#btn-choose-white-side, #btn-choose-black-side').removeClass('locked');
$('#btn-undo-move').addClass('hidden');
$('#board').removeClass('locked');
$('body').find('img[data-piece="wP"]').remove();
$(window).unbind();
board.clear();
board = ChessBoard('board', {
draggable: true,
dropOffBoard: 'trash',
sparePieces: true
});
boardPieces = true;
$('#game-turn').addClass('hidden');
});
// Load PGN string popup
$('#btn-load-pgn').click(function() {
if ($('#board-load-pgn-area').hasClass('hidden')) {
$('#board-load-fen-area, #board-save-pgn-area').addClass('hidden');
$('#board-load-pgn-area').removeClass('hidden').find('textarea').focus().select();
} else {
$('#board-load-pgn-area').addClass('hidden');
}
});
$('#board-load-pgn-area button').click(function() {
eventLoadPgnData();
$('#board-load-pgn-area').addClass('hidden');
});
$('#board-load-pgn-area textarea').keydown(function(e) {
e.preventDefault();
var code = e.keyCode ? e.keyCode : e.which;
if (code == 13) {
eventLoadPgnData();
$('#board-load-pgn-area').addClass('hidden');
}
});
function eventLoadPgnData() {
if ($('#board-load-pgn-area textarea').val() == '') return;
var fenString = '';
Init('rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1');
SetPgnMoveText($('#board-load-pgn-area textarea').val());
var ff = "", ff_new = "", ff_old;
do {
ff_old = ff_new;
MoveForward(1);
ff_new = GetFEN();
if (ff_old!=ff_new) ff += ff_new + "\n";
fenString = ff_new;
}
while (ff_old != ff_new);
console.log('PGN converted to FEN: ' + fenString);
loadBoard(fenString);
checkTurn();
checkAnalyzeOption();
}
$('#board-load-pgn-area .close').click(function() {
$('#board-load-pgn-area').addClass('hidden');
});
// Load FEN string popup
$('#btn-load-fen').click(function() {
if ($('#board-load-fen-area').hasClass('hidden')) {
$('#board-load-pgn-area, #board-save-pgn-area').addClass('hidden');
$('#board-load-fen-area').removeClass('hidden').find('textarea').focus().select();
} else {
$('#board-load-fen-area').addClass('hidden');
}
});
$('#board-load-fen-area button').click(function() {
eventLoadFenData();
$('#board-load-fen-area').addClass('hidden');
});
$('#board-load-fen-area textarea').keydown(function(e) {
e.preventDefault();
var code = e.keyCode ? e.keyCode : e.which;
if (code == 13) {
eventLoadFenData();
$('#board-load-fen-area').addClass('hidden');
}
});
function eventLoadFenData() {
var fenString = $('#board-load-fen-area textarea').val();
var gameValidation = game.validate_fen(fenString);
if (!gameValidation.valid) {
console.log('Error ' + gameValidation.error_number + ': ' + gameValidation.error);
return;
};
loadBoard(fenString);
checkTurn();
checkAnalyzeOption();
}
$('#board-load-fen-area .close').click(function () {
$('#board-load-fen-area').addClass('hidden');
});
$('#board-save-pgn-area textarea').keydown(function(e) {
var code = e.keyCode ? e.keyCode : e.which;
if (code == 13) {
$('#board-save-pgn-area').addClass('hidden');
}
});
$('#board-save-pgn-area button').click(function() {
$('#board-save-pgn-area').addClass('hidden');
});
$('#board-save-pgn-area .close').click(function() {
$('#board-save-pgn-area').addClass('hidden');
});
// Analyze moves
$('#btn-analyze').click(function() {
if ($(this).hasClass('disabled')) {
console.log('Cannot analyze in opponent turn.');
return;
}
stateAnalyze = 'grep';
$('#btn-analyze').addClass('disabled loading');
console.log('Analyze ' + game.fen());
stockfish.postMessage('position fen ' + game.fen());
stockfish.postMessage('go depth ' + staticSkill);
});
function checkAnalyzeOption() {
if (game.turn() != playerSide) {
$('#btn-analyze').addClass('disabled');
} else {
$('#btn-analyze').removeClass('disabled');
}
}
$('#btn-settings').click(function() {
$('#game-difficulty-skill-settings').toggleClass('hidden');
});
$('#btn-choose-white-side').click(function() {
if ($(this).hasClass('locked')) return;
$('#game-settings .btn').removeClass('selected');
$(this).addClass('selected');
playerSide = 'w';
opponentSide = 'b';
if (typeof board.setOrientation == 'function') {
board.setOrientation(playerSide);
} else {
board.orientation('white');
}
$('#game-settings .btn').addClass('locked');
});
$('#btn-choose-black-side').click(function() {
if ($(this).hasClass('locked')) return;
$('#game-settings .btn').removeClass('selected');
$(this).addClass('selected');
playerSide = 'b';
opponentSide = 'w';
if (typeof board.setOrientation == 'function') {
board.setOrientation(playerSide);
} else {
board.orientation('black');
}
opponentTurn();
$('#game-settings .btn').addClass('locked');
});
$('#btn-resign').click(function() {
$('#board-resign-game-area').toggleClass('hidden');
});
$('#board-resign-game-area .close').click(function() {
$('#board-resign-game-area').addClass('hidden');
});
$('#board-resign-game-area .yes').click(function() {
gameEnd = true;
stopTimer();
$('#game-state').text('Game ended.').removeClass('hidden');
$('#game-timer').addClass('hidden');
$('#board').addClass('locked');
$('#board-resign-game-area').addClass('hidden');
});
$('#board-resign-game-area .no').click(function() {
$('#board-resign-game-area').addClass('hidden');
});