diff --git a/src/main.js b/src/main.js index 596b92f..fbd6e23 100644 --- a/src/main.js +++ b/src/main.js @@ -69,6 +69,7 @@ const gameState = { // pre-init values (render prior to any player input) komi: null, // komi depends on handicap stones + player rank handicap: null, boardSize: null, + players: new Set (), playerState: { bCaptures: null, wCaptures: null, @@ -271,6 +272,28 @@ boardSizeEl.addEventListener('click', clickBoardSize); gameStartEl.addEventListener('click', clickSubmitStart); /*----- FUNCTIONS ----------------------------------*/ +/*----- webxdc functions -----*/ +function sendUpdate(update, descr) { + window.webxdc.sendUpdate(update, descr); +} + +const userName = window.webxdc.selfName; + +window.webxdc.setUpdateListener((update) => { + let { payload, summary } = update; + + switch (payload.event) { + case 'new_game': + initGame (payload); + break; + case 'join_room': + updateRoom (payload); + break; + default: + console.log ("couldn't recognize update event"); + } +}); + /*----- init functions -----*/ init(); @@ -288,11 +311,27 @@ function init() { gameState.gameRecord = []; boardState = []; gameState.gameMeta.start = false; + joinRoom (); startMenu(); }; +function joinRoom () { + const update = { + payload: { + event: "join_room", + player: userName + } + }; + const descr = `${userName} joined room`; + sendUpdate (update, descr); +} + +function updateRoom (payload) { + gameState.players.add (payload .player); +} + function getDate() { - let d = new Date; + let d = new Date; return `${d.getFullYear()}-${String(d.getMonth()+1).charAt(-1)||0}${String(d.getMonth()+1).charAt(-0)}-${String(d.getDate()).charAt(-1)||0}${String(d.getDate()+1).charAt(-0)}`; } @@ -300,24 +339,36 @@ function startMenu() { modalEl.style.visibility = 'visible'; renderMenu(); } + function clickSubmitStart(evt) { - if (gameState.gameMeta.start) return init(); - evt.preventDefault(); - evt.stopPropagation(); - gameState.playerMeta.b.name = blackNameInputEl.value || 'black'; - gameState.playerMeta.w.name = whiteNameInputEl.value || 'white'; - modalEl.style.visibility = 'hidden'; - return initGame(); + let players = gameState.players.values (); + const update = { + payload: { + event: "new_game", + players: [players.next ().value, players.next ().value], + }, + // document: "", + summary: "start game", + }; + const descr = `${userName} started game`; + sendUpdate(update, descr); + if (gameState.gameMeta.start) return init(); + evt.preventDefault(); + evt.stopPropagation(); + return null; } -function initGame() { - gameState.winner = null; - gameState.pass = null; - gameState.turn = gameState.handicap ? -1 : 1; - gameState.gameMeta.start = true; - initBoard(); - renderBoardInit(); - renderGame(); +function initGame(payload) { + gameState.playerMeta.b.name = payload.players [0] || 'black'; + gameState.playerMeta.w.name = payload.players [1] || 'white'; + modalEl.style.visibility = 'hidden'; + gameState.winner = null; + gameState.pass = null; + gameState.turn = gameState.handicap ? -1 : 1; + gameState.gameMeta.start = true; + initBoard(); + renderBoardInit(); + renderGame(); } function initBoard() {