I am trying to refactor a chess game I am currently creating so the code is more flexible and maintainable, while doing this, I came across an event listener which I have no idea on how to make "cleaner". Some of the variable names in the event listener are unintuitive but apart from that, I would like to know how to structure the event listener such that it uses multiple methods. I have previously asked a question on Code Review which is also about refactoring, and contains the code from which this function came from, here is the link: Object-Oriented JavaScript chess game. If you have any questions or clarifications needed about the code, feel free to ask.
document.addEventListener('click', function(event){
if(!hasClicked){
if(event.clientX < 480 && event.clientY < 480 && board[Math.floor(event.clientY / 60)][Math.floor(event.clientX / 60)] != "vacant"){
if(humanPlayer.indexOf(board[Math.floor(event.clientY / 60)][Math.floor(event.clientX / 60)]) != -1){
canMove = true;
isHighlightPossibleMoves = true;
hasClicked = true;
highlightPos = {x: Math.floor(event.clientX / 60), y: Math.floor(event.clientY / 60)};
pieceMoves = processMoves({x: Math.floor(event.clientX / 60), y: Math.floor(event.clientY / 60)}, board);
} else {
hasClicked = true;
highlightPos = {x: Math.floor(event.clientX / 60), y: Math.floor(event.clientY / 60)};
canMove = false;
}
}
} else {
if(canMove){
advancePosition = {x: Math.floor(event.clientX / 60), y: Math.floor(event.clientY / 60)};
for(i = 0; i < pieceMoves.moves.length; i++){
if(advancePosition.x == pieceMoves.moves[i].x && advancePosition.y == pieceMoves.moves[i].y){
if(board[highlightPos.y][highlightPos.x] == blackKing || board[highlightPos.y][highlightPos.x] == whiteKing){
if(pieceMoves.moves[i].x - 2 == highlightPos.x || pieceMoves.moves[i].x + 2 == highlightPos.x){
isCastling = true;
} else {
isCastling = false;
}
}
if(isCastling){
board = chess.returnCastledBoard({x: highlightPos.x, y: highlightPos.y}, pieceMoves.moves[i]);
chess = new Chess(board);
isCastling = false;
} else {
if(
board[highlightPos.y][highlightPos.x] == whiteKingSideCastle ||
board[highlightPos.y][highlightPos.x] == whiteQueenSideCastle ||
board[highlightPos.y][highlightPos.x] == blackKingSideCastle ||
board[highlightPos.y][highlightPos.x] == blackQueenSideCastle ||
board[highlightPos.y][highlightPos.x] == blackKing ||
board[highlightPos.y][highlightPos.x] == whiteKing
){
board[highlightPos.y][highlightPos.x].hasClicked = true;
}
board = chess.updateBoard(highlightPos, advancePosition);
chess = new Chess(board);
break;
}
}
}
}
hasClicked = false;
canMove = false;
highlightPos = undefined;
pieceMoves = undefined;
advancePosition = undefined;
}
});
````