diff --git a/src/main.js b/src/main.js index fbd6e23..ea00d51 100644 --- a/src/main.js +++ b/src/main.js @@ -283,6 +283,9 @@ window.webxdc.setUpdateListener((update) => { let { payload, summary } = update; switch (payload.event) { + case 'make_move': + makeMove (payload); + break; case 'new_game': initGame (payload); break; @@ -455,7 +458,6 @@ function clickUpdatePlayerMeta(evt) { if (evt.target.name == 'black-rank-certain') gameState.playerMeta.b.rankCertain = !gameState.playerMeta.b.rankCertain; if (evt.target.name == 'white-rank-certain') gameState.playerMeta.w.rankCertain = !gameState.playerMeta.w.rankCertain; renderMenu(); - } function clickBoardSize(evt) { @@ -488,23 +490,40 @@ function clickCloseMenu(evt) { /*----- gameplay functions -----*/ function clickBoard(evt) { - evt.stopPropagation(); - if (gameState.pass > 1 || gameState.winner) return editTerritory(evt); + evt.stopPropagation(); + if (gameState.pass > 1 || gameState.winner) return editTerritory(evt); // checks for placement and pushes to cell - let placement = [ parseInt(evt.target.closest('td').id.split('-')[0]), parseInt(evt.target.closest('td').id.split('-')[1]) ]; - let point = findPointFromIdx(placement); - //checks that this placement was marked as legal - if ( !checkLegal(point) ) return null; - clearKo(); - clearPass(); - resolveCaptures(point); - point.stone = gameState.turn; - point.joinGroup(); - playSound(point); - clearCaptures(); - gameState.gameRecord.push(`${STONES_DATA[gameState.turn]}: ${point.pos}`); - gameState.turn*= -1; - renderGame(); + let placement = [ + parseInt(evt.target.closest('td').id.split('-')[0]), + parseInt(evt.target.closest('td').id.split('-')[1]) + ]; + let update = { + payload: { + event: 'make_move', + placement, + player: userName + } + }; + let descr = `${userName} move at ${placement}`; + return sendUpdate (update, descr); +} + +function makeMove (payload) { + let { placement, player } = payload; + let point = findPointFromIdx(placement); + if (!checkLegal (point)) return; + if (!checkTurn (player)) return; + clearKo(); + clearPass(); + resolveCaptures(point); + point.stone = gameState.turn; + point.joinGroup(); + playSound(point); + clearCaptures(); + gameState.gameRecord.push(`${STONES_DATA[gameState.turn]}: ${point.pos}`); + gameState.turn*= -1; + renderGame(); + return; } function clearKo() { @@ -546,6 +565,16 @@ function checkLegal(point) { return true; } +function checkTurn (player) { + if (gameState.turn == 1) { + return gameState.playerMeta.b.name == player; + } + if (gameState.turn == -1) { + return gameState.playerMeta.w.name == player; + } + return false; +} + function clearOverlay() { for (let point in boardState) { point = boardState[point];