add events, new_game and join_room

naively allows for a game to be started by first two users to join a room
This commit is contained in:
sorrel 2024-06-23 18:22:53 -04:00
parent a23c93317b
commit 3b2927de24

View file

@ -69,6 +69,7 @@ const gameState = { // pre-init values (render prior to any player input)
komi: null, // komi depends on handicap stones + player rank komi: null, // komi depends on handicap stones + player rank
handicap: null, handicap: null,
boardSize: null, boardSize: null,
players: new Set (),
playerState: { playerState: {
bCaptures: null, bCaptures: null,
wCaptures: null, wCaptures: null,
@ -271,6 +272,28 @@ boardSizeEl.addEventListener('click', clickBoardSize);
gameStartEl.addEventListener('click', clickSubmitStart); gameStartEl.addEventListener('click', clickSubmitStart);
/*----- FUNCTIONS ----------------------------------*/ /*----- 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 functions -----*/
init(); init();
@ -288,9 +311,25 @@ function init() {
gameState.gameRecord = []; gameState.gameRecord = [];
boardState = []; boardState = [];
gameState.gameMeta.start = false; gameState.gameMeta.start = false;
joinRoom ();
startMenu(); 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() { 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)}`; 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,17 +339,29 @@ function startMenu() {
modalEl.style.visibility = 'visible'; modalEl.style.visibility = 'visible';
renderMenu(); renderMenu();
} }
function clickSubmitStart(evt) { function clickSubmitStart(evt) {
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(); if (gameState.gameMeta.start) return init();
evt.preventDefault(); evt.preventDefault();
evt.stopPropagation(); evt.stopPropagation();
gameState.playerMeta.b.name = blackNameInputEl.value || 'black'; return null;
gameState.playerMeta.w.name = whiteNameInputEl.value || 'white';
modalEl.style.visibility = 'hidden';
return initGame();
} }
function initGame() { 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.winner = null;
gameState.pass = null; gameState.pass = null;
gameState.turn = gameState.handicap ? -1 : 1; gameState.turn = gameState.handicap ? -1 : 1;