diff --git a/client/src/images/roles/custom-role.svg b/client/src/images/roles/custom-role.svg new file mode 100644 index 0000000..3184bb5 --- /dev/null +++ b/client/src/images/roles/custom-role.svg @@ -0,0 +1,107 @@ + + + + diff --git a/client/src/images/screenshots/deckbuilder.PNG b/client/src/images/screenshots/deckbuilder.PNG new file mode 100644 index 0000000..f7310b0 Binary files /dev/null and b/client/src/images/screenshots/deckbuilder.PNG differ diff --git a/client/src/modules/GameCreationStepManager.js b/client/src/modules/GameCreationStepManager.js index a67208b..c6acab6 100644 --- a/client/src/modules/GameCreationStepManager.js +++ b/client/src/modules/GameCreationStepManager.js @@ -537,7 +537,7 @@ function addCustomRoleEventListeners(deckManager, select) { if (!deckManager.getCard(name)) { deckManager.addToDeck(name); let cardEl = constructCompactDeckBuilderElement(deckManager.getCard(name), deckManager); - toast('"' + name + '" included.', 'success', true, true, 3); + toast('"' + name + '" made available below.', 'success', true, true, 4); if (deckManager.getCard(name).team === globals.ALIGNMENT.GOOD) { document.getElementById("deck-good").appendChild(cardEl); } else { @@ -555,6 +555,19 @@ function addCustomRoleEventListeners(deckManager, select) { deckManager.removeFromCustomRoleOptions(name); updateCustomRoleOptionsList(deckManager, select); } + }); + + role.querySelector('.deck-select-info').addEventListener('click', (e) => { + let alignmentEl = document.getElementById("custom-role-info-modal-alignment"); + alignmentEl.classList.remove(globals.ALIGNMENT.GOOD); + alignmentEl.classList.remove(globals.ALIGNMENT.EVIL); + e.preventDefault(); + let option = deckManager.getCustomRoleOption(name); + document.getElementById("custom-role-info-modal-name").innerText = name; + alignmentEl.classList.add(option.team); + document.getElementById("custom-role-info-modal-description").innerText = option.description; + alignmentEl.innerText = option.team; + ModalManager.displayModal("custom-role-info-modal", "modal-background", "close-custom-role-info-modal-button"); }) }); } diff --git a/client/src/modules/GameStateRenderer.js b/client/src/modules/GameStateRenderer.js index 15c18b4..ad16d30 100644 --- a/client/src/modules/GameStateRenderer.js +++ b/client/src/modules/GameStateRenderer.js @@ -15,9 +15,7 @@ export class GameStateRenderer { renderLobbyPlayers() { document.querySelectorAll('.lobby-player').forEach((el) => el.remove()) let lobbyPlayersContainer = document.getElementById("lobby-players"); - if (this.stateBucket.currentGameState.client.userType === globals.USER_TYPES.PLAYER - && this.stateBucket.currentGameState.moderator.userType === globals.USER_TYPES.MODERATOR - ) { + if (this.stateBucket.currentGameState.moderator.userType === globals.USER_TYPES.MODERATOR) { lobbyPlayersContainer.appendChild( renderLobbyPerson( this.stateBucket.currentGameState.moderator.name, @@ -409,10 +407,17 @@ function renderPlayerRole(gameState) { '../images/roles/Villager' + Math.ceil(Math.random() * 2) + '.png' ); } else { - document.getElementById("role-image").setAttribute( - 'src', - '../images/roles/' + gameState.client.gameRole.replaceAll(' ', '') + '.png' - ); + if (gameState.client.customRole) { + document.getElementById("role-image").setAttribute( + 'src', + '../images/roles/custom-role.svg' + ); + } else { + document.getElementById("role-image").setAttribute( + 'src', + '../images/roles/' + gameState.client.gameRole.replaceAll(' ', '') + '.png' + ); + } } } diff --git a/client/src/modules/Templates.js b/client/src/modules/Templates.js index 06e231d..f3bd3b1 100644 --- a/client/src/modules/Templates.js +++ b/client/src/modules/Templates.js @@ -227,11 +227,11 @@ export const templates = { CREATE_GAME_DECK: "