mirror of
https://github.com/bra1n/townsquare.git
synced 2025-04-04 22:24:36 +00:00
147 lines
3.6 KiB
Vue
147 lines
3.6 KiB
Vue
<template>
|
|
<Modal
|
|
v-show="modals.reminder && availableReminders.length"
|
|
v-if="players[playerIndex]"
|
|
@close="toggleModal('reminder')"
|
|
>
|
|
<h3>Choose a reminder token:</h3>
|
|
<ul class="reminders">
|
|
<li
|
|
v-for="reminder in availableReminders"
|
|
class="reminder"
|
|
:class="[reminder.role]"
|
|
:key="reminder.role + ' ' + reminder.name"
|
|
@click="addReminder(reminder)"
|
|
>
|
|
<span
|
|
class="icon"
|
|
:style="{
|
|
backgroundImage: `url(${reminder.image ||
|
|
require('../../assets/icons/' + reminder.role + '.png')})`
|
|
}"
|
|
></span>
|
|
<span class="text">{{ reminder.name }}</span>
|
|
</li>
|
|
</ul>
|
|
</Modal>
|
|
</template>
|
|
|
|
<script>
|
|
import Modal from "./Modal";
|
|
import { mapMutations, mapState } from "vuex";
|
|
|
|
export default {
|
|
components: { Modal },
|
|
props: ["playerIndex"],
|
|
computed: {
|
|
availableReminders() {
|
|
let reminders = [];
|
|
const players = this.$store.state.players.players;
|
|
this.$store.state.roles.forEach(role => {
|
|
if (players.some(p => p.role.id === role.id)) {
|
|
reminders = [
|
|
...reminders,
|
|
...role.reminders.map(name => ({
|
|
role: role.id,
|
|
image: role.image,
|
|
name
|
|
}))
|
|
];
|
|
}
|
|
if (role.remindersGlobal && role.remindersGlobal.length) {
|
|
reminders = [
|
|
...reminders,
|
|
...role.remindersGlobal.map(name => ({
|
|
role: role.id,
|
|
image: role.image,
|
|
name
|
|
}))
|
|
];
|
|
}
|
|
});
|
|
this.$store.state.players.fabled.forEach(role => {
|
|
reminders = [
|
|
...reminders,
|
|
...role.reminders.map(name => ({
|
|
role: role.id,
|
|
image: role.image,
|
|
name
|
|
}))
|
|
];
|
|
});
|
|
reminders.push({ role: "good", name: "Good" });
|
|
reminders.push({ role: "evil", name: "Evil" });
|
|
reminders.push({ role: "custom", name: "Custom note" });
|
|
return reminders;
|
|
},
|
|
...mapState(["modals"]),
|
|
...mapState("players", ["players"])
|
|
},
|
|
methods: {
|
|
addReminder(reminder) {
|
|
const player = this.$store.state.players.players[this.playerIndex];
|
|
let value;
|
|
if (reminder.role === "custom") {
|
|
const name = prompt("Add a custom reminder note");
|
|
if (!name) return;
|
|
value = [...player.reminders, { role: "custom", name }];
|
|
} else {
|
|
value = [...player.reminders, reminder];
|
|
}
|
|
this.$store.commit("players/update", {
|
|
player,
|
|
property: "reminders",
|
|
value
|
|
});
|
|
this.$store.commit("toggleModal", "reminder");
|
|
},
|
|
...mapMutations(["toggleModal"])
|
|
}
|
|
};
|
|
</script>
|
|
|
|
<style scoped lang="scss">
|
|
ul.reminders .reminder {
|
|
background: url("../../assets/reminder.png") center center;
|
|
background-size: 100%;
|
|
width: 14vh;
|
|
height: 14vh;
|
|
max-width: 100px;
|
|
max-height: 100px;
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
margin: 1%;
|
|
|
|
border-radius: 50%;
|
|
border: 3px solid black;
|
|
box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
|
|
cursor: pointer;
|
|
line-height: 100%;
|
|
transition: transform 500ms ease;
|
|
|
|
.icon {
|
|
position: absolute;
|
|
top: 0;
|
|
width: 90%;
|
|
height: 90%;
|
|
background-size: 100%;
|
|
background-position: center center;
|
|
background-repeat: no-repeat;
|
|
}
|
|
|
|
.text {
|
|
color: black;
|
|
font-size: 65%;
|
|
font-weight: bold;
|
|
text-align: center;
|
|
top: 28%;
|
|
width: 80%;
|
|
line-height: 1;
|
|
}
|
|
|
|
&:hover {
|
|
transform: scale(1.2);
|
|
}
|
|
}
|
|
</style>
|