1
0
Fork 0
mirror of https://github.com/em-squared/5e-drs.git synced 2025-10-30 21:24:18 +00:00

amélioration et consolidation du calculateur de caractéristiques

This commit is contained in:
Maxime Moraine 2020-04-28 12:33:49 +02:00
parent 1eaeef1d97
commit 5d94e77883
10 changed files with 215 additions and 132 deletions

View file

@ -22,7 +22,7 @@ export const ABILITYSCORES = [
]
export const POWERTIERS = [
{ text: 'Courageux', pointBuy: 19, standardArray: [14,12,12,10,10,8] },
{ text: 'Héroïque', pointBuy: 27, standardArray: [15,14,13,12,10,8] },
{ text: 'Légendaire', pointBuy: 36, standardArray: [16,15,13,12,12,10] }
{ text: 'Courageux', min: 6, max: 15, pointBuy: 19, standardArray: [14,12,12,10,10,8] },
{ text: 'Héroïque', min: 8, max: 15, pointBuy: 27, standardArray: [15,14,13,12,10,8] },
{ text: 'Légendaire', min: 8, max: 16, pointBuy: 36, standardArray: [16,15,13,12,12,10] }
]

View file

@ -16,67 +16,94 @@ export const races = [
],
},
{
key: 'elfe-d-aether',
label: "Elfe d'aether",
key: 'elfe',
label: "Elfe",
abilityBonuses: [
{ ability: 'dex', value: 2 },
{ ability: 'int', value: 1 }
{ ability: 'dex', value: 2 }
],
variants: [
{
key: 'elfe-d-aether',
label: "Elfe d'aether",
abilityBonuses: [
{ ability: 'dex', value: 2 },
{ ability: 'int', value: 1 }
]
},
{
key: 'elfe-de-fer',
label: "Elfe de fer",
abilityBonuses: [
{ ability: 'dex', value: 2 },
{ ability: 'cha', value: 1 }
]
},
{
key: 'elfe-des-sylves',
label: "Elfe des sylves",
abilityBonuses: [
{ ability: 'dex', value: 2 },
{ ability: 'sag', value: 1 }
]
}
]
},
{
key: 'elfe-de-fer',
label: "Elfe de fer",
key: 'gnome',
label: "Gnome",
abilityBonuses: [
{ ability: 'dex', value: 2 },
{ ability: 'cha', value: 1 }
{ ability: 'int', value: 2 }
],
variants: [
{
key: 'gnome-des-roches',
label: "Gnome des roches",
abilityBonuses: [
{ ability: 'int', value: 2 },
{ ability: 'con', value: 1 }
]
},
{
key: 'gnome-des-fees',
label: "Gnome des fées",
abilityBonuses: [
{ ability: 'int', value: 2 },
{ ability: 'dex', value: 1 }
]
},
{
key: 'gnome-des-lacs',
label: "Gnome des lacs",
abilityBonuses: [
{ ability: 'int', value: 2 },
{ ability: 'sag', value: 1 }
]
}
]
},
{
key: 'elfe-des-sylves',
label: "Elfe des sylves",
key: 'halfelin',
label: "Halfelin",
abilityBonuses: [
{ ability: 'dex', value: 2 },
{ ability: 'sag', value: 1 }
]
},
{
key: 'gnome-des-roches',
label: "Gnome des roches",
abilityBonuses: [
{ ability: 'int', value: 2 },
{ ability: 'con', value: 1 }
]
},
{
key: 'gnome-des-fees',
label: "Gnome des fées",
abilityBonuses: [
{ ability: 'int', value: 2 },
{ ability: 'dex', value: 1 }
]
},
{
key: 'gnome-des-lacs',
label: "Gnome des lacs",
abilityBonuses: [
{ ability: 'int', value: 2 },
{ ability: 'sag', value: 1 }
]
},
{
key: 'halfelin-pied-leger',
label: "Halfelin pied-léger",
abilityBonuses: [
{ ability: 'dex', value: 2 },
{ ability: 'cha', value: 1 }
]
},
{
key: 'halfelin-grand-sabot',
label: "Halfelin grand-sabot",
abilityBonuses: [
{ ability: 'dex', value: 2 },
{ ability: 'con', value: 1 }
{ ability: 'dex', value: 2 }
],
variants: [
{
key: 'halfelin-pied-leger',
label: "Halfelin pied-léger",
abilityBonuses: [
{ ability: 'dex', value: 2 },
{ ability: 'cha', value: 1 }
]
},
{
key: 'halfelin-grand-sabot',
label: "Halfelin grand-sabot",
abilityBonuses: [
{ ability: 'dex', value: 2 },
{ ability: 'con', value: 1 }
]
}
]
},
{
@ -89,40 +116,63 @@ export const races = [
{ ability: 'int', value: 1 },
{ ability: 'sag', value: 1 },
{ ability: 'cha', value: 1 }
],
variants: [
{
key: 'humain',
label: "Humain",
abilityBonuses: [
{ ability: 'for', value: 1 },
{ ability: 'dex', value: 1 },
{ ability: 'con', value: 1 },
{ ability: 'int', value: 1 },
{ ability: 'sag', value: 1 },
{ ability: 'cha', value: 1 }
]
},
{
key: 'humain-variante-don',
label: "Humain (variante don)",
freeAbilityBonuses: { qty: 3, value: 1 }
},
{
key: 'humain-variante-maitrises',
label: "Humain (variante maîtrises)",
freeAbilityBonuses: { qty: 4, value: 1 }
}
]
},
{
key: 'humain-variante-don',
label: "Humain (variante don)",
freeAbilityBonuses: { qty: 3, value: 1 }
},
{
key: 'humain-variante-maitrises',
label: "Humain (variante maîtrises)",
freeAbilityBonuses: { qty: 4, value: 1 }
},
{
key: 'nain-des-tertres',
label: "Nain des tertres",
key: 'nain',
label: "Nain",
abilityBonuses: [
{ ability: 'con', value: 2 },
{ ability: 'sag', value: 1 }
]
},
{
key: 'nain-des-pierres',
label: "Nain des pierres",
abilityBonuses: [
{ ability: 'con', value: 2 },
{ ability: 'int', value: 1 }
]
},
{
key: 'nain-des-laves',
label: "Nain des laves",
abilityBonuses: [
{ ability: 'con', value: 2 },
{ ability: 'for', value: 1 }
{ ability: 'con', value: 2 }
],
variants: [
{
key: 'nain-des-tertres',
label: "Nain des tertres",
abilityBonuses: [
{ ability: 'con', value: 2 },
{ ability: 'sag', value: 1 }
]
},
{
key: 'nain-des-pierres',
label: "Nain des pierres",
abilityBonuses: [
{ ability: 'con', value: 2 },
{ ability: 'int', value: 1 }
]
},
{
key: 'nain-des-laves',
label: "Nain des laves",
abilityBonuses: [
{ ability: 'con', value: 2 },
{ ability: 'for', value: 1 }
]
}
]
},
{

View file

@ -10,7 +10,10 @@
<v-row>
<v-col>
<v-select dense :items="races" label="Race" item-text="label" v-model="race" return-object outlined @change="selectRace(true)"></v-select>
<v-select dense :items="races" label="Race" item-text="label" v-model="selectedRace" return-object outlined @change="selectRace(true, true)"></v-select>
</v-col>
<v-col v-if="selectedRace && selectedRace.variants">
<v-select dense :items="selectedRace.variants" label="Variantes" item-text="label" v-model="selectedSubrace" return-object outlined @change="selectRace(true)"></v-select>
</v-col>
<v-col v-if="race && race.freeAbilityBonuses">
<v-select dense :items="abilityScoresChoices" multiple label="Bonus aux caractéristiques" v-model="abilityBonuses" outlined @change="selectAbilityBonus"></v-select>
@ -45,8 +48,12 @@
<tbody>
<tr v-for="ability in abilityScores" :key="ability.key">
<td class="text-center"><span class="subtitle-2">{{ ability.label }}</span></td>
<td class="text-center" style="width:110px">
<v-text-field v-if="generationMethod == 'pointBuy'" class="text-center" outlined hide-details dense type="number" min="6" max="16" v-model="ability.value"></v-text-field>
<td class="text-center ability-field">
<div v-if="generationMethod == 'pointBuy'" class="d-flex align-center">
<v-btn icon dense color="accent" :disabled="ability.value <= powerTier.min" @click.stop="ability.value--"><v-icon>mdi-minus-circle</v-icon></v-btn>
<v-text-field class="text-center" readonly outlined hide-details dense :value="ability.value"></v-text-field>
<v-btn icon dense color="accent" :disabled="ability.value >= powerTier.max" @click.stop="ability.value++"><v-icon>mdi-plus-circle</v-icon></v-btn>
</div>
<template v-else-if="generationMethod == 'standardArray'">
<v-select v-if="!ability.value" dense :items="standardArrayValues" v-model="ability.value" outlined hide-details clearable @change="selectAbilityValue(ability)"></v-select>
<v-text-field v-else class="text-center" outlined hide-details dense readonly clearable v-model="ability.value"></v-text-field>
@ -89,6 +96,8 @@ export default {
powerTiers: POWERTIERS,
abilityScoresChoices: null,
races: races,
selectedSubrace: null,
selectedRace: null,
race: null,
powerTier: POWERTIERS[1],
abilityScores: [
@ -166,7 +175,17 @@ export default {
return displayBonus(score)
},
selectRace (clear = false) {
selectRace (clearAbilities = false, clearSubrace = false) {
if (clearSubrace) {
this.selectedSubrace = null
}
if (this.selectedSubrace) {
this.race = this.selectedSubrace
} else {
this.race = this.selectedRace
}
for (let ability of this.abilityScores) {
ability.racialBonus = 0
if (this.race.abilityBonuses) {
@ -178,7 +197,7 @@ export default {
}
}
if (clear) {
if (clearAbilities) {
this.abilityBonuses = []
}
@ -230,6 +249,8 @@ export default {
},
reset () {
this.selectedRace = null
this.selectedSubrace = null
this.race = null
this.generationMethod = GENERATION_METHOD_CHOICES[1].value
this.powerTier = POWERTIERS[1]
@ -253,4 +274,9 @@ export default {
text-align: center;
}
}
.ability-field {
.v-input__slot {
width: 80px;
}
}
</style>

View file

@ -11,7 +11,13 @@ import Breadcrumb from '@theme/components/Breadcrumb'
import AbilityCalculator from '@theme/components/AbilityCalculator'
export default {
components: { Breadcrumb, AbilityCalculator }
components: { Breadcrumb, AbilityCalculator },
mounted () {
this.$store.commit('setHasRightDrawer', false)
this.$store.commit('setRightDrawer', this.$vuetify.breakpoint.lgAndUp)
this.$store.commit('setInRightDrawer', null)
}
}
</script>