add support for custom fabled (closes #110)

This commit is contained in:
Steffen 2021-04-15 21:05:00 +02:00
parent d8861949c4
commit a7852115fe
No known key found for this signature in database
GPG Key ID: 764D74E98267DFC6
4 changed files with 66 additions and 50 deletions

View File

@ -1,5 +1,10 @@
# Release Notes
### Version 2.13.0
- add support for custom Fabled characters
---
### Version 2.12.0
- tweak reference sheet to better fit screen in single column layout
- add warning icon overlay for setup roles on character assignment modal

View File

@ -162,8 +162,7 @@ export default new Vuex.Store({
* @param roles Array of role IDs or full role definitions
*/
setCustomRoles(state, roles) {
state.roles = new Map(
roles
const processedRoles = roles
// replace numerical role object keys with matching key names
.map(role => {
if (role[0]) {
@ -206,10 +205,18 @@ export default new Vuex.Store({
// filter out roles that don't match an existing role and also don't have name/ability/team
.filter(role => role.name && role.ability && role.team)
// sort by team
.sort((a, b) => b.team.localeCompare(a.team))
// convert to Map
.sort((a, b) => b.team.localeCompare(a.team));
// convert to Map without Fabled
state.roles = new Map(
processedRoles
.filter(role => role.team !== "fabled")
.map(role => [role.id, role])
);
// update Fabled to include custom Fabled from this script
state.fabled = new Map([
...fabledJSON.map(role => [role.id, role]),
...processedRoles.filter(r => r.team === "fabled").map(r => [r.id, r])
]);
// update extraTravelers map to only show travelers not in this script
state.otherTravelers = new Map(
rolesJSON

View File

@ -39,8 +39,8 @@ module.exports = store => {
}
if (localStorage.fabled !== undefined) {
store.commit("players/setFabled", {
fabled: JSON.parse(localStorage.fabled).map(id =>
store.state.fabled.get(id)
fabled: JSON.parse(localStorage.fabled).map(
fabled => store.state.fabled.get(fabled.id) || fabled
)
});
}
@ -127,7 +127,11 @@ module.exports = store => {
case "players/setFabled":
localStorage.setItem(
"fabled",
JSON.stringify(state.players.fabled.map(({ id }) => id))
JSON.stringify(
state.players.fabled.map(fabled =>
fabled.isCustom ? fabled : { id: fabled.id }
)
)
);
break;
case "players/add":

View File

@ -272,7 +272,7 @@ class LiveSession {
votingSpeed: session.votingSpeed,
lockedVote: session.lockedVote,
isVoteInProgress: session.isVoteInProgress,
fabled: fabled.map(({ id }) => id),
fabled: fabled.map(f => (f.isCustom ? f : { id: f.id })),
...(session.nomination ? { votes: session.votes } : {})
});
}
@ -348,7 +348,7 @@ class LiveSession {
isVoteInProgress
});
this._store.commit("players/setFabled", {
fabled: fabled.map(id => this._store.state.fabled.get(id))
fabled: fabled.map(f => this._store.state.fabled.get(f.id) || f)
});
}
}
@ -407,7 +407,7 @@ class LiveSession {
const { fabled } = this._store.state.players;
this._send(
"fabled",
fabled.map(({ id }) => id)
fabled.map(f => (f.isCustom ? f : { id: f.id }))
);
}
@ -419,7 +419,7 @@ class LiveSession {
_updateFabled(fabled) {
if (!this._isSpectator) return;
this._store.commit("players/setFabled", {
fabled: fabled.map(id => this._store.state.fabled.get(id))
fabled: fabled.map(f => this._store.state.fabled.get(f.id) || f)
});
}