Ajout: Information de distance
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import { Distance } from "../combat/distance.mjs"
|
||||
import { RDD_CONFIG } from "../constants.js"
|
||||
import { ATTAQUE_TYPE_MELEE } from "../item/arme.js"
|
||||
import { RdDBonus } from "../rdd-bonus.js"
|
||||
@@ -30,7 +31,7 @@ export class RollPartAttaque extends RollPartSelect {
|
||||
loadRefs(rollData) {
|
||||
const refs = this.getRefs(rollData)
|
||||
const attaques = rollData.active.actor.listAttaques()
|
||||
refs.all = attaques.map(it => RollPartAttaque.$extractAttaque(it, rollData.active.actor))
|
||||
refs.all = attaques.map(it => RollPartAttaque.$extractAttaque(it, rollData))
|
||||
this.filterAttaquesEmpoignade(rollData)
|
||||
refs.tactiques = TACTIQUES
|
||||
if (refs.attaques.length > 0) {
|
||||
@@ -64,13 +65,22 @@ export class RollPartAttaque extends RollPartSelect {
|
||||
|
||||
choices(refs) { return refs.attaques }
|
||||
|
||||
static $extractAttaque(attaque, actor) {
|
||||
static $extractAttaque(attaque, rollData) {
|
||||
attaque.key = `${attaque.action}::${attaque.label}`
|
||||
attaque.tactique = TACTIQUES[0]
|
||||
attaque.initialDiff = attaque.comp?.system.default_diffLibre ?? 0
|
||||
if (RollPartAttaque.isAttaqueDistance(attaque)) {
|
||||
attaque.distance = Distance.ajustements(rollData.active.token,
|
||||
rollData.opponent.token,
|
||||
attaque.arme)
|
||||
}
|
||||
return attaque
|
||||
}
|
||||
|
||||
static isAttaqueDistance(attaque) {
|
||||
return ['(lancer)', '(tir)'].includes(attaque.main)
|
||||
}
|
||||
|
||||
prepareContext(rollData) {
|
||||
this.filterAttaquesEmpoignade(rollData)
|
||||
const current = this.getCurrent(rollData)
|
||||
@@ -102,20 +112,22 @@ export class RollPartAttaque extends RollPartSelect {
|
||||
}
|
||||
|
||||
async _onRender(rollDialog, context, options) {
|
||||
const inputDiff = rollDialog.element.querySelector(`roll-section[name="diff"] input[name="diff"]`)
|
||||
const selectAttaque = rollDialog.element.querySelector(`roll-section[name="${this.code}"] select[name="select-attaque"]`)
|
||||
const selectTactique = rollDialog.element.querySelector(`roll-section[name="${this.code}"] select[name="select-tactique"]`)
|
||||
const checkMortalite = rollDialog.element.querySelector(`roll-section[name="${this.code}"] input[name="check-mortalite"]`)
|
||||
const utiliserDagueEmpoignade = rollDialog.element.querySelector(`roll-section[name="${this.code}"] a.utiliser-dague-empoignade`)
|
||||
const current = this.getCurrent(rollDialog.rollData)
|
||||
const rollData = rollDialog.rollData
|
||||
const current = this.getCurrent(rollData)
|
||||
|
||||
selectAttaque.addEventListener("change", e => {
|
||||
selectAttaque?.addEventListener("change", e => {
|
||||
const selectOptions = e.currentTarget.options
|
||||
const index = selectOptions.selectedIndex
|
||||
this.$selectAttaque(rollDialog.rollData, selectOptions[index]?.value)
|
||||
this.$selectAttaque(rollData, selectOptions[index]?.value)
|
||||
rollDialog.render()
|
||||
})
|
||||
|
||||
selectTactique.addEventListener("change", e => {
|
||||
selectTactique?.addEventListener("change", e => {
|
||||
const selectOptions = e.currentTarget.options
|
||||
const index = selectOptions.selectedIndex
|
||||
current.tactique = RdDBonus.find(selectOptions[index]?.value)
|
||||
@@ -128,9 +140,11 @@ export class RollPartAttaque extends RollPartSelect {
|
||||
})
|
||||
utiliserDagueEmpoignade?.addEventListener("click", e => {
|
||||
e.preventDefault()
|
||||
const rollData = rollDialog.rollData
|
||||
this.utiliserDagueEmpoignade(rollData)
|
||||
})
|
||||
inputDiff?.addEventListener("input", e => {
|
||||
this.getRefs(rollData).all.forEach(attaque => attaque.initialDiff = undefined)
|
||||
})
|
||||
}
|
||||
|
||||
utiliserDagueEmpoignade(rollData) {
|
||||
@@ -153,8 +167,11 @@ export class RollPartAttaque extends RollPartSelect {
|
||||
case PART_CARAC: return part.filterCaracs(rollData, [current.carac.key])
|
||||
case PART_COMP: return part.filterComps(rollData, [current.comp.name])
|
||||
case PART_DIFF: {
|
||||
if (current.initialDiff) {
|
||||
part.setDiff(rollData, { type: DIFF.ATTAQUE, value: current.initialDiff })
|
||||
if (RollPartAttaque.isAttaqueDistance(current)) {
|
||||
part.setDiff(rollData, { type: DIFF.DEFAUT })
|
||||
}
|
||||
else {
|
||||
part.setDiff(rollData, { type: DIFF.ATTAQUE, diff: current.initialDiff })
|
||||
current.initialDiff = undefined
|
||||
}
|
||||
break
|
||||
|
||||
Reference in New Issue
Block a user