|
const api = (path, opts) => |
|
fetch(path, { |
|
headers: {'Content-Type':'application/json'}, |
|
...opts |
|
}).then(r => r.json()); |
|
|
|
let lobbyId = "", playerName = ""; |
|
|
|
document.getElementById("btnCreate").onclick = async () => { |
|
const max_players = +document.getElementById("maxPlayers").value; |
|
const starting_amount = +document.getElementById("startAmt").value; |
|
const passkey = document.getElementById("passkey").value; |
|
const res = await api("/create_lobby", { |
|
method: "POST", |
|
body: JSON.stringify({ max_players, starting_amount, passkey }) |
|
}); |
|
lobbyId = res.lobby_id; |
|
showGameArea(); |
|
}; |
|
|
|
document.getElementById("btnJoin").onclick = async () => { |
|
lobbyId = document.getElementById("joinLobbyId").value.trim(); |
|
playerName = document.getElementById("joinName").value.trim(); |
|
const passkey = document.getElementById("joinPass").value.trim(); |
|
await api("/join_lobby", { |
|
method: "POST", |
|
body: JSON.stringify({ lobby_id: lobbyId, player_name: playerName, passkey }) |
|
}); |
|
showGameArea(); |
|
}; |
|
|
|
function showGameArea() { |
|
document.getElementById("lobby-setup").classList.add("hidden"); |
|
document.getElementById("game-area").classList.remove("hidden"); |
|
document.getElementById("lobbyIdDisplay").textContent = lobbyId; |
|
pollState(); |
|
} |
|
|
|
async function pollState() { |
|
try { |
|
const st = await api(`/lobby/${lobbyId}/state`); |
|
renderState(st); |
|
} catch (e) { |
|
console.error(e); |
|
} finally { |
|
setTimeout(pollState, 1500); |
|
} |
|
} |
|
|
|
function renderState({ state, players, community, pot }) { |
|
const ph = document.getElementById("players"); |
|
ph.innerHTML = players.map(p => |
|
`<div class="player"> |
|
<strong>${p.name}</strong><br/> |
|
Chips: ${p.amount}<br/> |
|
${p.cards.map(c=>`<span class="card-slot">${c}</span>`).join('')} |
|
</div>`).join(''); |
|
document.getElementById("community").innerHTML = |
|
community.map(c=>`<span class="card-slot">${c}</span>`).join(''); |
|
document.getElementById("pot").textContent = pot; |
|
document.getElementById("actions").innerHTML = `<p>Game state: ${state}</p>`; |
|
} |