fix swapping and moving players in live sessions (fixes #46)

This commit is contained in:
Steffen 2020-07-19 21:11:23 +02:00
parent ef42239d2c
commit e19aa7a6fe
No known key found for this signature in database
GPG Key ID: 764D74E98267DFC6
5 changed files with 42 additions and 6 deletions

8
package-lock.json generated
View File

@ -1,6 +1,6 @@
{ {
"name": "townsquare", "name": "townsquare",
"version": "1.3.0", "version": "1.4.2",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {
@ -5015,9 +5015,9 @@
} }
}, },
"lodash": { "lodash": {
"version": "4.17.15", "version": "4.17.19",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
"integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ=="
}, },
"lodash.defaultsdeep": { "lodash.defaultsdeep": {
"version": "4.6.1", "version": "4.6.1",

View File

@ -1,6 +1,6 @@
{ {
"name": "townsquare", "name": "townsquare",
"version": "1.4.0", "version": "1.4.2",
"description": "Blood on the Clocktower Town Square", "description": "Blood on the Clocktower Town Square",
"author": "Steffen Baumgart", "author": "Steffen Baumgart",
"scripts": { "scripts": {

View File

@ -82,6 +82,8 @@ export default {
.icon { .icon {
background-size: 100%; background-size: 100%;
background-repeat: no-repeat;
background-position: center 30%;
position: absolute; position: absolute;
width: 100%; width: 100%;
height: 100%; height: 100%;

View File

@ -102,6 +102,8 @@ const mutations = {
state.players[to], state.players[to],
state.players[from] state.players[from]
]; ];
// hack: "modify" the array so that Vue notices something changed
state.players.splice(0, 0);
}, },
move(state, [from, to]) { move(state, [from, to]) {
state.players.splice(to, 0, state.players.splice(from, 1)[0]); state.players.splice(to, 0, state.players.splice(from, 1)[0]);

View File

@ -105,9 +105,19 @@ class LiveSession {
this._handlePing(params); this._handlePing(params);
break; break;
case "nomination": case "nomination":
if (!this._isSpectator) return;
this._store.commit("session/nomination", { nomination: params }); this._store.commit("session/nomination", { nomination: params });
break; 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": case "votingSpeed":
if (!this._isSpectator) return;
this._store.commit("session/setVotingSpeed", params); this._store.commit("session/setVotingSpeed", params);
break; break;
case "vote": 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 => { export default store => {
@ -530,9 +558,13 @@ export default store => {
case "setEdition": case "setEdition":
session.sendEdition(); session.sendEdition();
break; break;
case "players/set":
case "players/swap": case "players/swap":
session.swapPlayer(payload);
break;
case "players/move": case "players/move":
session.movePlayer(payload);
break;
case "players/set":
case "players/clear": case "players/clear":
case "players/remove": case "players/remove":
case "players/add": case "players/add":