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:
parent
a23c93317b
commit
3b2927de24
1 changed files with 67 additions and 16 deletions
61
src/main.js
61
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
|
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;
|
||||||
|
|
Loading…
Reference in a new issue