" +
"" +
"";
if (document.getElementById("game-header")) {
document.getElementById("card-container").removeChild(document.getElementById("game-header"));
}
document.getElementById("card-container").prepend(gameHeader);
// render the card if it hasn't been yet
if (!cardRendered) {
renderPlayerCard(player);
cardRendered = true;
}
// build the clock
if (currentGame.time) {
updateClock();
document.getElementById("pause-container").innerHTML = currentGame.paused ?
""
: "";
document.getElementById("play-pause").addEventListener("click", pauseOrResumeGame)
}
// add the "I'm dead" button
let killedBtn = document.createElement("button");
killedBtn.setAttribute("id", "dead-btn");
if (player.dead) {
killedBtn.setAttribute("class", "app-btn killed-btn disabled");
killedBtn.innerText = "Killed"
} else {
killedBtn.setAttribute("class", "app-btn killed-btn");
killedBtn.innerText = "I'm dead";
}
if (document.getElementById("dead-btn")) {
document.getElementById("card-container").removeChild(document.getElementById("dead-btn"));
}
document.getElementById("card-container").appendChild(killedBtn);
document.getElementById("dead-btn").addEventListener("click", killPlayer);
// add the list of dead/alive players
renderDeadAndAliveInformation();
}
function renderDeadAndAliveInformation() {
let infoContainer = document.getElementById("info-container");
let alivePlayers = currentGame.players.filter((player) => !player.dead).sort((a, b) =>
{
return a.card.role > b.card.role ? 1 : -1;
});
let deadPlayers = currentGame.players.filter((player) => player.dead);
deadPlayers.sort((a, b) => { // sort players by the time they died
return new Date(a.deadAt) > new Date(b.deadAt) ? -1 : 1;
});
let killedContainer = document.createElement("div");
killedContainer.setAttribute("id", "killed-container");
let killedHeader = document.createElement("h2");
killedHeader.innerText = "Killed Players";
killedContainer.appendChild(killedHeader);
deadPlayers.forEach((player) => {
let deadPlayerClass = player.card.team === "good" ? "dead-player-village" : "dead-player-evil";
if (player.card.isTypeOfWerewolf) {
deadPlayerClass += " dead-player-wolf";
}
const killedPlayer = document.createElement("div");
killedPlayer.setAttribute("class", "killed-player " + deadPlayerClass);
killedPlayer.innerText = player.name + ": " + player.card.role;
killedContainer.appendChild(killedPlayer);
});
let aliveContainer = document.createElement("div");
aliveContainer.setAttribute("id", "alive-container");
let aliveHeader = document.createElement("h2");
aliveContainer.appendChild(aliveHeader);
aliveHeader.innerText = "Roles Still Alive";
var rollCounter={}; //RTM
alivePlayers.forEach((player) => {
let alivePlayerClass = player.card.team === "good" ? "alive-player-village" : "alive-player-evil";
if (player.card.isTypeOfWerewolf) {
alivePlayerClass += " alive-player-wolf";
}
//RTM
if (rollCounter.hasOwnProperty(player.card.role)) {
rollCounter[player.card.role]+=1;
}
else {
rollCounter[player.card.role]=1;
//RTM
const alivePlayer = document.createElement("div");
alivePlayer.setAttribute("class", "alive-player " + alivePlayerClass);
alivePlayer.innerHTML = "
" + player.card.role + "
";
let roleCount=document.createElement("span");//RTM
roleCount.setAttribute("class","rolecount");
//Add hidden description span - RTM 4/18/2020
let playerCardInfo=document.createElement("span");
playerCardInfo.setAttribute("class","tooltiptext");
playerCardInfo.innerText=player.card.description;
alivePlayer.appendChild(roleCount);
alivePlayer.appendChild(playerCardInfo);
aliveContainer.appendChild(alivePlayer);
}
});
if (infoContainer === null) {
infoContainer = document.createElement("div");
infoContainer.setAttribute("id", "info-container");
infoContainer.appendChild(killedContainer);
infoContainer.appendChild(aliveContainer);
document.getElementById("game-container").appendChild(infoContainer);
//Has to be done AFTER the infoContainer is rendered in the DOM to insert the updated counts
for (let x of document.getElementsByClassName("alive-player")) {
x.getElementsByClassName("rolecount")[0].innerHTML=rollCounter[x.getElementsByTagName("P")[0].innerHTML];
}
} else {
document.getElementById("killed-container").remove();
document.getElementById("alive-container").remove();
document.getElementById("info-container").append(killedContainer);
document.getElementById("info-container").append(aliveContainer);
//Has to be done AFTER the infoContainer is rendered in the DOM to insert the updated counts
for (let x of document.getElementsByClassName("alive-player")) {
x.getElementsByClassName("rolecount")[0].innerHTML=rollCounter[x.getElementsByTagName("P")[0].innerHTML];
}
}
}
function renderPlayerCard(player) {
const card = player.card;
const cardArt = standardRoles.includes(card.role) ?
""
: "
";
document.getElementById("lobby-container").appendChild(subHeader);
}
// Render all players that are new
let i = 1;
for (let player of currentGame.players) {
if(!document.getElementById("player-" + i)) {
const playerContainer = document.createElement("div");
player.id === sessionStorage.getItem("id") ?
playerContainer.setAttribute("class", "lobby-player highlighted")
: playerContainer.setAttribute("class", "lobby-player");
playerContainer.setAttribute("id", "player-" + i);
playerContainer.innerHTML = "
" + player.name + "
";
document.getElementById("lobby-container").appendChild(playerContainer);
document.getElementById("join-count").innerText = currentGame.players.length.toString();
}
i ++;
}
// display the launch button if the player is the host
if (sessionStorage.getItem("host")) {
if (currentGame.players.length === currentGame.size) {
document.getElementById("launch").innerHTML = "";
document.getElementById("launch").addEventListener("click", launchGame);
} else {
document.getElementById("launch").innerHTML = "";
}
} else {
document.getElementById("launch").innerHTML = "
The host will start the game.
"
}
}
// request game state from server periodically
setInterval(function () {
socket.emit('requestState', {code: sessionStorage.getItem("code")});
}, 200);