66 lines
1.8 KiB
JavaScript
66 lines
1.8 KiB
JavaScript
import { RdDCarac } from "../rdd-carac.js"
|
|
import { RollPartSelect } from "./roll-part-select.mjs"
|
|
import { ROLLDIALOG_SECTION, RollPart } from "./roll-part.mjs"
|
|
|
|
const COEUR = "coeur"
|
|
|
|
const SANS_AMOUR = { key: '', label: "", value: 0 }
|
|
|
|
export class RollPartCoeur extends RollPartSelect {
|
|
|
|
get code() { return COEUR }
|
|
get section() { return ROLLDIALOG_SECTION.CONDITIONS }
|
|
|
|
get useCheckboxTemplate() { return false }
|
|
|
|
isValid(rollData) { return rollData.active.actor.isPersonnage() }
|
|
visible(rollData) {
|
|
return this.getRefs(rollData).amoureux.length > 1 && RdDCarac.isVolonte(rollData.current.carac.key)
|
|
}
|
|
|
|
loadRefs(rollData) {
|
|
const liste = rollData.active.actor.listeAmoureux()
|
|
.filter(amour => amour.coeur > 0)
|
|
.map(RollPartCoeur.$extractAmoureux)
|
|
|
|
this.getRefs(rollData).amoureux = [SANS_AMOUR, ...liste]
|
|
this.$selectAmoureux(rollData)
|
|
}
|
|
|
|
choices(refs) { return refs.amoureux }
|
|
|
|
static $extractAmoureux(amour) {
|
|
return {
|
|
key: amour.id,
|
|
label: amour.name,
|
|
value: -2 * (amour?.coeur ?? 0),
|
|
amour: amour
|
|
}
|
|
}
|
|
|
|
$selectAmoureux(rollData, key) {
|
|
this.selectByKey(rollData, key, 0)
|
|
}
|
|
|
|
getAjustements(rollData) {
|
|
const current = this.getCurrent(rollData)
|
|
if (current.key != '') {
|
|
return [{
|
|
label: "Coeur pour " + current.label,
|
|
diff: current.value
|
|
}]
|
|
}
|
|
return []
|
|
}
|
|
|
|
async _onRender(rollDialog, context, options) {
|
|
const selectAmour = rollDialog.element.querySelector(`roll-section[name="${this.code}"] select[name="${this.code}"]`)
|
|
|
|
selectAmour?.addEventListener("change", e => {
|
|
const selectOptions = e.currentTarget.options
|
|
const index = selectOptions.selectedIndex
|
|
this.$selectAmoureux(rollDialog.rollData, selectOptions[index]?.value)
|
|
rollDialog.render()
|
|
})
|
|
}
|
|
} |