diff --git a/package-lock.json b/package-lock.json index 781c169..3338312 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "townsquare", - "version": "1.4.0", + "version": "1.5.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 2351a32..bfe0656 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "townsquare", - "version": "1.4.0", + "version": "1.5.0", "description": "Blood on the Clocktower Town Square", "author": "Steffen Baumgart", "scripts": { diff --git a/server/index.js b/server/index.js index 7c9cd4a..130b894 100644 --- a/server/index.js +++ b/server/index.js @@ -9,7 +9,9 @@ const server = https.createServer({ const wss = new WebSocket.Server({ ...(process.env.NODE_ENV === "development" ? { port: 8081 } : { server }), verifyClient: info => - !!info.origin.match(/^https?:\/\/(bra1n\.github\.io|localhost)/i) + !!info.origin.match( + /^https?:\/\/(bra1n\.github\.io|localhost|eddbra1nprivatetownsquare\.xyz)/i + ) }); function noop() {} diff --git a/src/components/Player.vue b/src/components/Player.vue index aab6a97..892cda7 100644 --- a/src/components/Player.vue +++ b/src/components/Player.vue @@ -806,7 +806,8 @@ li.move:not(.from) .player .overlay svg.move { } .player.dead .night em { - opacity: 0; + color: #ddd; + background: linear-gradient(180deg, rgba(0, 0, 0, 1) 0%, gray 100%) ; } /***** Reminder token *****/ diff --git a/src/components/Token.vue b/src/components/Token.vue index 7d19cc0..9315694 100644 --- a/src/components/Token.vue +++ b/src/components/Token.vue @@ -82,6 +82,8 @@ export default { .icon { background-size: 100%; + background-repeat: no-repeat; + background-position: center 30%; position: absolute; width: 100%; height: 100%; diff --git a/src/store/modules/players.js b/src/store/modules/players.js index 491b40b..5ced014 100644 --- a/src/store/modules/players.js +++ b/src/store/modules/players.js @@ -25,8 +25,8 @@ const getters = { nightOrder({ players }) { const firstNight = [0]; const otherNight = [0]; - players.forEach(({ role, isDead }) => { - if (isDead) return; + players.forEach(({ role }) => { + // if (isDead) return; if (role.firstNight && !firstNight.includes(role.firstNight)) { firstNight.push(role.firstNight); } @@ -102,6 +102,8 @@ const mutations = { state.players[to], state.players[from] ]; + // hack: "modify" the array so that Vue notices something changed + state.players.splice(0, 0); }, move(state, [from, to]) { state.players.splice(to, 0, state.players.splice(from, 1)[0]); diff --git a/src/store/socket.js b/src/store/socket.js index 6eaaee2..1d6f62b 100644 --- a/src/store/socket.js +++ b/src/store/socket.js @@ -105,9 +105,19 @@ class LiveSession { this._handlePing(params); break; case "nomination": + if (!this._isSpectator) return; this._store.commit("session/nomination", { nomination: params }); break; + case "swap": + if (!this._isSpectator) return; + this._store.commit("players/swap", params); + break; + case "move": + if (!this._isSpectator) return; + this._store.commit("players/move", params); + break; case "votingSpeed": + if (!this._isSpectator) return; this._store.commit("session/setVotingSpeed", params); break; case "vote": @@ -495,6 +505,24 @@ class LiveSession { } } } + + /** + * Swap two player seats. ST only + * @param payload + */ + swapPlayer(payload) { + if (this._isSpectator) return; + this._send("swap", payload); + } + + /** + * Move a player to another seat. ST only + * @param payload + */ + movePlayer(payload) { + if (this._isSpectator) return; + this._send("move", payload); + } } export default store => { @@ -530,9 +558,13 @@ export default store => { case "setEdition": session.sendEdition(); break; - case "players/set": case "players/swap": + session.swapPlayer(payload); + break; case "players/move": + session.movePlayer(payload); + break; + case "players/set": case "players/clear": case "players/remove": case "players/add":