Files
DiceCloud/app/imports/client/ui/tabletop/TabletopCreatureCard.vue
2023-01-15 14:18:17 +02:00

94 lines
2.1 KiB
Vue

<template lang="html">
<v-card
style="height: 100px; width: 70px;"
class="tabletop-creature-card"
:class="{ active }"
:hover="hasClickListener"
:elevation="active ? 8 : 2"
@mouseover="() => { if (hasClickListener) hover = true; }"
@mouseleave="hover = false"
v-on="hasClickListener ? {click: () => $emit('click')} : {}"
>
<v-progress-linear
v-if="variables.hitPoints"
:value="variables.hitPoints.value * 100 / variables.hitPoints.total"
/>
<v-img
:src="model.picture"
aspect-ratio="1"
position="top center"
/>
<div
class="small-title"
>
{{ model.name }}
</div>
<card-highlight :active="hover" />
<div class="d-flex justify-center">
<v-scale-transition>
<v-btn
v-if="showTargetBtn"
:color="targeted ? 'accent' : ''"
:elevation="targeted ? 8 : 2"
fab
small
@click.stop="targeted ? $emit('untarget') : $emit('target')"
>
<v-icon>{{ targeted ? 'mdi-target' : 'mdi-target' }}</v-icon>
</v-btn>
</v-scale-transition>
</div>
</v-card>
</template>
<script lang="js">
import CreatureVariables from '/imports/api/creature/creatures/CreatureVariables.js';
import CardHighlight from '/imports/client/ui/components/CardHighlight.vue';
export default {
components: {
CardHighlight,
},
props: {
model: {
type: Object,
required: true,
},
active: Boolean,
targeted: Boolean,
showTargetBtn: Boolean,
},
data(){return {
hover: false,
}
},
computed: {
hasClickListener() {
return this.$listeners && !!this.$listeners.click;
},
},
// @ts-ignore
meteor: {
variables() {
return CreatureVariables.findOne({ _creatureId: this.model._id }) || {};
}
}
}
</script>
<style lang="css" scoped>
.small-title {
font-size: 12px;
padding: 4px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
</style>
<style lang="css">
.tabletop-creature-card .v-btn {
transition: all .3s ease;
}
</style>